ronetix-pm9g45: Added new machine, with kernel 2.6.30.
authorLeon Woestenberg <leon@sidebranch.com>
Mon, 21 Feb 2011 15:10:22 +0000 (16:10 +0100)
committerLeon Woestenberg <leon@sidebranch.com>
Mon, 21 Feb 2011 15:11:04 +0000 (16:11 +0100)
15 files changed:
conf/machine/ronetix-pm9g45.conf [new file with mode: 0644]
recipes/linux/linux-2.6.30/ronetix-pm9g45/0001-ads7846-.c-and-.h-add-swap_xy.patch [new file with mode: 0644]
recipes/linux/linux-2.6.30/ronetix-pm9g45/0002-add-pm9g45-number-in-mach-types.patch [new file with mode: 0644]
recipes/linux/linux-2.6.30/ronetix-pm9g45/0003-print-some-more-info-from-atmel_nand.c.patch [new file with mode: 0644]
recipes/linux/linux-2.6.30/ronetix-pm9g45/0004-add-newline-at-the-end-of-uncorrectable-error.patch [new file with mode: 0644]
recipes/linux/linux-2.6.30/ronetix-pm9g45/0005-Add-CompactFlash-to-at91sam9g45-architecture.patch [new file with mode: 0644]
recipes/linux/linux-2.6.30/ronetix-pm9g45/0006-pm9g45-system-ram-can-be-on-CS1-or-CS6.patch [new file with mode: 0644]
recipes/linux/linux-2.6.30/ronetix-pm9g45/0007-add-pm9g45-board.patch [new file with mode: 0644]
recipes/linux/linux-2.6.30/ronetix-pm9g45/0008-pm9g45-default-configuration-files.patch [new file with mode: 0644]
recipes/linux/linux-2.6.30/ronetix-pm9g45/0009-add-float-flags-in-Makefile.patch [new file with mode: 0644]
recipes/linux/linux-2.6.30/ronetix-pm9g45/0010-conditional-compile-if-DEDICATED_VRAM.patch [new file with mode: 0644]
recipes/linux/linux-2.6.30/ronetix-pm9g45/0011-add-pm9g45-board-version-1.2-and-adjust-memory-sele.patch [new file with mode: 0644]
recipes/linux/linux-2.6.30/ronetix-pm9g45/2.6.30-at91-exp.patch [new file with mode: 0644]
recipes/linux/linux-2.6.30/ronetix-pm9g45/defconfig [new file with mode: 0644]
recipes/linux/linux_2.6.30.bb

diff --git a/conf/machine/ronetix-pm9g45.conf b/conf/machine/ronetix-pm9g45.conf
new file mode 100644 (file)
index 0000000..766fe91
--- /dev/null
@@ -0,0 +1,22 @@
+#@TYPE: Machine
+#@Name: Ronetix SAM9G45
+#@DESCRIPTION: Machine configuration for Ronetix module with AT91SAM9G45 processor
+
+include conf/machine/include/at91-2.6.30.inc
+include conf/machine/include/at91-lcd.inc
+
+#PREFERRED_VERSION_linux = "2.6.30"
+
+# Has linux config file in OpenEmbedded
+#
+LINUX26_DEFCONFIG = "at91sam9g45ek_defconfig"
+
+# Supported u-boot machines
+UBOOT_MACHINE = "at91sam9m10g45ek_dataflash_cs0_config"
+#UBOOT_MACHINE = "icnova_arm9sodimm_config"
+UBOOT_ENTRYPOINT = "0x70008000"
+
+AT91BOOTSTRAP_BOARD = "at91sam9g45df at91sam9g45ek at91sam9g45nf"
+
+MACHINE_FEATURES += "usbhost"
+
diff --git a/recipes/linux/linux-2.6.30/ronetix-pm9g45/0001-ads7846-.c-and-.h-add-swap_xy.patch b/recipes/linux/linux-2.6.30/ronetix-pm9g45/0001-ads7846-.c-and-.h-add-swap_xy.patch
new file mode 100644 (file)
index 0000000..676b0c2
--- /dev/null
@@ -0,0 +1,100 @@
+From 84325d6118849188bd765933e0f2db6795df9756 Mon Sep 17 00:00:00 2001
+From: Asen Dimov <dimov@ronetix.at>
+Date: Tue, 2 Mar 2010 00:58:51 +0200
+Subject: [PATCH] ads7846 .c and .h add swap_xy
+
+---
+ drivers/input/touchscreen/ads7846.c |   24 ++++++++++++++++++++----
+ include/linux/spi/ads7846.h         |    1 +
+ 2 files changed, 21 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/input/touchscreen/ads7846.c b/drivers/input/touchscreen/ads7846.c
+index 2b01e56..09c8109 100644
+--- a/drivers/input/touchscreen/ads7846.c
++++ b/drivers/input/touchscreen/ads7846.c
+@@ -83,6 +83,7 @@ struct ads7846_packet {
+ struct ads7846 {
+       struct input_dev        *input;
+       char                    phys[32];
++      char                    name[32];
+       struct spi_device       *spi;
+@@ -97,6 +98,8 @@ struct ads7846 {
+       u16                     x_plate_ohms;
+       u16                     pressure_max;
++      bool                    swap_xy;
++
+       struct ads7846_packet   *packet;
+       struct spi_transfer     xfer[18];
+@@ -599,6 +602,10 @@ static void ads7846_rx(void *ads)
+                       dev_dbg(&ts->spi->dev, "DOWN\n");
+ #endif
+               }
++
++              if (ts->swap_xy)
++                      swap(x, y);
++
+               input_report_abs(input, ABS_X, x);
+               input_report_abs(input, ABS_Y, y);
+               input_report_abs(input, ABS_PRESSURE, Rt);
+@@ -917,6 +924,7 @@ static int __devinit ads7846_probe(struct spi_device *spi)
+       ts->spi = spi;
+       ts->input = input_dev;
+       ts->vref_mv = pdata->vref_mv;
++      ts->swap_xy = pdata->swap_xy;
+       hrtimer_init(&ts->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
+       ts->timer.function = ads7846_timer;
+@@ -958,8 +966,9 @@ static int __devinit ads7846_probe(struct spi_device *spi)
+       ts->wait_for_sync = pdata->wait_for_sync ? : null_wait_for_sync;
+       snprintf(ts->phys, sizeof(ts->phys), "%s/input0", dev_name(&spi->dev));
++      snprintf(ts->name, sizeof(ts->name), "ADS%d Touchscreen", ts->model);
+-      input_dev->name = "ADS784x Touchscreen";
++      input_dev->name = ts->name;
+       input_dev->phys = ts->phys;
+       input_dev->dev.parent = &spi->dev;
+@@ -1141,9 +1150,15 @@ static int __devinit ads7846_probe(struct spi_device *spi)
+       if (request_irq(spi->irq, ads7846_irq, IRQF_TRIGGER_FALLING,
+                       spi->dev.driver->name, ts)) {
+-              dev_dbg(&spi->dev, "irq %d busy?\n", spi->irq);
+-              err = -EBUSY;
+-              goto err_free_gpio;
++              dev_info(&spi->dev,
++                      "trying pin change workaround on irq %d\n", spi->irq);
++              err = request_irq(spi->irq, ads7846_irq,
++                                IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING,
++                                spi->dev.driver->name, ts);
++              if (err) {
++                      dev_dbg(&spi->dev, "irq %d busy?\n", spi->irq);
++                      goto err_free_gpio;
++              }
+       }
+       err = ads784x_hwmon_register(spi, ts);
+@@ -1241,3 +1256,4 @@ module_exit(ads7846_exit);
+ MODULE_DESCRIPTION("ADS7846 TouchScreen Driver");
+ MODULE_LICENSE("GPL");
++MODULE_ALIAS("spi:ads7846");
+diff --git a/include/linux/spi/ads7846.h b/include/linux/spi/ads7846.h
+index 2ea2032..51948eb 100644
+--- a/include/linux/spi/ads7846.h
++++ b/include/linux/spi/ads7846.h
+@@ -17,6 +17,7 @@ struct ads7846_platform_data {
+       u16     vref_mv;                /* external vref value, milliVolts */
+       bool    keep_vref_on;           /* set to keep vref on for differential
+                                        * measurements as well */
++      bool    swap_xy;                /* swap x and y axes */
+       /* Settling time of the analog signals; a function of Vcc and the
+        * capacitance on the X/Y drivers.  If set to non-zero, two samples
+-- 
+1.5.5.6
+
diff --git a/recipes/linux/linux-2.6.30/ronetix-pm9g45/0002-add-pm9g45-number-in-mach-types.patch b/recipes/linux/linux-2.6.30/ronetix-pm9g45/0002-add-pm9g45-number-in-mach-types.patch
new file mode 100644 (file)
index 0000000..2917c1d
--- /dev/null
@@ -0,0 +1,4896 @@
+From bc099148e45275e67743e28b3a620758d2693ca5 Mon Sep 17 00:00:00 2001
+From: Asen Dimov <dimov@ronetix.at>
+Date: Tue, 2 Mar 2010 01:00:54 +0200
+Subject: [PATCH] add pm9g45 number in mach-types
+
+---
+ arch/arm/tools/mach-types | 4873 ++++++++++++++++++++++++---------------------
+ 1 files changed, 2642 insertions(+), 2231 deletions(-)
+
+diff --git a/arch/arm/tools/mach-types b/arch/arm/tools/mach-types
+index 165288a..e7ab8d2 100644
+--- a/arch/arm/tools/mach-types
++++ b/arch/arm/tools/mach-types
+@@ -12,2237 +12,2648 @@
+ #
+ #   http://www.arm.linux.org.uk/developer/machines/?action=new
+ #
+-# Last update: Fri May 29 10:14:20 2009
++# Last update: Mon Feb 8 16:28:27 2010
+ #
+ # machine_is_xxx      CONFIG_xxxx             MACH_TYPE_xxx           number
+ #
+-ebsa110                       ARCH_EBSA110            EBSA110                 0
+-riscpc                        ARCH_RPC                RISCPC                  1
+-nexuspci              ARCH_NEXUSPCI           NEXUSPCI                3
+-ebsa285                       ARCH_EBSA285            EBSA285                 4
+-netwinder             ARCH_NETWINDER          NETWINDER               5
+-cats                  ARCH_CATS               CATS                    6
+-tbox                  ARCH_TBOX               TBOX                    7
+-co285                 ARCH_CO285              CO285                   8
+-clps7110              ARCH_CLPS7110           CLPS7110                9
+-archimedes            ARCH_ARC                ARCHIMEDES              10
+-a5k                   ARCH_A5K                A5K                     11
+-etoile                        ARCH_ETOILE             ETOILE                  12
+-lacie_nas             ARCH_LACIE_NAS          LACIE_NAS               13
+-clps7500              ARCH_CLPS7500           CLPS7500                14
+-shark                 ARCH_SHARK              SHARK                   15
+-brutus                        SA1100_BRUTUS           BRUTUS                  16
+-personal_server               ARCH_PERSONAL_SERVER    PERSONAL_SERVER         17
+-itsy                  SA1100_ITSY             ITSY                    18
+-l7200                 ARCH_L7200              L7200                   19
+-pleb                  SA1100_PLEB             PLEB                    20
+-integrator            ARCH_INTEGRATOR         INTEGRATOR              21
+-h3600                 SA1100_H3600            H3600                   22
+-ixp1200                       ARCH_IXP1200            IXP1200                 23
+-p720t                 ARCH_P720T              P720T                   24
+-assabet                       SA1100_ASSABET          ASSABET                 25
+-victor                        SA1100_VICTOR           VICTOR                  26
+-lart                  SA1100_LART             LART                    27
+-ranger                        SA1100_RANGER           RANGER                  28
+-graphicsclient                SA1100_GRAPHICSCLIENT   GRAPHICSCLIENT          29
+-xp860                 SA1100_XP860            XP860                   30
+-cerf                  SA1100_CERF             CERF                    31
+-nanoengine            SA1100_NANOENGINE       NANOENGINE              32
+-fpic                  SA1100_FPIC             FPIC                    33
+-extenex1              SA1100_EXTENEX1         EXTENEX1                34
+-sherman                       SA1100_SHERMAN          SHERMAN                 35
+-accelent_sa           SA1100_ACCELENT         ACCELENT_SA             36
+-accelent_l7200                ARCH_L7200_ACCELENT     ACCELENT_L7200          37
+-netport                       SA1100_NETPORT          NETPORT                 38
+-pangolin              SA1100_PANGOLIN         PANGOLIN                39
+-yopy                  SA1100_YOPY             YOPY                    40
+-coolidge              SA1100_COOLIDGE         COOLIDGE                41
+-huw_webpanel          SA1100_HUW_WEBPANEL     HUW_WEBPANEL            42
+-spotme                        ARCH_SPOTME             SPOTME                  43
+-freebird              ARCH_FREEBIRD           FREEBIRD                44
+-ti925                 ARCH_TI925              TI925                   45
+-riscstation           ARCH_RISCSTATION        RISCSTATION             46
+-cavy                  SA1100_CAVY             CAVY                    47
+-jornada720            SA1100_JORNADA720       JORNADA720              48
+-omnimeter             SA1100_OMNIMETER        OMNIMETER               49
+-edb7211                       ARCH_EDB7211            EDB7211                 50
+-citygo                        SA1100_CITYGO           CITYGO                  51
+-pfs168                        SA1100_PFS168           PFS168                  52
+-spot                  SA1100_SPOT             SPOT                    53
+-flexanet              SA1100_FLEXANET         FLEXANET                54
+-webpal                        ARCH_WEBPAL             WEBPAL                  55
+-linpda                        SA1100_LINPDA           LINPDA                  56
+-anakin                        ARCH_ANAKIN             ANAKIN                  57
+-mvi                   SA1100_MVI              MVI                     58
+-jupiter                       SA1100_JUPITER          JUPITER                 59
+-psionw                        ARCH_PSIONW             PSIONW                  60
+-aln                   SA1100_ALN              ALN                     61
+-epxa                  ARCH_CAMELOT            CAMELOT                 62
+-gds2200                       SA1100_GDS2200          GDS2200                 63
+-netbook                       SA1100_PSION_SERIES7    PSION_SERIES7           64
+-xfile                 SA1100_XFILE            XFILE                   65
+-accelent_ep9312               ARCH_ACCELENT_EP9312    ACCELENT_EP9312         66
+-ic200                 ARCH_IC200              IC200                   67
+-creditlart            SA1100_CREDITLART       CREDITLART              68
+-htm                   SA1100_HTM              HTM                     69
+-iq80310                       ARCH_IQ80310            IQ80310                 70
+-freebot                       SA1100_FREEBOT          FREEBOT                 71
+-entel                 ARCH_ENTEL              ENTEL                   72
+-enp3510                       ARCH_ENP3510            ENP3510                 73
+-trizeps                       SA1100_TRIZEPS          TRIZEPS                 74
+-nesa                  SA1100_NESA             NESA                    75
+-venus                 ARCH_VENUS              VENUS                   76
+-tardis                        ARCH_TARDIS             TARDIS                  77
+-mercury                       ARCH_MERCURY            MERCURY                 78
+-empeg                 SA1100_EMPEG            EMPEG                   79
+-adi_evb                       ARCH_I80200FCC          I80200FCC               80
+-itt_cpb                       SA1100_ITT_CPB          ITT_CPB                 81
+-svc                   SA1100_SVC              SVC                     82
+-alpha2                        SA1100_ALPHA2           ALPHA2                  84
+-alpha1                        SA1100_ALPHA1           ALPHA1                  85
+-netarm                        ARCH_NETARM             NETARM                  86
+-simpad                        SA1100_SIMPAD           SIMPAD                  87
+-pda1                  ARCH_PDA1               PDA1                    88
+-lubbock                       ARCH_LUBBOCK            LUBBOCK                 89
+-aniko                 ARCH_ANIKO              ANIKO                   90
+-clep7212              ARCH_CLEP7212           CLEP7212                91
+-cs89712                       ARCH_CS89712            CS89712                 92
+-weararm                       SA1100_WEARARM          WEARARM                 93
+-possio_px             SA1100_POSSIO_PX        POSSIO_PX               94
+-sidearm                       SA1100_SIDEARM          SIDEARM                 95
+-stork                 SA1100_STORK            STORK                   96
+-shannon                       SA1100_SHANNON          SHANNON                 97
+-ace                   ARCH_ACE                ACE                     98
+-ballyarm              SA1100_BALLYARM         BALLYARM                99
+-simputer              SA1100_SIMPUTER         SIMPUTER                100
+-nexterm                       SA1100_NEXTERM          NEXTERM                 101
+-sa1100_elf            SA1100_SA1100_ELF       SA1100_ELF              102
+-gator                 SA1100_GATOR            GATOR                   103
+-granite                       ARCH_GRANITE            GRANITE                 104
+-consus                        SA1100_CONSUS           CONSUS                  105
+-aaed2000              ARCH_AAED2000           AAED2000                106
+-cdb89712              ARCH_CDB89712           CDB89712                107
+-graphicsmaster                SA1100_GRAPHICSMASTER   GRAPHICSMASTER          108
+-adsbitsy              SA1100_ADSBITSY         ADSBITSY                109
+-pxa_idp                       ARCH_PXA_IDP            PXA_IDP                 110
+-plce                  ARCH_PLCE               PLCE                    111
+-pt_system3            SA1100_PT_SYSTEM3       PT_SYSTEM3              112
+-murphy                        ARCH_MEDALB             MEDALB                  113
+-eagle                 ARCH_EAGLE              EAGLE                   114
+-dsc21                 ARCH_DSC21              DSC21                   115
+-dsc24                 ARCH_DSC24              DSC24                   116
+-ti5472                        ARCH_TI5472             TI5472                  117
+-autcpu12              ARCH_AUTCPU12           AUTCPU12                118
+-uengine                       ARCH_UENGINE            UENGINE                 119
+-bluestem              SA1100_BLUESTEM         BLUESTEM                120
+-xingu8                        ARCH_XINGU8             XINGU8                  121
+-bushstb                       ARCH_BUSHSTB            BUSHSTB                 122
+-epsilon1              SA1100_EPSILON1         EPSILON1                123
+-balloon                       SA1100_BALLOON          BALLOON                 124
+-puppy                 ARCH_PUPPY              PUPPY                   125
+-elroy                 SA1100_ELROY            ELROY                   126
+-gms720                        ARCH_GMS720             GMS720                  127
+-s24x                  ARCH_S24X               S24X                    128
+-jtel_clep7312         ARCH_JTEL_CLEP7312      JTEL_CLEP7312           129
+-cx821xx                       ARCH_CX821XX            CX821XX                 130
+-edb7312                       ARCH_EDB7312            EDB7312                 131
+-bsa1110                       SA1100_BSA1110          BSA1110                 132
+-powerpin              ARCH_POWERPIN           POWERPIN                133
+-openarm                       ARCH_OPENARM            OPENARM                 134
+-whitechapel           SA1100_WHITECHAPEL      WHITECHAPEL             135
+-h3100                 SA1100_H3100            H3100                   136
+-h3800                 SA1100_H3800            H3800                   137
+-blue_v1                       ARCH_BLUE_V1            BLUE_V1                 138
+-pxa_cerf              ARCH_PXA_CERF           PXA_CERF                139
+-arm7tevb              ARCH_ARM7TEVB           ARM7TEVB                140
+-d7400                 SA1100_D7400            D7400                   141
+-piranha                       ARCH_PIRANHA            PIRANHA                 142
+-sbcamelot             SA1100_SBCAMELOT        SBCAMELOT               143
+-kings                 SA1100_KINGS            KINGS                   144
+-smdk2400              ARCH_SMDK2400           SMDK2400                145
+-collie                        SA1100_COLLIE           COLLIE                  146
+-idr                   ARCH_IDR                IDR                     147
+-badge4                        SA1100_BADGE4           BADGE4                  148
+-webnet                        ARCH_WEBNET             WEBNET                  149
+-d7300                 SA1100_D7300            D7300                   150
+-cep                   SA1100_CEP              CEP                     151
+-fortunet              ARCH_FORTUNET           FORTUNET                152
+-vc547x                        ARCH_VC547X             VC547X                  153
+-filewalker            SA1100_FILEWALKER       FILEWALKER              154
+-netgateway            SA1100_NETGATEWAY       NETGATEWAY              155
+-symbol2800            SA1100_SYMBOL2800       SYMBOL2800              156
+-suns                  SA1100_SUNS             SUNS                    157
+-frodo                 SA1100_FRODO            FRODO                   158
+-ms301                 SA1100_MACH_TYTE_MS301  MACH_TYTE_MS301         159
+-mx1ads                        ARCH_MX1ADS             MX1ADS                  160
+-h7201                 ARCH_H7201              H7201                   161
+-h7202                 ARCH_H7202              H7202                   162
+-amico                 ARCH_AMICO              AMICO                   163
+-iam                   SA1100_IAM              IAM                     164
+-tt530                 SA1100_TT530            TT530                   165
+-sam2400                       ARCH_SAM2400            SAM2400                 166
+-jornada56x            SA1100_JORNADA56X       JORNADA56X              167
+-active                        SA1100_ACTIVE           ACTIVE                  168
+-iq80321                       ARCH_IQ80321            IQ80321                 169
+-wid                   SA1100_WID              WID                     170
+-sabinal                       ARCH_SABINAL            SABINAL                 171
+-ixp425_matacumbe      ARCH_IXP425_MATACUMBE   IXP425_MATACUMBE        172
+-miniprint             SA1100_MINIPRINT        MINIPRINT               173
+-adm510x                       ARCH_ADM510X            ADM510X                 174
+-svs200                        SA1100_SVS200           SVS200                  175
+-atg_tcu                       ARCH_ATG_TCU            ATG_TCU                 176
+-jornada820            SA1100_JORNADA820       JORNADA820              177
+-s3c44b0                       ARCH_S3C44B0            S3C44B0                 178
+-margis2                       ARCH_MARGIS2            MARGIS2                 179
+-ks8695                        ARCH_KS8695             KS8695                  180
+-brh                   ARCH_BRH                BRH                     181
+-s3c2410                       ARCH_S3C2410            S3C2410                 182
+-possio_px30           ARCH_POSSIO_PX30        POSSIO_PX30             183
+-s3c2800                       ARCH_S3C2800            S3C2800                 184
+-fleetwood             SA1100_FLEETWOOD        FLEETWOOD               185
+-omaha                 ARCH_OMAHA              OMAHA                   186
+-ta7                   ARCH_TA7                TA7                     187
+-nova                  SA1100_NOVA             NOVA                    188
+-hmk                   ARCH_HMK                HMK                     189
+-karo                  ARCH_KARO               KARO                    190
+-fester                        SA1100_FESTER           FESTER                  191
+-gpi                   ARCH_GPI                GPI                     192
+-smdk2410              ARCH_SMDK2410           SMDK2410                193
+-i519                  ARCH_I519               I519                    194
+-nexio                 SA1100_NEXIO            NEXIO                   195
+-bitbox                        SA1100_BITBOX           BITBOX                  196
+-g200                  SA1100_G200             G200                    197
+-gill                  SA1100_GILL             GILL                    198
+-pxa_mercury           ARCH_PXA_MERCURY        PXA_MERCURY             199
+-ceiva                 ARCH_CEIVA              CEIVA                   200
+-fret                  SA1100_FRET             FRET                    201
+-emailphone            SA1100_EMAILPHONE       EMAILPHONE              202
+-h3900                 ARCH_H3900              H3900                   203
+-pxa1                  ARCH_PXA1               PXA1                    204
+-koan369                       SA1100_KOAN369          KOAN369                 205
+-cogent                        ARCH_COGENT             COGENT                  206
+-esl_simputer          ARCH_ESL_SIMPUTER       ESL_SIMPUTER            207
+-esl_simputer_clr      ARCH_ESL_SIMPUTER_CLR   ESL_SIMPUTER_CLR        208
+-esl_simputer_bw               ARCH_ESL_SIMPUTER_BW    ESL_SIMPUTER_BW         209
+-hhp_cradle            ARCH_HHP_CRADLE         HHP_CRADLE              210
+-he500                 ARCH_HE500              HE500                   211
+-inhandelf2            SA1100_INHANDELF2       INHANDELF2              212
+-inhandftip            SA1100_INHANDFTIP       INHANDFTIP              213
+-dnp1110                       SA1100_DNP1110          DNP1110                 214
+-pnp1110                       SA1100_PNP1110          PNP1110                 215
+-csb226                        ARCH_CSB226             CSB226                  216
+-arnold                        SA1100_ARNOLD           ARNOLD                  217
+-voiceblue             MACH_VOICEBLUE          VOICEBLUE               218
+-jz8028                        ARCH_JZ8028             JZ8028                  219
+-h5400                 ARCH_H5400              H5400                   220
+-forte                 SA1100_FORTE            FORTE                   221
+-acam                  SA1100_ACAM             ACAM                    222
+-abox                  SA1100_ABOX             ABOX                    223
+-atmel                 ARCH_ATMEL              ATMEL                   224
+-sitsang                       ARCH_SITSANG            SITSANG                 225
+-cpu1110lcdnet         SA1100_CPU1110LCDNET    CPU1110LCDNET           226
+-mpl_vcma9             ARCH_MPL_VCMA9          MPL_VCMA9               227
+-opus_a1                       ARCH_OPUS_A1            OPUS_A1                 228
+-daytona                       ARCH_DAYTONA            DAYTONA                 229
+-killbear              SA1100_KILLBEAR         KILLBEAR                230
+-yoho                  ARCH_YOHO               YOHO                    231
+-jasper                        ARCH_JASPER             JASPER                  232
+-dsc25                 ARCH_DSC25              DSC25                   233
+-omap_innovator                MACH_OMAP_INNOVATOR     OMAP_INNOVATOR          234
+-mnci                  ARCH_RAMSES             RAMSES                  235
+-s28x                  ARCH_S28X               S28X                    236
+-mport3                        ARCH_MPORT3             MPORT3                  237
+-pxa_eagle250          ARCH_PXA_EAGLE250       PXA_EAGLE250            238
+-pdb                   ARCH_PDB                PDB                     239
+-blue_2g                       SA1100_BLUE_2G          BLUE_2G                 240
+-bluearch              SA1100_BLUEARCH         BLUEARCH                241
+-ixdp2400              ARCH_IXDP2400           IXDP2400                242
+-ixdp2800              ARCH_IXDP2800           IXDP2800                243
+-explorer              SA1100_EXPLORER         EXPLORER                244
+-ixdp425                       ARCH_IXDP425            IXDP425                 245
+-chimp                 ARCH_CHIMP              CHIMP                   246
+-stork_nest            ARCH_STORK_NEST         STORK_NEST              247
+-stork_egg             ARCH_STORK_EGG          STORK_EGG               248
+-wismo                 SA1100_WISMO            WISMO                   249
+-ezlinx                        ARCH_EZLINX             EZLINX                  250
+-at91rm9200            ARCH_AT91RM9200         AT91RM9200              251
+-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
+-lavinna                       SA1100_LAVINNA          LAVINNA                 256
+-pxa_uengine           ARCH_PXA_UENGINE        PXA_UENGINE             257
+-innokom                       ARCH_INNOKOM            INNOKOM                 258
+-bms                   ARCH_BMS                BMS                     259
+-ixcdp1100             ARCH_IXCDP1100          IXCDP1100               260
+-prpmc1100             ARCH_PRPMC1100          PRPMC1100               261
+-at91rm9200dk          ARCH_AT91RM9200DK       AT91RM9200DK            262
+-armstick              ARCH_ARMSTICK           ARMSTICK                263
+-armonie                       ARCH_ARMONIE            ARMONIE                 264
+-mport1                        ARCH_MPORT1             MPORT1                  265
+-s3c5410                       ARCH_S3C5410            S3C5410                 266
+-zcp320a                       ARCH_ZCP320A            ZCP320A                 267
+-i_box                 ARCH_I_BOX              I_BOX                   268
+-stlc1502              ARCH_STLC1502           STLC1502                269
+-siren                 ARCH_SIREN              SIREN                   270
+-greenlake             ARCH_GREENLAKE          GREENLAKE               271
+-argus                 ARCH_ARGUS              ARGUS                   272
+-combadge              SA1100_COMBADGE         COMBADGE                273
+-rokepxa                       ARCH_ROKEPXA            ROKEPXA                 274
+-cintegrator           ARCH_CINTEGRATOR        CINTEGRATOR             275
+-guidea07              ARCH_GUIDEA07           GUIDEA07                276
+-tat257                        ARCH_TAT257             TAT257                  277
+-igp2425                       ARCH_IGP2425            IGP2425                 278
+-bluegrama             ARCH_BLUEGRAMMA         BLUEGRAMMA              279
+-ipod                  ARCH_IPOD               IPOD                    280
+-adsbitsyx             ARCH_ADSBITSYX          ADSBITSYX               281
+-trizeps2              ARCH_TRIZEPS2           TRIZEPS2                282
+-viper                 ARCH_VIPER              VIPER                   283
+-adsbitsyplus          SA1100_ADSBITSYPLUS     ADSBITSYPLUS            284
+-adsagc                        SA1100_ADSAGC           ADSAGC                  285
+-stp7312                       ARCH_STP7312            STP7312                 286
+-nx_phnx                       MACH_NX_PHNX            NX_PHNX                 287
+-wep_ep250             ARCH_WEP_EP250          WEP_EP250               288
+-inhandelf3            ARCH_INHANDELF3         INHANDELF3              289
+-adi_coyote            ARCH_ADI_COYOTE         ADI_COYOTE              290
+-iyonix                        ARCH_IYONIX             IYONIX                  291
+-damicam1              ARCH_DAMICAM_SA1110     DAMICAM_SA1110          292
+-meg03                 ARCH_MEG03              MEG03                   293
+-pxa_whitechapel               ARCH_PXA_WHITECHAPEL    PXA_WHITECHAPEL         294
+-nwsc                  ARCH_NWSC               NWSC                    295
+-nwlarm                        ARCH_NWLARM             NWLARM                  296
+-ixp425_mguard         ARCH_IXP425_MGUARD      IXP425_MGUARD           297
+-pxa_netdcu4           ARCH_PXA_NETDCU4        PXA_NETDCU4             298
+-ixdp2401              ARCH_IXDP2401           IXDP2401                299
+-ixdp2801              ARCH_IXDP2801           IXDP2801                300
+-zodiac                        ARCH_ZODIAC             ZODIAC                  301
+-armmodul              ARCH_ARMMODUL           ARMMODUL                302
+-ketop                 SA1100_KETOP            KETOP                   303
+-av7200                        ARCH_AV7200             AV7200                  304
+-arch_ti925            ARCH_ARCH_TI925         ARCH_TI925              305
+-acq200                        ARCH_ACQ200             ACQ200                  306
+-pt_dafit              SA1100_PT_DAFIT         PT_DAFIT                307
+-ihba                  ARCH_IHBA               IHBA                    308
+-quinque                       ARCH_QUINQUE            QUINQUE                 309
+-nimbraone             ARCH_NIMBRAONE          NIMBRAONE               310
+-nimbra29x             ARCH_NIMBRA29X          NIMBRA29X               311
+-nimbra210             ARCH_NIMBRA210          NIMBRA210               312
+-hhp_d95xx             ARCH_HHP_D95XX          HHP_D95XX               313
+-labarm                        ARCH_LABARM             LABARM                  314
+-m825xx                        ARCH_M825XX             M825XX                  315
+-m7100                 SA1100_M7100            M7100                   316
+-nipc2                 ARCH_NIPC2              NIPC2                   317
+-fu7202                        ARCH_FU7202             FU7202                  318
+-adsagx                        ARCH_ADSAGX             ADSAGX                  319
+-pxa_pooh              ARCH_PXA_POOH           PXA_POOH                320
+-bandon                        ARCH_BANDON             BANDON                  321
+-pcm7210                       ARCH_PCM7210            PCM7210                 322
+-nms9200                       ARCH_NMS9200            NMS9200                 323
+-logodl                        ARCH_LOGODL             LOGODL                  324
+-m7140                 SA1100_M7140            M7140                   325
+-korebot                       ARCH_KOREBOT            KOREBOT                 326
+-iq31244                       ARCH_IQ31244            IQ31244                 327
+-koan393                       SA1100_KOAN393          KOAN393                 328
+-inhandftip3           ARCH_INHANDFTIP3        INHANDFTIP3             329
+-gonzo                 ARCH_GONZO              GONZO                   330
+-bast                  ARCH_BAST               BAST                    331
+-scanpass              ARCH_SCANPASS           SCANPASS                332
+-ep7312_pooh           ARCH_EP7312_POOH        EP7312_POOH             333
+-ta7s                  ARCH_TA7S               TA7S                    334
+-ta7v                  ARCH_TA7V               TA7V                    335
+-icarus                        SA1100_ICARUS           ICARUS                  336
+-h1900                 ARCH_H1900              H1900                   337
+-gemini                        SA1100_GEMINI           GEMINI                  338
+-axim                  ARCH_AXIM               AXIM                    339
+-audiotron             ARCH_AUDIOTRON          AUDIOTRON               340
+-h2200                 ARCH_H2200              H2200                   341
+-loox600                       ARCH_LOOX600            LOOX600                 342
+-niop                  ARCH_NIOP               NIOP                    343
+-dm310                 ARCH_DM310              DM310                   344
+-seedpxa_c2            ARCH_SEEDPXA_C2         SEEDPXA_C2              345
+-ixp4xx_mguardpci      ARCH_IXP4XX_MGUARD_PCI  IXP4XX_MGUARD_PCI       346
+-h1940                 ARCH_H1940              H1940                   347
+-scorpio                       ARCH_SCORPIO            SCORPIO                 348
+-viva                  ARCH_VIVA               VIVA                    349
+-pxa_xcard             ARCH_PXA_XCARD          PXA_XCARD               350
+-csb335                        ARCH_CSB335             CSB335                  351
+-ixrd425                       ARCH_IXRD425            IXRD425                 352
+-iq80315                       ARCH_IQ80315            IQ80315                 353
+-nmp7312                       ARCH_NMP7312            NMP7312                 354
+-cx861xx                       ARCH_CX861XX            CX861XX                 355
+-enp2611                       ARCH_ENP2611            ENP2611                 356
+-xda                   SA1100_XDA              XDA                     357
+-csir_ims              ARCH_CSIR_IMS           CSIR_IMS                358
+-ixp421_dnaeeth                ARCH_IXP421_DNAEETH     IXP421_DNAEETH          359
+-pocketserv9200                ARCH_POCKETSERV9200     POCKETSERV9200          360
+-toto                  ARCH_TOTO               TOTO                    361
+-s3c2440                       ARCH_S3C2440            S3C2440                 362
+-ks8695p                       ARCH_KS8695P            KS8695P                 363
+-se4000                        ARCH_SE4000             SE4000                  364
+-quadriceps            ARCH_QUADRICEPS         QUADRICEPS              365
+-bronco                        ARCH_BRONCO             BRONCO                  366
+-esl_wireless_tab      ARCH_ESL_WIRELESS_TAB   ESL_WIRELESS_TAB        367
+-esl_sofcomp           ARCH_ESL_SOFCOMP        ESL_SOFCOMP             368
+-s5c7375                       ARCH_S5C7375            S5C7375                 369
+-spearhead             ARCH_SPEARHEAD          SPEARHEAD               370
+-pantera                       ARCH_PANTERA            PANTERA                 371
+-prayoglite            ARCH_PRAYOGLITE         PRAYOGLITE              372
+-gumstix                       ARCH_GUMSTIX            GUMSTIX                 373
+-rcube                 ARCH_RCUBE              RCUBE                   374
+-rea_olv                       ARCH_REA_OLV            REA_OLV                 375
+-pxa_iphone            ARCH_PXA_IPHONE         PXA_IPHONE              376
+-s3c3410                       ARCH_S3C3410            S3C3410                 377
+-espd_4510b            ARCH_ESPD_4510B         ESPD_4510B              378
+-mp1x                  ARCH_MP1X               MP1X                    379
+-at91rm9200tb          ARCH_AT91RM9200TB       AT91RM9200TB            380
+-adsvgx                        ARCH_ADSVGX             ADSVGX                  381
+-omap_h2                       MACH_OMAP_H2            OMAP_H2                 382
+-pelee                 ARCH_PELEE              PELEE                   383
+-e740                  MACH_E740               E740                    384
+-iq80331                       ARCH_IQ80331            IQ80331                 385
+-versatile_pb          ARCH_VERSATILE_PB       VERSATILE_PB            387
+-kev7a400              MACH_KEV7A400           KEV7A400                388
+-lpd7a400              MACH_LPD7A400           LPD7A400                389
+-lpd7a404              MACH_LPD7A404           LPD7A404                390
+-fujitsu_camelot               ARCH_FUJITSU_CAMELOT    FUJITSU_CAMELOT         391
+-janus2m                       ARCH_JANUS2M            JANUS2M                 392
+-embtf                 MACH_EMBTF              EMBTF                   393
+-hpm                   MACH_HPM                HPM                     394
+-smdk2410tk            MACH_SMDK2410TK         SMDK2410TK              395
+-smdk2410aj            MACH_SMDK2410AJ         SMDK2410AJ              396
+-streetracer           MACH_STREETRACER        STREETRACER             397
+-eframe                        MACH_EFRAME             EFRAME                  398
+-csb337                        MACH_CSB337             CSB337                  399
+-pxa_lark              MACH_PXA_LARK           PXA_LARK                400
+-pxa_pnp2110           MACH_PNP2110            PNP2110                 401
+-tcc72x                        MACH_TCC72X             TCC72X                  402
+-altair                        MACH_ALTAIR             ALTAIR                  403
+-kc3                   MACH_KC3                KC3                     404
+-sinteftd              MACH_SINTEFTD           SINTEFTD                405
+-mainstone             MACH_MAINSTONE          MAINSTONE               406
+-aday4x                        MACH_ADAY4X             ADAY4X                  407
+-lite300                       MACH_LITE300            LITE300                 408
+-s5c7376                       MACH_S5C7376            S5C7376                 409
+-mt02                  MACH_MT02               MT02                    410
+-mport3s                       MACH_MPORT3S            MPORT3S                 411
+-ra_alpha              MACH_RA_ALPHA           RA_ALPHA                412
+-xcep                  MACH_XCEP               XCEP                    413
+-arcom_vulcan          MACH_ARCOM_VULCAN       ARCOM_VULCAN            414
+-stargate              MACH_STARGATE           STARGATE                415
+-armadilloj            MACH_ARMADILLOJ         ARMADILLOJ              416
+-elroy_jack            MACH_ELROY_JACK         ELROY_JACK              417
+-backend                       MACH_BACKEND            BACKEND                 418
+-s5linbox              MACH_S5LINBOX           S5LINBOX                419
+-nomadik                       MACH_NOMADIK            NOMADIK                 420
+-ia_cpu_9200           MACH_IA_CPU_9200        IA_CPU_9200             421
+-at91_bja1             MACH_AT91_BJA1          AT91_BJA1               422
+-corgi                 MACH_CORGI              CORGI                   423
+-poodle                        MACH_POODLE             POODLE                  424
+-ten                   MACH_TEN                TEN                     425
+-roverp5p              MACH_ROVERP5P           ROVERP5P                426
+-sc2700                        MACH_SC2700             SC2700                  427
+-ex_eagle              MACH_EX_EAGLE           EX_EAGLE                428
+-nx_pxa12              MACH_NX_PXA12           NX_PXA12                429
+-nx_pxa5                       MACH_NX_PXA5            NX_PXA5                 430
+-blackboard2           MACH_BLACKBOARD2        BLACKBOARD2             431
+-i819                  MACH_I819               I819                    432
+-ixmb995e              MACH_IXMB995E           IXMB995E                433
+-skyrider              MACH_SKYRIDER           SKYRIDER                434
+-skyhawk                       MACH_SKYHAWK            SKYHAWK                 435
+-enterprise            MACH_ENTERPRISE         ENTERPRISE              436
+-dep2410                       MACH_DEP2410            DEP2410                 437
+-armcore                       MACH_ARMCORE            ARMCORE                 438
+-hobbit                        MACH_HOBBIT             HOBBIT                  439
+-h7210                 MACH_H7210              H7210                   440
+-pxa_netdcu5           MACH_PXA_NETDCU5        PXA_NETDCU5             441
+-acc                   MACH_ACC                ACC                     442
+-esl_sarva             MACH_ESL_SARVA          ESL_SARVA               443
+-xm250                 MACH_XM250              XM250                   444
+-t6tc1xb                       MACH_T6TC1XB            T6TC1XB                 445
+-ess710                        MACH_ESS710             ESS710                  446
+-mx31ads                       MACH_MX31ADS            MX31ADS                 447
+-himalaya              MACH_HIMALAYA           HIMALAYA                448
+-bolfenk                       MACH_BOLFENK            BOLFENK                 449
+-at91rm9200kr          MACH_AT91RM9200KR       AT91RM9200KR            450
+-edb9312                       MACH_EDB9312            EDB9312                 451
+-omap_generic          MACH_OMAP_GENERIC       OMAP_GENERIC            452
+-aximx3                        MACH_AXIMX3             AXIMX3                  453
+-eb67xdip              MACH_EB67XDIP           EB67XDIP                454
+-webtxs                        MACH_WEBTXS             WEBTXS                  455
+-hawk                  MACH_HAWK               HAWK                    456
+-ccat91sbc001          MACH_CCAT91SBC001       CCAT91SBC001            457
+-expresso              MACH_EXPRESSO           EXPRESSO                458
+-h4000                 MACH_H4000              H4000                   459
+-dino                  MACH_DINO               DINO                    460
+-ml675k                        MACH_ML675K             ML675K                  461
+-edb9301                       MACH_EDB9301            EDB9301                 462
+-edb9315                       MACH_EDB9315            EDB9315                 463
+-reciva_tt             MACH_RECIVA_TT          RECIVA_TT               464
+-cstcb01                       MACH_CSTCB01            CSTCB01                 465
+-cstcb1                        MACH_CSTCB1             CSTCB1                  466
+-shadwell              MACH_SHADWELL           SHADWELL                467
+-goepel263             MACH_GOEPEL263          GOEPEL263               468
+-acq100                        MACH_ACQ100             ACQ100                  469
+-mx1fs2                        MACH_MX1FS2             MX1FS2                  470
+-hiptop_g1             MACH_HIPTOP_G1          HIPTOP_G1               471
+-sparky                        MACH_SPARKY             SPARKY                  472
+-ns9750                        MACH_NS9750             NS9750                  473
+-phoenix                       MACH_PHOENIX            PHOENIX                 474
+-vr1000                        MACH_VR1000             VR1000                  475
+-deisterpxa            MACH_DEISTERPXA         DEISTERPXA              476
+-bcm1160                       MACH_BCM1160            BCM1160                 477
+-pcm022                        MACH_PCM022             PCM022                  478
+-adsgcx                        MACH_ADSGCX             ADSGCX                  479
+-dreadnaught           MACH_DREADNAUGHT        DREADNAUGHT             480
+-dm320                 MACH_DM320              DM320                   481
+-markov                        MACH_MARKOV             MARKOV                  482
+-cos7a400              MACH_COS7A400           COS7A400                483
+-milano                        MACH_MILANO             MILANO                  484
+-ue9328                        MACH_UE9328             UE9328                  485
+-uex255                        MACH_UEX255             UEX255                  486
+-ue2410                        MACH_UE2410             UE2410                  487
+-a620                  MACH_A620               A620                    488
+-ocelot                        MACH_OCELOT             OCELOT                  489
+-cheetah                       MACH_CHEETAH            CHEETAH                 490
+-omap_perseus2         MACH_OMAP_PERSEUS2      OMAP_PERSEUS2           491
+-zvue                  MACH_ZVUE               ZVUE                    492
+-roverp1                       MACH_ROVERP1            ROVERP1                 493
+-asidial2              MACH_ASIDIAL2           ASIDIAL2                494
+-s3c24a0                       MACH_S3C24A0            S3C24A0                 495
+-e800                  MACH_E800               E800                    496
+-e750                  MACH_E750               E750                    497
+-s3c5500                       MACH_S3C5500            S3C5500                 498
+-smdk5500              MACH_SMDK5500           SMDK5500                499
+-signalsync            MACH_SIGNALSYNC         SIGNALSYNC              500
+-nbc                   MACH_NBC                NBC                     501
+-kodiak                        MACH_KODIAK             KODIAK                  502
+-netbookpro            MACH_NETBOOKPRO         NETBOOKPRO              503
+-hw90200                       MACH_HW90200            HW90200                 504
+-condor                        MACH_CONDOR             CONDOR                  505
+-cup                   MACH_CUP                CUP                     506
+-kite                  MACH_KITE               KITE                    507
+-scb9328                       MACH_SCB9328            SCB9328                 508
+-omap_h3                       MACH_OMAP_H3            OMAP_H3                 509
+-omap_h4                       MACH_OMAP_H4            OMAP_H4                 510
+-n10                   MACH_N10                N10                     511
+-montejade             MACH_MONTAJADE          MONTAJADE               512
+-sg560                 MACH_SG560              SG560                   513
+-dp1000                        MACH_DP1000             DP1000                  514
+-omap_osk              MACH_OMAP_OSK           OMAP_OSK                515
+-rg100v3                       MACH_RG100V3            RG100V3                 516
+-mx2ads                        MACH_MX2ADS             MX2ADS                  517
+-pxa_kilo              MACH_PXA_KILO           PXA_KILO                518
+-ixp4xx_eagle          MACH_IXP4XX_EAGLE       IXP4XX_EAGLE            519
+-tosa                  MACH_TOSA               TOSA                    520
+-mb2520f                       MACH_MB2520F            MB2520F                 521
+-emc1000                       MACH_EMC1000            EMC1000                 522
+-tidsc25                       MACH_TIDSC25            TIDSC25                 523
+-akcpmxl                       MACH_AKCPMXL            AKCPMXL                 524
+-av3xx                 MACH_AV3XX              AV3XX                   525
+-avila                 MACH_AVILA              AVILA                   526
+-pxa_mpm10             MACH_PXA_MPM10          PXA_MPM10               527
+-pxa_kyanite           MACH_PXA_KYANITE        PXA_KYANITE             528
+-sgold                 MACH_SGOLD              SGOLD                   529
+-oscar                 MACH_OSCAR              OSCAR                   530
+-epxa4usb2             MACH_EPXA4USB2          EPXA4USB2               531
+-xsengine              MACH_XSENGINE           XSENGINE                532
+-ip600                 MACH_IP600              IP600                   533
+-mcan2                 MACH_MCAN2              MCAN2                   534
+-ddi_blueridge         MACH_DDI_BLUERIDGE      DDI_BLUERIDGE           535
+-skyminder             MACH_SKYMINDER          SKYMINDER               536
+-lpd79520              MACH_LPD79520           LPD79520                537
+-edb9302                       MACH_EDB9302            EDB9302                 538
+-hw90340                       MACH_HW90340            HW90340                 539
+-cip_box                       MACH_CIP_BOX            CIP_BOX                 540
+-ivpn                  MACH_IVPN               IVPN                    541
+-rsoc2                 MACH_RSOC2              RSOC2                   542
+-husky                 MACH_HUSKY              HUSKY                   543
+-boxer                 MACH_BOXER              BOXER                   544
+-shepherd              MACH_SHEPHERD           SHEPHERD                545
+-aml42800aa            MACH_AML42800AA         AML42800AA              546
+-lpc2294                       MACH_LPC2294            LPC2294                 548
+-switchgrass           MACH_SWITCHGRASS        SWITCHGRASS             549
+-ens_cmu                       MACH_ENS_CMU            ENS_CMU                 550
+-mm6_sdb                       MACH_MM6_SDB            MM6_SDB                 551
+-saturn                        MACH_SATURN             SATURN                  552
+-i30030evb             MACH_I30030EVB          I30030EVB               553
+-mxc27530evb           MACH_MXC27530EVB        MXC27530EVB             554
+-smdk2800              MACH_SMDK2800           SMDK2800                555
+-mtwilson              MACH_MTWILSON           MTWILSON                556
+-ziti                  MACH_ZITI               ZITI                    557
+-grandfather           MACH_GRANDFATHER        GRANDFATHER             558
+-tengine                       MACH_TENGINE            TENGINE                 559
+-s3c2460                       MACH_S3C2460            S3C2460                 560
+-pdm                   MACH_PDM                PDM                     561
+-h4700                 MACH_H4700              H4700                   562
+-h6300                 MACH_H6300              H6300                   563
+-rz1700                        MACH_RZ1700             RZ1700                  564
+-a716                  MACH_A716               A716                    565
+-estk2440a             MACH_ESTK2440A          ESTK2440A               566
+-atwixp425             MACH_ATWIXP425          ATWIXP425               567
+-csb336                        MACH_CSB336             CSB336                  568
+-rirm2                 MACH_RIRM2              RIRM2                   569
+-cx23518                       MACH_CX23518            CX23518                 570
+-cx2351x                       MACH_CX2351X            CX2351X                 571
+-computime             MACH_COMPUTIME          COMPUTIME               572
+-izarus                        MACH_IZARUS             IZARUS                  573
+-pxa_rts                       MACH_RTS                RTS                     574
+-se5100                        MACH_SE5100             SE5100                  575
+-s3c2510                       MACH_S3C2510            S3C2510                 576
+-csb437tl              MACH_CSB437TL           CSB437TL                577
+-slauson                       MACH_SLAUSON            SLAUSON                 578
+-pearlriver            MACH_PEARLRIVER         PEARLRIVER              579
+-tdc_p210              MACH_TDC_P210           TDC_P210                580
+-sg580                 MACH_SG580              SG580                   581
+-wrsbcarm7             MACH_WRSBCARM7          WRSBCARM7               582
+-ipd                   MACH_IPD                IPD                     583
+-pxa_dnp2110           MACH_PXA_DNP2110        PXA_DNP2110             584
+-xaeniax                       MACH_XAENIAX            XAENIAX                 585
+-somn4250              MACH_SOMN4250           SOMN4250                586
+-pleb2                 MACH_PLEB2              PLEB2                   587
+-cornwallis            MACH_CORNWALLIS         CORNWALLIS              588
+-gurney_drv            MACH_GURNEY_DRV         GURNEY_DRV              589
+-chaffee                       MACH_CHAFFEE            CHAFFEE                 590
+-rms101                        MACH_RMS101             RMS101                  591
+-rx3715                        MACH_RX3715             RX3715                  592
+-swift                 MACH_SWIFT              SWIFT                   593
+-roverp7                       MACH_ROVERP7            ROVERP7                 594
+-pr818s                        MACH_PR818S             PR818S                  595
+-trxpro                        MACH_TRXPRO             TRXPRO                  596
+-nslu2                 MACH_NSLU2              NSLU2                   597
+-e400                  MACH_E400               E400                    598
+-trab                  MACH_TRAB               TRAB                    599
+-cmc_pu2                       MACH_CMC_PU2            CMC_PU2                 600
+-fulcrum                       MACH_FULCRUM            FULCRUM                 601
+-netgate42x            MACH_NETGATE42X         NETGATE42X              602
+-str710                        MACH_STR710             STR710                  603
+-ixdpg425              MACH_IXDPG425           IXDPG425                604
+-tomtomgo              MACH_TOMTOMGO           TOMTOMGO                605
+-versatile_ab          MACH_VERSATILE_AB       VERSATILE_AB            606
+-edb9307                       MACH_EDB9307            EDB9307                 607
+-sg565                 MACH_SG565              SG565                   608
+-lpd79524              MACH_LPD79524           LPD79524                609
+-lpd79525              MACH_LPD79525           LPD79525                610
+-rms100                        MACH_RMS100             RMS100                  611
+-kb9200                        MACH_KB9200             KB9200                  612
+-sx1                   MACH_SX1                SX1                     613
+-hms39c7092            MACH_HMS39C7092         HMS39C7092              614
+-armadillo             MACH_ARMADILLO          ARMADILLO               615
+-ipcu                  MACH_IPCU               IPCU                    616
+-loox720                       MACH_LOOX720            LOOX720                 617
+-ixdp465                       MACH_IXDP465            IXDP465                 618
+-ixdp2351              MACH_IXDP2351           IXDP2351                619
+-adsvix                        MACH_ADSVIX             ADSVIX                  620
+-dm270                 MACH_DM270              DM270                   621
+-socltplus             MACH_SOCLTPLUS          SOCLTPLUS               622
+-ecia                  MACH_ECIA               ECIA                    623
+-cm4008                        MACH_CM4008             CM4008                  624
+-p2001                 MACH_P2001              P2001                   625
+-twister                       MACH_TWISTER            TWISTER                 626
+-mudshark              MACH_MUDSHARK           MUDSHARK                627
+-hb2                   MACH_HB2                HB2                     628
+-iq80332                       MACH_IQ80332            IQ80332                 629
+-sendt                 MACH_SENDT              SENDT                   630
+-mx2jazz                       MACH_MX2JAZZ            MX2JAZZ                 631
+-multiio                       MACH_MULTIIO            MULTIIO                 632
+-hrdisplay             MACH_HRDISPLAY          HRDISPLAY               633
+-mxc27530ads           MACH_MXC27530ADS        MXC27530ADS             634
+-trizeps3              MACH_TRIZEPS3           TRIZEPS3                635
+-zefeerdza             MACH_ZEFEERDZA          ZEFEERDZA               636
+-zefeerdzb             MACH_ZEFEERDZB          ZEFEERDZB               637
+-zefeerdzg             MACH_ZEFEERDZG          ZEFEERDZG               638
+-zefeerdzn             MACH_ZEFEERDZN          ZEFEERDZN               639
+-zefeerdzq             MACH_ZEFEERDZQ          ZEFEERDZQ               640
+-gtwx5715              MACH_GTWX5715           GTWX5715                641
+-astro_jack            MACH_ASTRO_JACK         ASTRO_JACK              643
+-tip03                 MACH_TIP03              TIP03                   644
+-a9200ec                       MACH_A9200EC            A9200EC                 645
+-pnx0105                       MACH_PNX0105            PNX0105                 646
+-adcpoecpu             MACH_ADCPOECPU          ADCPOECPU               647
+-csb637                        MACH_CSB637             CSB637                  648
+-mb9200                        MACH_MB9200             MB9200                  650
+-kulun                 MACH_KULUN              KULUN                   651
+-snapper                       MACH_SNAPPER            SNAPPER                 652
+-optima                        MACH_OPTIMA             OPTIMA                  653
+-dlhsbc                        MACH_DLHSBC             DLHSBC                  654
+-x30                   MACH_X30                X30                     655
+-n30                   MACH_N30                N30                     656
+-manga_ks8695          MACH_MANGA_KS8695       MANGA_KS8695            657
+-ajax                  MACH_AJAX               AJAX                    658
+-nec_mp900             MACH_NEC_MP900          NEC_MP900               659
+-vvtk1000              MACH_VVTK1000           VVTK1000                661
+-kafa                  MACH_KAFA               KAFA                    662
+-vvtk3000              MACH_VVTK3000           VVTK3000                663
+-pimx1                 MACH_PIMX1              PIMX1                   664
+-ollie                 MACH_OLLIE              OLLIE                   665
+-skymax                        MACH_SKYMAX             SKYMAX                  666
+-jazz                  MACH_JAZZ               JAZZ                    667
+-tel_t3                        MACH_TEL_T3             TEL_T3                  668
+-aisino_fcr255         MACH_AISINO_FCR255      AISINO_FCR255           669
+-btweb                 MACH_BTWEB              BTWEB                   670
+-dbg_lh79520           MACH_DBG_LH79520        DBG_LH79520             671
+-cm41xx                        MACH_CM41XX             CM41XX                  672
+-ts72xx                        MACH_TS72XX             TS72XX                  673
+-nggpxa                        MACH_NGGPXA             NGGPXA                  674
+-csb535                        MACH_CSB535             CSB535                  675
+-csb536                        MACH_CSB536             CSB536                  676
+-pxa_trakpod           MACH_PXA_TRAKPOD        PXA_TRAKPOD             677
+-praxis                        MACH_PRAXIS             PRAXIS                  678
+-lh75411                       MACH_LH75411            LH75411                 679
+-otom                  MACH_OTOM               OTOM                    680
+-nexcoder_2440         MACH_NEXCODER_2440      NEXCODER_2440           681
+-loox410                       MACH_LOOX410            LOOX410                 682
+-westlake              MACH_WESTLAKE           WESTLAKE                683
+-nsb                   MACH_NSB                NSB                     684
+-esl_sarva_stn         MACH_ESL_SARVA_STN      ESL_SARVA_STN           685
+-esl_sarva_tft         MACH_ESL_SARVA_TFT      ESL_SARVA_TFT           686
+-esl_sarva_iad         MACH_ESL_SARVA_IAD      ESL_SARVA_IAD           687
+-esl_sarva_acc         MACH_ESL_SARVA_ACC      ESL_SARVA_ACC           688
+-typhoon                       MACH_TYPHOON            TYPHOON                 689
+-cnav                  MACH_CNAV               CNAV                    690
+-a730                  MACH_A730               A730                    691
+-netstar                       MACH_NETSTAR            NETSTAR                 692
+-supercon              MACH_PHASEFALE_SUPERCON PHASEFALE_SUPERCON      693
+-shiva1100             MACH_SHIVA1100          SHIVA1100               694
+-etexsc                        MACH_ETEXSC             ETEXSC                  695
+-ixdpg465              MACH_IXDPG465           IXDPG465                696
+-a9m2410                       MACH_A9M2410            A9M2410                 697
+-a9m2440                       MACH_A9M2440            A9M2440                 698
+-a9m9750                       MACH_A9M9750            A9M9750                 699
+-a9m9360                       MACH_A9M9360            A9M9360                 700
+-unc90                 MACH_UNC90              UNC90                   701
+-eco920                        MACH_ECO920             ECO920                  702
+-satview                       MACH_SATVIEW            SATVIEW                 703
+-roadrunner            MACH_ROADRUNNER         ROADRUNNER              704
+-at91rm9200ek          MACH_AT91RM9200EK       AT91RM9200EK            705
+-gp32                  MACH_GP32               GP32                    706
+-gem                   MACH_GEM                GEM                     707
+-i858                  MACH_I858               I858                    708
+-hx2750                        MACH_HX2750             HX2750                  709
+-mxc91131evb           MACH_MXC91131EVB        MXC91131EVB             710
+-p700                  MACH_P700               P700                    711
+-cpe                   MACH_CPE                CPE                     712
+-spitz                 MACH_SPITZ              SPITZ                   713
+-nimbra340             MACH_NIMBRA340          NIMBRA340               714
+-lpc22xx                       MACH_LPC22XX            LPC22XX                 715
+-omap_comet3           MACH_COMET3             COMET3                  716
+-omap_comet4           MACH_COMET4             COMET4                  717
+-csb625                        MACH_CSB625             CSB625                  718
+-fortunet2             MACH_FORTUNET2          FORTUNET2               719
+-s5h2200                       MACH_S5H2200            S5H2200                 720
+-optorm920             MACH_OPTORM920          OPTORM920               721
+-adsbitsyxb            MACH_ADSBITSYXB         ADSBITSYXB              722
+-adssphere             MACH_ADSSPHERE          ADSSPHERE               723
+-adsportal             MACH_ADSPORTAL          ADSPORTAL               724
+-ln2410sbc             MACH_LN2410SBC          LN2410SBC               725
+-cb3rufc                       MACH_CB3RUFC            CB3RUFC                 726
+-mp2usb                        MACH_MP2USB             MP2USB                  727
+-ntnp425c              MACH_NTNP425C           NTNP425C                728
+-colibri                       MACH_COLIBRI            COLIBRI                 729
+-pcm7220                       MACH_PCM7220            PCM7220                 730
+-gateway7001           MACH_GATEWAY7001        GATEWAY7001             731
+-pcm027                        MACH_PCM027             PCM027                  732
+-cmpxa                 MACH_CMPXA              CMPXA                   733
+-anubis                        MACH_ANUBIS             ANUBIS                  734
+-ite8152                       MACH_ITE8152            ITE8152                 735
+-lpc3xxx                       MACH_LPC3XXX            LPC3XXX                 736
+-puppeteer             MACH_PUPPETEER          PUPPETEER               737
+-e570                  MACH_E570               E570                    739
+-x50                   MACH_X50                X50                     740
+-recon                 MACH_RECON              RECON                   741
+-xboardgp8             MACH_XBOARDGP8          XBOARDGP8               742
+-fpic2                 MACH_FPIC2              FPIC2                   743
+-akita                 MACH_AKITA              AKITA                   744
+-a81                   MACH_A81                A81                     745
+-svm_sc25x             MACH_SVM_SC25X          SVM_SC25X               746
+-vt020                 MACH_VADATECH020        VADATECH020             747
+-tli                   MACH_TLI                TLI                     748
+-edb9315lc             MACH_EDB9315LC          EDB9315LC               749
+-passec                        MACH_PASSEC             PASSEC                  750
+-ds_tiger              MACH_DS_TIGER           DS_TIGER                751
+-e310                  MACH_E310               E310                    752
+-e330                  MACH_E330               E330                    753
+-rt3000                        MACH_RT3000             RT3000                  754
+-nokia770              MACH_NOKIA770           NOKIA770                755
+-pnx0106                       MACH_PNX0106            PNX0106                 756
+-hx21xx                        MACH_HX21XX             HX21XX                  757
+-faraday                       MACH_FARADAY            FARADAY                 758
+-sbc9312                       MACH_SBC9312            SBC9312                 759
+-batman                        MACH_BATMAN             BATMAN                  760
+-jpd201                        MACH_JPD201             JPD201                  761
+-mipsa                 MACH_MIPSA              MIPSA                   762
+-kacom                 MACH_KACOM              KACOM                   763
+-swarcocpu             MACH_SWARCOCPU          SWARCOCPU               764
+-swarcodsl             MACH_SWARCODSL          SWARCODSL               765
+-blueangel             MACH_BLUEANGEL          BLUEANGEL               766
+-hairygrama            MACH_HAIRYGRAMA         HAIRYGRAMA              767
+-banff                 MACH_BANFF              BANFF                   768
+-carmeva                       MACH_CARMEVA            CARMEVA                 769
+-sam255                        MACH_SAM255             SAM255                  770
+-ppm10                 MACH_PPM10              PPM10                   771
+-edb9315a              MACH_EDB9315A           EDB9315A                772
+-sunset                        MACH_SUNSET             SUNSET                  773
+-stargate2             MACH_STARGATE2          STARGATE2               774
+-intelmote2            MACH_INTELMOTE2         INTELMOTE2              775
+-trizeps4              MACH_TRIZEPS4           TRIZEPS4                776
+-mainstone2            MACH_MAINSTONE2         MAINSTONE2              777
+-ez_ixp42x             MACH_EZ_IXP42X          EZ_IXP42X               778
+-tapwave_zodiac                MACH_TAPWAVE_ZODIAC     TAPWAVE_ZODIAC          779
+-universalmeter                MACH_UNIVERSALMETER     UNIVERSALMETER          780
+-hicoarm9              MACH_HICOARM9           HICOARM9                781
+-pnx4008                       MACH_PNX4008            PNX4008                 782
+-kws6000                       MACH_KWS6000            KWS6000                 783
+-portux920t            MACH_PORTUX920T         PORTUX920T              784
+-ez_x5                 MACH_EZ_X5              EZ_X5                   785
+-omap_rudolph          MACH_OMAP_RUDOLPH       OMAP_RUDOLPH            786
+-cpuat91                       MACH_CPUAT91            CPUAT91                 787
+-rea9200                       MACH_REA9200            REA9200                 788
+-acts_pune_sa1110      MACH_ACTS_PUNE_SA1110   ACTS_PUNE_SA1110        789
+-ixp425                        MACH_IXP425             IXP425                  790
+-i30030ads             MACH_I30030ADS          I30030ADS               791
+-perch                 MACH_PERCH              PERCH                   792
+-eis05r1                       MACH_EIS05R1            EIS05R1                 793
+-pepperpad             MACH_PEPPERPAD          PEPPERPAD               794
+-sb3010                        MACH_SB3010             SB3010                  795
+-rm9200                        MACH_RM9200             RM9200                  796
+-dma03                 MACH_DMA03              DMA03                   797
+-road_s101             MACH_ROAD_S101          ROAD_S101               798
+-iq81340sc             MACH_IQ81340SC          IQ81340SC               799
+-iq_nextgen_b          MACH_IQ_NEXTGEN_B       IQ_NEXTGEN_B            800
+-iq81340mc             MACH_IQ81340MC          IQ81340MC               801
+-iq_nextgen_d          MACH_IQ_NEXTGEN_D       IQ_NEXTGEN_D            802
+-iq_nextgen_e          MACH_IQ_NEXTGEN_E       IQ_NEXTGEN_E            803
+-mallow_at91           MACH_MALLOW_AT91        MALLOW_AT91             804
+-cybertracker_i                MACH_CYBERTRACKER_I     CYBERTRACKER_I          805
+-gesbc931x             MACH_GESBC931X          GESBC931X               806
+-centipad              MACH_CENTIPAD           CENTIPAD                807
+-armsoc                        MACH_ARMSOC             ARMSOC                  808
+-se4200                        MACH_SE4200             SE4200                  809
+-ems197a                       MACH_EMS197A            EMS197A                 810
+-micro9                        MACH_MICRO9             MICRO9                  811
+-micro9l                       MACH_MICRO9L            MICRO9L                 812
+-uc5471dsp             MACH_UC5471DSP          UC5471DSP               813
+-sj5471eng             MACH_SJ5471ENG          SJ5471ENG               814
+-none                  MACH_CMPXA26X           CMPXA26X                815
+-nc1                   MACH_NC                 NC                      816
+-omap_palmte           MACH_OMAP_PALMTE        OMAP_PALMTE             817
+-ajax52x                       MACH_AJAX52X            AJAX52X                 818
+-siriustar             MACH_SIRIUSTAR          SIRIUSTAR               819
+-iodata_hdlg           MACH_IODATA_HDLG        IODATA_HDLG             820
+-at91rm9200utl         MACH_AT91RM9200UTL      AT91RM9200UTL           821
+-biosafe                       MACH_BIOSAFE            BIOSAFE                 822
+-mp1000                        MACH_MP1000             MP1000                  823
+-parsy                 MACH_PARSY              PARSY                   824
+-ccxp270                       MACH_CCXP               CCXP                    825
+-omap_gsample          MACH_OMAP_GSAMPLE       OMAP_GSAMPLE            826
+-realview_eb           MACH_REALVIEW_EB        REALVIEW_EB             827
+-samoa                 MACH_SAMOA              SAMOA                   828
+-palmt3                        MACH_PALMT3             PALMT3                  829
+-i878                  MACH_I878               I878                    830
+-borzoi                        MACH_BORZOI             BORZOI                  831
+-gecko                 MACH_GECKO              GECKO                   832
+-ds101                 MACH_DS101              DS101                   833
+-omap_palmtt2          MACH_OMAP_PALMTT2       OMAP_PALMTT2            834
+-palmld                        MACH_PALMLD             PALMLD                  835
+-cc9c                  MACH_CC9C               CC9C                    836
+-sbc1670                       MACH_SBC1670            SBC1670                 837
+-ixdp28x5              MACH_IXDP28X5           IXDP28X5                838
+-omap_palmtt           MACH_OMAP_PALMTT        OMAP_PALMTT             839
+-ml696k                        MACH_ML696K             ML696K                  840
+-arcom_zeus            MACH_ARCOM_ZEUS         ARCOM_ZEUS              841
+-osiris                        MACH_OSIRIS             OSIRIS                  842
+-maestro                       MACH_MAESTRO            MAESTRO                 843
+-palmte2                       MACH_PALMTE2            PALMTE2                 844
+-ixbbm                 MACH_IXBBM              IXBBM                   845
+-mx27ads                       MACH_MX27ADS            MX27ADS                 846
+-ax8004                        MACH_AX8004             AX8004                  847
+-at91sam9261ek         MACH_AT91SAM9261EK      AT91SAM9261EK           848
+-loft                  MACH_LOFT               LOFT                    849
+-magpie                        MACH_MAGPIE             MAGPIE                  850
+-mx21ads                       MACH_MX21ADS            MX21ADS                 851
+-mb87m3400             MACH_MB87M3400          MB87M3400               852
+-mguard_delta          MACH_MGUARD_DELTA       MGUARD_DELTA            853
+-davinci_dvdp          MACH_DAVINCI_DVDP       DAVINCI_DVDP            854
+-htcuniversal          MACH_HTCUNIVERSAL       HTCUNIVERSAL            855
+-tpad                  MACH_TPAD               TPAD                    856
+-roverp3                       MACH_ROVERP3            ROVERP3                 857
+-jornada928            MACH_JORNADA928         JORNADA928              858
+-mv88fxx81             MACH_MV88FXX81          MV88FXX81               859
+-stmp36xx              MACH_STMP36XX           STMP36XX                860
+-sxni79524             MACH_SXNI79524          SXNI79524               861
+-ams_delta             MACH_AMS_DELTA          AMS_DELTA               862
+-uranium                       MACH_URANIUM            URANIUM                 863
+-ucon                  MACH_UCON               UCON                    864
+-nas100d                       MACH_NAS100D            NAS100D                 865
+-l083                  MACH_L083_1000          L083_1000               866
+-ezx                   MACH_EZX                EZX                     867
+-pnx5220                       MACH_PNX5220            PNX5220                 868
+-butte                 MACH_BUTTE              BUTTE                   869
+-srm2                  MACH_SRM2               SRM2                    870
+-dsbr                  MACH_DSBR               DSBR                    871
+-crystalball           MACH_CRYSTALBALL        CRYSTALBALL             872
+-tinypxa27x            MACH_TINYPXA27X         TINYPXA27X              873
+-herbie                        MACH_HERBIE             HERBIE                  874
+-magician              MACH_MAGICIAN           MAGICIAN                875
+-cm4002                        MACH_CM4002             CM4002                  876
+-b4                    MACH_B4                 B4                      877
+-maui                  MACH_MAUI               MAUI                    878
+-cybertracker_g                MACH_CYBERTRACKER_G     CYBERTRACKER_G          879
+-nxdkn                 MACH_NXDKN              NXDKN                   880
+-mio8390                       MACH_MIO8390            MIO8390                 881
+-omi_board             MACH_OMI_BOARD          OMI_BOARD               882
+-mx21civ                       MACH_MX21CIV            MX21CIV                 883
+-mahi_cdac             MACH_MAHI_CDAC          MAHI_CDAC               884
+-palmtx                        MACH_PALMTX             PALMTX                  885
+-s3c2413                       MACH_S3C2413            S3C2413                 887
+-samsys_ep0            MACH_SAMSYS_EP0         SAMSYS_EP0              888
+-wg302v1                       MACH_WG302V1            WG302V1                 889
+-wg302v2                       MACH_WG302V2            WG302V2                 890
+-eb42x                 MACH_EB42X              EB42X                   891
+-iq331es                       MACH_IQ331ES            IQ331ES                 892
+-cosydsp                       MACH_COSYDSP            COSYDSP                 893
+-uplat7d_proto         MACH_UPLAT7D            UPLAT7D                 894
+-ptdavinci             MACH_PTDAVINCI          PTDAVINCI               895
+-mbus                  MACH_MBUS               MBUS                    896
+-nadia2vb              MACH_NADIA2VB           NADIA2VB                897
+-r1000                 MACH_R1000              R1000                   898
+-hw90250                       MACH_HW90250            HW90250                 899
+-omap_2430sdp          MACH_OMAP_2430SDP       OMAP_2430SDP            900
+-davinci_evm           MACH_DAVINCI_EVM        DAVINCI_EVM             901
+-omap_tornado          MACH_OMAP_TORNADO       OMAP_TORNADO            902
+-olocreek              MACH_OLOCREEK           OLOCREEK                903
+-palmz72                       MACH_PALMZ72            PALMZ72                 904
+-nxdb500                       MACH_NXDB500            NXDB500                 905
+-apf9328                       MACH_APF9328            APF9328                 906
+-omap_wipoq            MACH_OMAP_WIPOQ         OMAP_WIPOQ              907
+-omap_twip             MACH_OMAP_TWIP          OMAP_TWIP               908
+-treo650                       MACH_TREO650            TREO650                 909
+-acumen                        MACH_ACUMEN             ACUMEN                  910
+-xp100                 MACH_XP100              XP100                   911
+-fs2410                        MACH_FS2410             FS2410                  912
+-pxa270_cerf           MACH_PXA270_CERF        PXA270_CERF             913
+-sq2ftlpalm            MACH_SQ2FTLPALM         SQ2FTLPALM              914
+-bsemserver            MACH_BSEMSERVER         BSEMSERVER              915
+-netclient             MACH_NETCLIENT          NETCLIENT               916
+-palmt5                        MACH_PALMT5             PALMT5                  917
+-palmtc                        MACH_PALMTC             PALMTC                  918
+-omap_apollon          MACH_OMAP_APOLLON       OMAP_APOLLON            919
+-mxc30030evb           MACH_MXC30030EVB        MXC30030EVB             920
+-rea_2d                        MACH_REA_2D             REA_2D                  921
+-eti3e524              MACH_TI3E524            TI3E524                 922
+-ateb9200              MACH_ATEB9200           ATEB9200                923
+-auckland              MACH_AUCKLAND           AUCKLAND                924
+-ak3220m                       MACH_AK3320M            AK3320M                 925
+-duramax                       MACH_DURAMAX            DURAMAX                 926
+-n35                   MACH_N35                N35                     927
+-pronghorn             MACH_PRONGHORN          PRONGHORN               928
+-fundy                 MACH_FUNDY              FUNDY                   929
+-logicpd_pxa270                MACH_LOGICPD_PXA270     LOGICPD_PXA270          930
+-cpu777                        MACH_CPU777             CPU777                  931
+-simicon9201           MACH_SIMICON9201        SIMICON9201             932
+-leap2_hpm             MACH_LEAP2_HPM          LEAP2_HPM               933
+-cm922txa10            MACH_CM922TXA10         CM922TXA10              934
+-sandgate              MACH_PXA                PXA                     935
+-sandgate2             MACH_SANDGATE2          SANDGATE2               936
+-sandgate2g            MACH_SANDGATE2G         SANDGATE2G              937
+-sandgate2p            MACH_SANDGATE2P         SANDGATE2P              938
+-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
+-ng_fvx538             MACH_NG_FVX538          NG_FVX538               944
+-ng_fvs338             MACH_NG_FVS338          NG_FVS338               945
+-pnx4103                       MACH_PNX4103            PNX4103                 946
+-hesdb                 MACH_HESDB              HESDB                   947
+-xsilo                 MACH_XSILO              XSILO                   948
+-espresso              MACH_ESPRESSO           ESPRESSO                949
+-emlc                  MACH_EMLC               EMLC                    950
+-sisteron              MACH_SISTERON           SISTERON                951
+-rx1950                        MACH_RX1950             RX1950                  952
+-tsc_venus             MACH_TSC_VENUS          TSC_VENUS               953
+-ds101j                        MACH_DS101J             DS101J                  954
+-mxc30030ads           MACH_MXC30030ADS        MXC30030ADS             955
+-fujitsu_wimaxsoc      MACH_FUJITSU_WIMAXSOC   FUJITSU_WIMAXSOC        956
+-dualpcmodem           MACH_DUALPCMODEM        DUALPCMODEM             957
+-gesbc9312             MACH_GESBC9312          GESBC9312               958
+-htcapache             MACH_HTCAPACHE          HTCAPACHE               959
+-ixdp435                       MACH_IXDP435            IXDP435                 960
+-catprovt100           MACH_CATPROVT100        CATPROVT100             961
+-picotux1xx            MACH_PICOTUX1XX         PICOTUX1XX              962
+-picotux2xx            MACH_PICOTUX2XX         PICOTUX2XX              963
+-dsmg600                       MACH_DSMG600            DSMG600                 964
+-empc2                 MACH_EMPC2              EMPC2                   965
+-ventura                       MACH_VENTURA            VENTURA                 966
+-phidget_sbc           MACH_PHIDGET_SBC        PHIDGET_SBC             967
+-ij3k                  MACH_IJ3K               IJ3K                    968
+-pisgah                        MACH_PISGAH             PISGAH                  969
+-omap_fsample          MACH_OMAP_FSAMPLE       OMAP_FSAMPLE            970
+-sg720                 MACH_SG720              SG720                   971
+-redfox                        MACH_REDFOX             REDFOX                  972
+-mysh_ep9315_1         MACH_MYSH_EP9315_1      MYSH_EP9315_1           973
+-tpf106                        MACH_TPF106             TPF106                  974
+-at91rm9200kg          MACH_AT91RM9200KG       AT91RM9200KG            975
+-rcmt2                 MACH_SLEDB              SLEDB                   976
+-ontrack                       MACH_ONTRACK            ONTRACK                 977
+-pm1200                        MACH_PM1200             PM1200                  978
+-ess24562              MACH_ESS24XXX           ESS24XXX                979
+-coremp7                       MACH_COREMP7            COREMP7                 980
+-nexcoder_6446         MACH_NEXCODER_6446      NEXCODER_6446           981
+-stvc8380              MACH_STVC8380           STVC8380                982
+-teklynx                       MACH_TEKLYNX            TEKLYNX                 983
+-carbonado             MACH_CARBONADO          CARBONADO               984
+-sysmos_mp730          MACH_SYSMOS_MP730       SYSMOS_MP730            985
+-snapper_cl15          MACH_SNAPPER_CL15       SNAPPER_CL15            986
+-pgigim                        MACH_PGIGIM             PGIGIM                  987
+-ptx9160p2             MACH_PTX9160P2          PTX9160P2               988
+-dcore1                        MACH_DCORE1             DCORE1                  989
+-victorpxa             MACH_VICTORPXA          VICTORPXA               990
+-mx2dtb                        MACH_MX2DTB             MX2DTB                  991
+-pxa_irex_er0100               MACH_PXA_IREX_ER0100    PXA_IREX_ER0100         992
+-omap_palmz71          MACH_OMAP_PALMZ71       OMAP_PALMZ71            993
+-bartec_deg            MACH_BARTEC_DEG         BARTEC_DEG              994
+-hw50251                       MACH_HW50251            HW50251                 995
+-ibox                  MACH_IBOX               IBOX                    996
+-atlaslh7a404          MACH_ATLASLH7A404       ATLASLH7A404            997
+-pt2026                        MACH_PT2026             PT2026                  998
+-htcalpine             MACH_HTCALPINE          HTCALPINE               999
+-bartec_vtu            MACH_BARTEC_VTU         BARTEC_VTU              1000
+-vcoreii                       MACH_VCOREII            VCOREII                 1001
+-pdnb3                 MACH_PDNB3              PDNB3                   1002
+-htcbeetles            MACH_HTCBEETLES         HTCBEETLES              1003
+-s3c6400                       MACH_S3C6400            S3C6400                 1004
+-s3c2443                       MACH_S3C2443            S3C2443                 1005
+-omap_ldk              MACH_OMAP_LDK           OMAP_LDK                1006
+-smdk2460              MACH_SMDK2460           SMDK2460                1007
+-smdk2440              MACH_SMDK2440           SMDK2440                1008
+-smdk2412              MACH_SMDK2412           SMDK2412                1009
+-webbox                        MACH_WEBBOX             WEBBOX                  1010
+-cwwndp                        MACH_CWWNDP             CWWNDP                  1011
+-i839                  MACH_DRAGON             DRAGON                  1012
+-opendo_cpu_board      MACH_OPENDO_CPU_BOARD   OPENDO_CPU_BOARD        1013
+-ccm2200                       MACH_CCM2200            CCM2200                 1014
+-etwarm                        MACH_ETWARM             ETWARM                  1015
+-m93030                        MACH_M93030             M93030                  1016
+-cc7u                  MACH_CC7U               CC7U                    1017
+-mtt_ranger            MACH_MTT_RANGER         MTT_RANGER              1018
+-nexus                 MACH_NEXUS              NEXUS                   1019
+-desman                        MACH_DESMAN             DESMAN                  1020
+-bkde303                       MACH_BKDE303            BKDE303                 1021
+-smdk2413              MACH_SMDK2413           SMDK2413                1022
+-aml_m7200             MACH_AML_M7200          AML_M7200               1023
+-aml_m5900             MACH_AML_M5900          AML_M5900               1024
+-sg640                 MACH_SG640              SG640                   1025
+-edg79524              MACH_EDG79524           EDG79524                1026
+-ai2410                        MACH_AI2410             AI2410                  1027
+-ixp465                        MACH_IXP465             IXP465                  1028
+-balloon3              MACH_BALLOON3           BALLOON3                1029
+-heins                 MACH_HEINS              HEINS                   1030
+-mpluseva              MACH_MPLUSEVA           MPLUSEVA                1031
+-rt042                 MACH_RT042              RT042                   1032
+-cwiem                 MACH_CWIEM              CWIEM                   1033
+-cm_x270                       MACH_CM_X270            CM_X270                 1034
+-cm_x255                       MACH_CM_X255            CM_X255                 1035
+-esh_at91              MACH_ESH_AT91           ESH_AT91                1036
+-sandgate3             MACH_SANDGATE3          SANDGATE3               1037
+-primo                 MACH_PRIMO              PRIMO                   1038
+-gemstone              MACH_GEMSTONE           GEMSTONE                1039
+-pronghorn_metro               MACH_PRONGHORNMETRO     PRONGHORNMETRO          1040
+-sidewinder            MACH_SIDEWINDER         SIDEWINDER              1041
+-picomod1              MACH_PICOMOD1           PICOMOD1                1042
+-sg590                 MACH_SG590              SG590                   1043
+-akai9307              MACH_AKAI9307           AKAI9307                1044
+-fontaine              MACH_FONTAINE           FONTAINE                1045
+-wombat                        MACH_WOMBAT             WOMBAT                  1046
+-acq300                        MACH_ACQ300             ACQ300                  1047
+-mod272                        MACH_MOD_270            MOD_270                 1048
+-vmc_vc0820            MACH_VC0820             VC0820                  1049
+-ani_aim                       MACH_ANI_AIM            ANI_AIM                 1050
+-jellyfish             MACH_JELLYFISH          JELLYFISH               1051
+-amanita                       MACH_AMANITA            AMANITA                 1052
+-vlink                 MACH_VLINK              VLINK                   1053
+-dexflex                       MACH_DEXFLEX            DEXFLEX                 1054
+-eigen_ttq             MACH_EIGEN_TTQ          EIGEN_TTQ               1055
+-arcom_titan           MACH_ARCOM_TITAN        ARCOM_TITAN             1056
+-tabla                 MACH_TABLA              TABLA                   1057
+-mdirac3                       MACH_MDIRAC3            MDIRAC3                 1058
+-mrhfbp2                       MACH_MRHFBP2            MRHFBP2                 1059
+-at91rm9200rb          MACH_AT91RM9200RB       AT91RM9200RB            1060
+-ani_apm                       MACH_ANI_APM            ANI_APM                 1061
+-ella1                 MACH_ELLA1              ELLA1                   1062
+-inhand_pxa27x         MACH_INHAND_PXA27X      INHAND_PXA27X           1063
+-inhand_pxa25x         MACH_INHAND_PXA25X      INHAND_PXA25X           1064
+-empos_xm              MACH_EMPOS_XM           EMPOS_XM                1065
+-empos                 MACH_EMPOS              EMPOS                   1066
+-empos_tiny            MACH_EMPOS_TINY         EMPOS_TINY              1067
+-empos_sm              MACH_EMPOS_SM           EMPOS_SM                1068
+-egret                 MACH_EGRET              EGRET                   1069
+-ostrich                       MACH_OSTRICH            OSTRICH                 1070
+-n50                   MACH_N50                N50                     1071
+-ecbat91                       MACH_ECBAT91            ECBAT91                 1072
+-stareast              MACH_STAREAST           STAREAST                1073
+-dspg_dw                       MACH_DSPG_DW            DSPG_DW                 1074
+-onearm                        MACH_ONEARM             ONEARM                  1075
+-mrg110_6              MACH_MRG110_6           MRG110_6                1076
+-wrt300nv2             MACH_WRT300NV2          WRT300NV2               1077
+-xm_bulverde           MACH_XM_BULVERDE        XM_BULVERDE             1078
+-msm6100                       MACH_MSM6100            MSM6100                 1079
+-eti_b1                        MACH_ETI_B1             ETI_B1                  1080
+-za9l_series           MACH_ZILOG_ZA9L         ZILOG_ZA9L              1081
+-bit2440                       MACH_BIT2440            BIT2440                 1082
+-nbi                   MACH_NBI                NBI                     1083
+-smdk2443              MACH_SMDK2443           SMDK2443                1084
+-vdavinci              MACH_VDAVINCI           VDAVINCI                1085
+-atc6                  MACH_ATC6               ATC6                    1086
+-multmdw                       MACH_MULTMDW            MULTMDW                 1087
+-mba2440                       MACH_MBA2440            MBA2440                 1088
+-ecsd                  MACH_ECSD               ECSD                    1089
+-palmz31                       MACH_PALMZ31            PALMZ31                 1090
+-fsg                   MACH_FSG                FSG                     1091
+-razor101              MACH_RAZOR101           RAZOR101                1092
+-opera_tdm             MACH_OPERA_TDM          OPERA_TDM               1093
+-comcerto              MACH_COMCERTO           COMCERTO                1094
+-tb0319                        MACH_TB0319             TB0319                  1095
+-kws8000                       MACH_KWS8000            KWS8000                 1096
+-b2                    MACH_B2                 B2                      1097
+-lcl54                 MACH_LCL54              LCL54                   1098
+-at91sam9260ek         MACH_AT91SAM9260EK      AT91SAM9260EK           1099
+-glantank              MACH_GLANTANK           GLANTANK                1100
+-n2100                 MACH_N2100              N2100                   1101
+-n4100                 MACH_N4100              N4100                   1102
+-rsc4                  MACH_VERTICAL_RSC4      VERTICAL_RSC4           1103
+-sg8100                        MACH_SG8100             SG8100                  1104
+-im42xx                        MACH_IM42XX             IM42XX                  1105
+-ftxx                  MACH_FTXX               FTXX                    1106
+-lwfusion              MACH_LWFUSION           LWFUSION                1107
+-qt2410                        MACH_QT2410             QT2410                  1108
+-kixrp435              MACH_KIXRP435           KIXRP435                1109
+-ccw9c                 MACH_CCW9C              CCW9C                   1110
+-dabhs                 MACH_DABHS              DABHS                   1111
+-gzmx                  MACH_GZMX               GZMX                    1112
+-ipnw100ap             MACH_IPNW100AP          IPNW100AP               1113
+-cc9p9360dev           MACH_CC9P9360DEV        CC9P9360DEV             1114
+-cc9p9750dev           MACH_CC9P9750DEV        CC9P9750DEV             1115
+-cc9p9360val           MACH_CC9P9360VAL        CC9P9360VAL             1116
+-cc9p9750val           MACH_CC9P9750VAL        CC9P9750VAL             1117
+-nx70v                 MACH_NX70V              NX70V                   1118
+-at91rm9200df          MACH_AT91RM9200DF       AT91RM9200DF            1119
+-se_pilot2             MACH_SE_PILOT2          SE_PILOT2               1120
+-mtcn_t800             MACH_MTCN_T800          MTCN_T800               1121
+-vcmx212                       MACH_VCMX212            VCMX212                 1122
+-lynx                  MACH_LYNX               LYNX                    1123
+-at91sam9260id         MACH_AT91SAM9260ID      AT91SAM9260ID           1124
+-hw86052                       MACH_HW86052            HW86052                 1125
+-pilz_pmi3             MACH_PILZ_PMI3          PILZ_PMI3               1126
+-edb9302a              MACH_EDB9302A           EDB9302A                1127
+-edb9307a              MACH_EDB9307A           EDB9307A                1128
+-ct_dfs                        MACH_CT_DFS             CT_DFS                  1129
+-pilz_pmi4             MACH_PILZ_PMI4          PILZ_PMI4               1130
+-xceednp_ixp           MACH_XCEEDNP_IXP        XCEEDNP_IXP             1131
+-smdk2442b             MACH_SMDK2442B          SMDK2442B               1132
+-xnode                 MACH_XNODE              XNODE                   1133
+-aidx270                       MACH_AIDX270            AIDX270                 1134
+-rema                  MACH_REMA               REMA                    1135
+-bps1000                       MACH_BPS1000            BPS1000                 1136
+-hw90350                       MACH_HW90350            HW90350                 1137
+-omap_3430sdp          MACH_OMAP_3430SDP       OMAP_3430SDP            1138
+-bluetouch             MACH_BLUETOUCH          BLUETOUCH               1139
+-vstms                 MACH_VSTMS              VSTMS                   1140
+-xsbase270             MACH_XSBASE270          XSBASE270               1141
+-at91sam9260ek_cn      MACH_AT91SAM9260EK_CN   AT91SAM9260EK_CN        1142
+-adsturboxb            MACH_ADSTURBOXB         ADSTURBOXB              1143
+-oti4110                       MACH_OTI4110            OTI4110                 1144
+-hme_pxa                       MACH_HME_PXA            HME_PXA                 1145
+-deisterdca            MACH_DEISTERDCA         DEISTERDCA              1146
+-ces_ssem2             MACH_CES_SSEM2          CES_SSEM2               1147
+-ces_mtr                       MACH_CES_MTR            CES_MTR                 1148
+-tds_avng_sbc          MACH_TDS_AVNG_SBC       TDS_AVNG_SBC            1149
+-everest                       MACH_EVEREST            EVEREST                 1150
+-pnx4010                       MACH_PNX4010            PNX4010                 1151
+-oxnas                 MACH_OXNAS              OXNAS                   1152
+-fiori                 MACH_FIORI              FIORI                   1153
+-ml1200                        MACH_ML1200             ML1200                  1154
+-pecos                 MACH_PECOS              PECOS                   1155
+-nb2xxx                        MACH_NB2XXX             NB2XXX                  1156
+-hw6900                        MACH_HW6900             HW6900                  1157
+-cdcs_quoll            MACH_CDCS_QUOLL         CDCS_QUOLL              1158
+-quicksilver           MACH_QUICKSILVER        QUICKSILVER             1159
+-uplat926              MACH_UPLAT926           UPLAT926                1160
+-dep2410_dep2410               MACH_DEP2410_THOMAS     DEP2410_THOMAS          1161
+-dtk2410                       MACH_DTK2410            DTK2410                 1162
+-chili                 MACH_CHILI              CHILI                   1163
+-demeter                       MACH_DEMETER            DEMETER                 1164
+-dionysus              MACH_DIONYSUS           DIONYSUS                1165
+-as352x                        MACH_AS352X             AS352X                  1166
+-service                       MACH_SERVICE            SERVICE                 1167
+-cs_e9301              MACH_CS_E9301           CS_E9301                1168
+-micro9m                       MACH_MICRO9M            MICRO9M                 1169
+-ia_mospck             MACH_IA_MOSPCK          IA_MOSPCK               1170
+-ql201b                        MACH_QL201B             QL201B                  1171
+-bbm                   MACH_BBM                BBM                     1174
+-exxx                  MACH_EXXX               EXXX                    1175
+-wma11b                        MACH_WMA11B             WMA11B                  1176
+-pelco_atlas           MACH_PELCO_ATLAS        PELCO_ATLAS             1177
+-g500                  MACH_G500               G500                    1178
+-bug                   MACH_BUG                BUG                     1179
+-mx33ads                       MACH_MX33ADS            MX33ADS                 1180
+-chub                  MACH_CHUB               CHUB                    1181
+-neo1973_gta01         MACH_NEO1973_GTA01      NEO1973_GTA01           1182
+-w90n740                       MACH_W90N740            W90N740                 1183
+-medallion_sa2410      MACH_MEDALLION_SA2410   MEDALLION_SA2410        1184
+-ia_cpu_9200_2         MACH_IA_CPU_9200_2      IA_CPU_9200_2           1185
+-dimmrm9200            MACH_DIMMRM9200         DIMMRM9200              1186
+-pm9261                        MACH_PM9261             PM9261                  1187
+-ml7304                        MACH_ML7304             ML7304                  1189
+-ucp250                        MACH_UCP250             UCP250                  1190
+-intboard              MACH_INTBOARD           INTBOARD                1191
+-gulfstream            MACH_GULFSTREAM         GULFSTREAM              1192
+-labquest              MACH_LABQUEST           LABQUEST                1193
+-vcmx313                       MACH_VCMX313            VCMX313                 1194
+-urg200                        MACH_URG200             URG200                  1195
+-cpux255lcdnet         MACH_CPUX255LCDNET      CPUX255LCDNET           1196
+-netdcu9                       MACH_NETDCU9            NETDCU9                 1197
+-netdcu10              MACH_NETDCU10           NETDCU10                1198
+-dspg_dga              MACH_DSPG_DGA           DSPG_DGA                1199
+-dspg_dvw              MACH_DSPG_DVW           DSPG_DVW                1200
+-solos                 MACH_SOLOS              SOLOS                   1201
+-at91sam9263ek         MACH_AT91SAM9263EK      AT91SAM9263EK           1202
+-osstbox                       MACH_OSSTBOX            OSSTBOX                 1203
+-kbat9261              MACH_KBAT9261           KBAT9261                1204
+-ct1100                        MACH_CT1100             CT1100                  1205
+-akcppxa                       MACH_AKCPPXA            AKCPPXA                 1206
+-ochaya1020            MACH_OCHAYA1020         OCHAYA1020              1207
+-hitrack                       MACH_HITRACK            HITRACK                 1208
+-syme1                 MACH_SYME1              SYME1                   1209
+-syhl1                 MACH_SYHL1              SYHL1                   1210
+-empca400              MACH_EMPCA400           EMPCA400                1211
+-em7210                        MACH_EM7210             EM7210                  1212
+-htchermes             MACH_HTCHERMES          HTCHERMES               1213
+-eti_c1                        MACH_ETI_C1             ETI_C1                  1214
+-ac100                 MACH_AC100              AC100                   1216
+-sneetch                       MACH_SNEETCH            SNEETCH                 1217
+-studentmate           MACH_STUDENTMATE        STUDENTMATE             1218
+-zir2410                       MACH_ZIR2410            ZIR2410                 1219
+-zir2413                       MACH_ZIR2413            ZIR2413                 1220
+-dlonip3                       MACH_DLONIP3            DLONIP3                 1221
+-instream              MACH_INSTREAM           INSTREAM                1222
+-ambarella             MACH_AMBARELLA          AMBARELLA               1223
+-nevis                 MACH_NEVIS              NEVIS                   1224
+-htc_trinity           MACH_HTC_TRINITY        HTC_TRINITY             1225
+-ql202b                        MACH_QL202B             QL202B                  1226
+-vpac270                       MACH_VPAC270            VPAC270                 1227
+-rd129                 MACH_RD129              RD129                   1228
+-htcwizard             MACH_HTCWIZARD          HTCWIZARD               1229
+-treo680                       MACH_TREO680            TREO680                 1230
+-tecon_tmezon          MACH_TECON_TMEZON       TECON_TMEZON            1231
+-zylonite              MACH_ZYLONITE           ZYLONITE                1233
+-gene1270              MACH_GENE1270           GENE1270                1234
+-zir2412                       MACH_ZIR2412            ZIR2412                 1235
+-mx31lite              MACH_MX31LITE           MX31LITE                1236
+-t700wx                        MACH_T700WX             T700WX                  1237
+-vf100                 MACH_VF100              VF100                   1238
+-nsb2                  MACH_NSB2               NSB2                    1239
+-nxhmi_bb              MACH_NXHMI_BB           NXHMI_BB                1240
+-nxhmi_re              MACH_NXHMI_RE           NXHMI_RE                1241
+-n4100pro              MACH_N4100PRO           N4100PRO                1242
+-sam9260                       MACH_SAM9260            SAM9260                 1243
+-omap_treo600          MACH_OMAP_TREO600       OMAP_TREO600            1244
+-indy2410              MACH_INDY2410           INDY2410                1245
+-nelt_a                        MACH_NELT_A             NELT_A                  1246
+-n311                  MACH_N311               N311                    1248
+-at91sam9260vgk                MACH_AT91SAM9260VGK     AT91SAM9260VGK          1249
+-at91leppe             MACH_AT91LEPPE          AT91LEPPE               1250
+-at91lepccn            MACH_AT91LEPCCN         AT91LEPCCN              1251
+-apc7100                       MACH_APC7100            APC7100                 1252
+-stargazer             MACH_STARGAZER          STARGAZER               1253
+-sonata                        MACH_SONATA             SONATA                  1254
+-schmoogie             MACH_SCHMOOGIE          SCHMOOGIE               1255
+-aztool                        MACH_AZTOOL             AZTOOL                  1256
+-mioa701                       MACH_MIOA701            MIOA701                 1257
+-sxni9260              MACH_SXNI9260           SXNI9260                1258
+-mxc27520evb           MACH_MXC27520EVB        MXC27520EVB             1259
+-armadillo5x0          MACH_ARMADILLO5X0       ARMADILLO5X0            1260
+-mb9260                        MACH_MB9260             MB9260                  1261
+-mb9263                        MACH_MB9263             MB9263                  1262
+-ipac9302              MACH_IPAC9302           IPAC9302                1263
+-cc9p9360js            MACH_CC9P9360JS         CC9P9360JS              1264
+-gallium                       MACH_GALLIUM            GALLIUM                 1265
+-msc2410                       MACH_MSC2410            MSC2410                 1266
+-ghi270                        MACH_GHI270             GHI270                  1267
+-davinci_leonardo      MACH_DAVINCI_LEONARDO   DAVINCI_LEONARDO        1268
+-oiab                  MACH_OIAB               OIAB                    1269
+-smdk6400              MACH_SMDK6400           SMDK6400                1270
+-nokia_n800            MACH_NOKIA_N800         NOKIA_N800              1271
+-greenphone            MACH_GREENPHONE         GREENPHONE              1272
+-compex42x             MACH_COMPEXWP18         COMPEXWP18              1273
+-xmate                 MACH_XMATE              XMATE                   1274
+-energizer             MACH_ENERGIZER          ENERGIZER               1275
+-ime1                  MACH_IME1               IME1                    1276
+-sweda_tms             MACH_SWEDATMS           SWEDATMS                1277
+-ntnp435c              MACH_NTNP435C           NTNP435C                1278
+-spectro2              MACH_SPECTRO2           SPECTRO2                1279
+-h6039                 MACH_H6039              H6039                   1280
+-ep80219                       MACH_EP80219            EP80219                 1281
+-samoa_ii              MACH_SAMOA_II           SAMOA_II                1282
+-cwmxl                 MACH_CWMXL              CWMXL                   1283
+-as9200                        MACH_AS9200             AS9200                  1284
+-sfx1149                       MACH_SFX1149            SFX1149                 1285
+-navi010                       MACH_NAVI010            NAVI010                 1286
+-multmdp                       MACH_MULTMDP            MULTMDP                 1287
+-scb9520                       MACH_SCB9520            SCB9520                 1288
+-htcathena             MACH_HTCATHENA          HTCATHENA               1289
+-xp179                 MACH_XP179              XP179                   1290
+-h4300                 MACH_H4300              H4300                   1291
+-goramo_mlr            MACH_GORAMO_MLR         GORAMO_MLR              1292
+-mxc30020evb           MACH_MXC30020EVB        MXC30020EVB             1293
+-adsbitsyg5            MACH_ADSBITSYG5         ADSBITSYG5              1294
+-adsportalplus         MACH_ADSPORTALPLUS      ADSPORTALPLUS           1295
+-mmsp2plus             MACH_MMSP2PLUS          MMSP2PLUS               1296
+-em_x270                       MACH_EM_X270            EM_X270                 1297
+-tpp302                        MACH_TPP302             TPP302                  1298
+-tpp104                        MACH_TPM104             TPM104                  1299
+-tpm102                        MACH_TPM102             TPM102                  1300
+-tpm109                        MACH_TPM109             TPM109                  1301
+-fbxo1                 MACH_FBXO1              FBXO1                   1302
+-hxd8                  MACH_HXD8               HXD8                    1303
+-neo1973_gta02         MACH_NEO1973_GTA02      NEO1973_GTA02           1304
+-emtest                        MACH_EMTEST             EMTEST                  1305
+-ad6900                        MACH_AD6900             AD6900                  1306
+-europa                        MACH_EUROPA             EUROPA                  1307
+-metroconnect          MACH_METROCONNECT       METROCONNECT            1308
+-ez_s2410              MACH_EZ_S2410           EZ_S2410                1309
+-ez_s2440              MACH_EZ_S2440           EZ_S2440                1310
+-ez_ep9312             MACH_EZ_EP9312          EZ_EP9312               1311
+-ez_ep9315             MACH_EZ_EP9315          EZ_EP9315               1312
+-ez_x7                 MACH_EZ_X7              EZ_X7                   1313
+-godotdb                       MACH_GODOTDB            GODOTDB                 1314
+-mistral                       MACH_MISTRAL            MISTRAL                 1315
+-msm                   MACH_MSM                MSM                     1316
+-ct5910                        MACH_CT5910             CT5910                  1317
+-ct5912                        MACH_CT5912             CT5912                  1318
+-hynet_ine             MACH_HYNET_INE          HYNET_INE               1319
+-hynet_app             MACH_HYNET_APP          HYNET_APP               1320
+-msm7200                       MACH_MSM7200            MSM7200                 1321
+-msm7600                       MACH_MSM7600            MSM7600                 1322
+-ceb255                        MACH_CEB255             CEB255                  1323
+-ciel                  MACH_CIEL               CIEL                    1324
+-slm5650                       MACH_SLM5650            SLM5650                 1325
+-at91sam9rlek          MACH_AT91SAM9RLEK       AT91SAM9RLEK            1326
+-comtech_router                MACH_COMTECH_ROUTER     COMTECH_ROUTER          1327
+-sbc2410x              MACH_SBC2410X           SBC2410X                1328
+-at4x0bd                       MACH_AT4X0BD            AT4X0BD                 1329
+-cbifr                 MACH_CBIFR              CBIFR                   1330
+-arcom_quantum         MACH_ARCOM_QUANTUM      ARCOM_QUANTUM           1331
+-matrix520             MACH_MATRIX520          MATRIX520               1332
+-matrix510             MACH_MATRIX510          MATRIX510               1333
+-matrix500             MACH_MATRIX500          MATRIX500               1334
+-m501                  MACH_M501               M501                    1335
+-aaeon1270             MACH_AAEON1270          AAEON1270               1336
+-matrix500ev           MACH_MATRIX500EV        MATRIX500EV             1337
+-pac500                        MACH_PAC500             PAC500                  1338
+-pnx8181                       MACH_PNX8181            PNX8181                 1339
+-colibri320            MACH_COLIBRI320         COLIBRI320              1340
+-aztoolbb              MACH_AZTOOLBB           AZTOOLBB                1341
+-aztoolg2              MACH_AZTOOLG2           AZTOOLG2                1342
+-dvlhost                       MACH_DVLHOST            DVLHOST                 1343
+-zir9200                       MACH_ZIR9200            ZIR9200                 1344
+-zir9260                       MACH_ZIR9260            ZIR9260                 1345
+-cocopah                       MACH_COCOPAH            COCOPAH                 1346
+-nds                   MACH_NDS                NDS                     1347
+-rosencrantz           MACH_ROSENCRANTZ        ROSENCRANTZ             1348
+-fttx_odsc             MACH_FTTX_ODSC          FTTX_ODSC               1349
+-classe_r6904          MACH_CLASSE_R6904       CLASSE_R6904            1350
+-cam60                 MACH_CAM60              CAM60                   1351
+-mxc30031ads           MACH_MXC30031ADS        MXC30031ADS             1352
+-datacall              MACH_DATACALL           DATACALL                1353
+-at91eb01              MACH_AT91EB01           AT91EB01                1354
+-rty                   MACH_RTY                RTY                     1355
+-dwl2100                       MACH_DWL2100            DWL2100                 1356
+-vinsi                 MACH_VINSI              VINSI                   1357
+-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
+-adx_abox              MACH_ADX_ABOX           ADX_ABOX                1365
+-adx_tpid              MACH_ADX_TPID           ADX_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_DM355_EVM  DAVINCI_DM355_EVM       1381
+-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
+-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
+-treo700p              MACH_TREO700P           TREO700P                1421
+-treo700w              MACH_TREO700W           TREO700W                1422
+-treo750                       MACH_TREO750            TREO750                 1423
+-treo755p              MACH_TREO755P           TREO755P                1424
+-ezreganut9200         MACH_EZREGANUT9200      EZREGANUT9200           1425
+-sarge                 MACH_SARGE              SARGE                   1426
+-a696                  MACH_A696               A696                    1427
+-turtle1916            MACH_TURTLE             TURTLE                  1428
+-mx27_3ds              MACH_MX27_3DS           MX27_3DS                1430
+-bishop                        MACH_BISHOP             BISHOP                  1431
+-pxx                   MACH_PXX                PXX                     1432
+-redwood                       MACH_REDWOOD            REDWOOD                 1433
+-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
+-adx_wsc2              MACH_ADX_WSC2           ADX_WSC2                1465
+-adx_medcom            MACH_ADX_MEDCOM         ADX_MEDCOM              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
+-tll5000                       MACH_TLL5000            TLL5000                 1522
+-bebot                 MACH_BEBOT              BEBOT                   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
+-adx_pcu57             MACH_ADX_PCU57          ADX_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
+-nokia_n810            MACH_NOKIA_N810         NOKIA_N810              1548
+-c270                  MACH_C270               C270                    1549
+-sentry                        MACH_SENTRY             SENTRY                  1550
+-pcm038                        MACH_PCM038             PCM038                  1551
+-anc300                        MACH_ANC300             ANC300                  1552
+-htckaiser             MACH_HTCKAISER          HTCKAISER               1553
+-sbat100                       MACH_SBAT100            SBAT100                 1554
+-modunorm              MACH_MODUNORM           MODUNORM                1555
+-pelos_twarm           MACH_PELOS_TWARM        PELOS_TWARM             1556
+-flank                 MACH_FLANK              FLANK                   1557
+-sirloin                       MACH_SIRLOIN            SIRLOIN                 1558
+-brisket                       MACH_BRISKET            BRISKET                 1559
+-chuck                 MACH_CHUCK              CHUCK                   1560
+-otter                 MACH_OTTER              OTTER                   1561
+-davinci_ldk           MACH_DAVINCI_LDK        DAVINCI_LDK             1562
+-phreedom              MACH_PHREEDOM           PHREEDOM                1563
+-sg310                 MACH_SG310              SG310                   1564
+-ts_x09                        MACH_TS209              TS209                   1565
+-at91cap9adk           MACH_AT91CAP9ADK        AT91CAP9ADK             1566
+-tion9315              MACH_TION9315           TION9315                1567
+-mast                  MACH_MAST               MAST                    1568
+-pfw                   MACH_PFW                PFW                     1569
+-yl_p2440              MACH_YL_P2440           YL_P2440                1570
+-zsbc32                        MACH_ZSBC32             ZSBC32                  1571
+-omap_pace2            MACH_OMAP_PACE2         OMAP_PACE2              1572
+-imx_pace2             MACH_IMX_PACE2          IMX_PACE2               1573
+-mx31moboard           MACH_MX31MOBOARD        MX31MOBOARD             1574
+-mx37_3ds              MACH_MX37_3DS           MX37_3DS                1575
+-rcc                   MACH_RCC                RCC                     1576
+-dmp                   MACH_ARM9               ARM9                    1577
+-vision_ep9307         MACH_VISION_EP9307      VISION_EP9307           1578
+-scly1000              MACH_SCLY1000           SCLY1000                1579
+-fontel_ep             MACH_FONTEL_EP          FONTEL_EP               1580
+-voiceblue3g           MACH_VOICEBLUE3G        VOICEBLUE3G             1581
+-tt9200                        MACH_TT9200             TT9200                  1582
+-digi2410              MACH_DIGI2410           DIGI2410                1583
+-terastation_pro2      MACH_TERASTATION_PRO2   TERASTATION_PRO2        1584
+-linkstation_pro               MACH_LINKSTATION_PRO    LINKSTATION_PRO         1585
+-motorola_a780         MACH_MOTOROLA_A780      MOTOROLA_A780           1587
+-motorola_e6           MACH_MOTOROLA_E6        MOTOROLA_E6             1588
+-motorola_e2           MACH_MOTOROLA_E2        MOTOROLA_E2             1589
+-motorola_e680         MACH_MOTOROLA_E680      MOTOROLA_E680           1590
+-ur2410                        MACH_UR2410             UR2410                  1591
+-tas9261                       MACH_TAS9261            TAS9261                 1592
+-davinci_hermes_hd     MACH_HERMES_HD          HERMES_HD               1593
+-davinci_perseo_hd     MACH_PERSEO_HD          PERSEO_HD               1594
+-stargazer2            MACH_STARGAZER2         STARGAZER2              1595
+-e350                  MACH_E350               E350                    1596
+-wpcm450                       MACH_WPCM450            WPCM450                 1597
+-cartesio              MACH_CARTESIO           CARTESIO                1598
+-toybox                        MACH_TOYBOX             TOYBOX                  1599
+-tx27                  MACH_TX27               TX27                    1600
+-ts409                 MACH_TS409              TS409                   1601
+-p300                  MACH_P300               P300                    1602
+-xdacomet              MACH_XDACOMET           XDACOMET                1603
+-dexflex2              MACH_DEXFLEX2           DEXFLEX2                1604
+-ow                    MACH_OW                 OW                      1605
+-armebs3                       MACH_ARMEBS3            ARMEBS3                 1606
+-u3                    MACH_U3                 U3                      1607
+-smdk2450              MACH_SMDK2450           SMDK2450                1608
+-rsi_ews                       MACH_RSI_EWS            RSI_EWS                 1609
+-tnb                   MACH_TNB                TNB                     1610
+-toepath                       MACH_TOEPATH            TOEPATH                 1611
+-kb9263                        MACH_KB9263             KB9263                  1612
+-mt7108                        MACH_MT7108             MT7108                  1613
+-smtr2440              MACH_SMTR2440           SMTR2440                1614
+-manao                 MACH_MANAO              MANAO                   1615
+-cm_x300                       MACH_CM_X300            CM_X300                 1616
+-gulfstream_kp         MACH_GULFSTREAM_KP      GULFSTREAM_KP           1617
+-lanreadyfn522         MACH_LANREADYFN522      LANREADYFN522           1618
+-arma37                        MACH_ARMA37             ARMA37                  1619
+-mendel                        MACH_MENDEL             MENDEL                  1620
+-pelco_iliad           MACH_PELCO_ILIAD        PELCO_ILIAD             1621
+-unit2p                        MACH_UNIT2P             UNIT2P                  1622
+-inc20otter            MACH_INC20OTTER         INC20OTTER              1623
+-at91sam9g20ek         MACH_AT91SAM9G20EK      AT91SAM9G20EK           1624
+-sc_ge2                        MACH_STORCENTER         STORCENTER              1625
+-smdk6410              MACH_SMDK6410           SMDK6410                1626
+-u300                  MACH_U300               U300                    1627
+-u500                  MACH_U500               U500                    1628
+-ds9260                        MACH_DS9260             DS9260                  1629
+-riverrock             MACH_RIVERROCK          RIVERROCK               1630
+-scibath                       MACH_SCIBATH            SCIBATH                 1631
+-at91sam7se            MACH_AT91SAM7SE512EK    AT91SAM7SE512EK         1632
+-wrt350n_v2            MACH_WRT350N_V2         WRT350N_V2              1633
+-multimedia            MACH_MULTIMEDIA         MULTIMEDIA              1634
+-marvin                        MACH_MARVIN             MARVIN                  1635
+-x500                  MACH_X500               X500                    1636
+-awlug4lcu             MACH_AWLUG4LCU          AWLUG4LCU               1637
+-palermoc              MACH_PALERMOC           PALERMOC                1638
+-omap_ldp              MACH_OMAP_LDP           OMAP_LDP                1639
+-ip500                 MACH_IP500              IP500                   1640
+-ase2                  MACH_ASE2               ASE2                    1642
+-mx35evb                       MACH_MX35EVB            MX35EVB                 1643
+-aml_m8050             MACH_AML_M8050          AML_M8050               1644
+-mx35_3ds              MACH_MX35_3DS           MX35_3DS                1645
+-mars                  MACH_MARS               MARS                    1646
+-ntosd_644xa           MACH_NTOSD_644XA        NTOSD_644XA             1647
+-badger                        MACH_BADGER             BADGER                  1648
+-trizeps4wl            MACH_TRIZEPS4WL         TRIZEPS4WL              1649
+-trizeps5              MACH_TRIZEPS5           TRIZEPS5                1650
+-marlin                        MACH_MARLIN             MARLIN                  1651
+-ts78xx                        MACH_TS78XX             TS78XX                  1652
+-hpipaq214             MACH_HPIPAQ214          HPIPAQ214               1653
+-at572d940dcm          MACH_AT572D940DCM       AT572D940DCM            1654
+-ne1board              MACH_NE1BOARD           NE1BOARD                1655
+-zante                 MACH_ZANTE              ZANTE                   1656
+-sffsdr                        MACH_SFFSDR             SFFSDR                  1657
+-tw2662                        MACH_TW2662             TW2662                  1658
+-vf10xx                        MACH_VF10XX             VF10XX                  1659
+-zoran43xx             MACH_ZORAN43XX          ZORAN43XX               1660
+-sonix926              MACH_SONIX926           SONIX926                1661
+-celestialsemi         MACH_CELESTIALSEMI      CELESTIALSEMI           1662
+-cc9m2443              MACH_CC9M2443           CC9M2443                1663
+-tw5334                        MACH_TW5334             TW5334                  1664
+-omap_htcartemis               MACH_HTCARTEMIS         HTCARTEMIS              1665
+-nal_hlite             MACH_NAL_HLITE          NAL_HLITE               1666
+-htcvogue              MACH_HTCVOGUE           HTCVOGUE                1667
+-smartweb              MACH_SMARTWEB           SMARTWEB                1668
+-mv86xx                        MACH_MV86XX             MV86XX                  1669
+-mv87xx                        MACH_MV87XX             MV87XX                  1670
+-songyoungho           MACH_SONGYOUNGHO        SONGYOUNGHO             1671
+-younghotema           MACH_YOUNGHOTEMA        YOUNGHOTEMA             1672
+-pcm037                        MACH_PCM037             PCM037                  1673
+-mmvp                  MACH_MMVP               MMVP                    1674
+-mmap                  MACH_MMAP               MMAP                    1675
+-ptid2410              MACH_PTID2410           PTID2410                1676
+-james_926             MACH_JAMES_926          JAMES_926               1677
+-fm6000                        MACH_FM6000             FM6000                  1678
+-db88f6281_bp          MACH_DB88F6281_BP       DB88F6281_BP            1680
+-rd88f6192_nas         MACH_RD88F6192_NAS      RD88F6192_NAS           1681
+-rd88f6281             MACH_RD88F6281          RD88F6281               1682
+-db78x00_bp            MACH_DB78X00_BP         DB78X00_BP              1683
+-smdk2416              MACH_SMDK2416           SMDK2416                1685
+-oce_spider_si         MACH_OCE_SPIDER_SI      OCE_SPIDER_SI           1686
+-oce_spider_sk         MACH_OCE_SPIDER_SK      OCE_SPIDER_SK           1687
+-rovern6                       MACH_ROVERN6            ROVERN6                 1688
+-pelco_evolution               MACH_PELCO_EVOLUTION    PELCO_EVOLUTION         1689
+-wbd111                        MACH_WBD111             WBD111                  1690
+-elaracpe              MACH_ELARACPE           ELARACPE                1691
+-mabv3                 MACH_MABV3              MABV3                   1692
+-mv2120                        MACH_MV2120             MV2120                  1693
+-csb737                        MACH_CSB737             CSB737                  1695
+-mx51_3ds              MACH_MX51_3DS           MX51_3DS                1696
+-g900                  MACH_G900               G900                    1697
+-apf27                 MACH_APF27              APF27                   1698
+-ggus2000              MACH_GGUS2000           GGUS2000                1699
+-omap_2430_mimic               MACH_OMAP_2430_MIMIC    OMAP_2430_MIMIC         1700
+-imx27lite             MACH_IMX27LITE          IMX27LITE               1701
+-almex                 MACH_ALMEX              ALMEX                   1702
+-control                       MACH_CONTROL            CONTROL                 1703
+-mba2410                       MACH_MBA2410            MBA2410                 1704
+-volcano                       MACH_VOLCANO            VOLCANO                 1705
+-zenith                        MACH_ZENITH             ZENITH                  1706
+-muchip                        MACH_MUCHIP             MUCHIP                  1707
+-magellan              MACH_MAGELLAN           MAGELLAN                1708
+-usb_a9260             MACH_USB_A9260          USB_A9260               1709
+-usb_a9263             MACH_USB_A9263          USB_A9263               1710
+-qil_a9260             MACH_QIL_A9260          QIL_A9260               1711
+-cme9210                       MACH_CME9210            CME9210                 1712
+-hczh4                 MACH_HCZH4              HCZH4                   1713
+-spearbasic            MACH_SPEARBASIC         SPEARBASIC              1714
+-dep2440                       MACH_DEP2440            DEP2440                 1715
+-hdl_gxr                       MACH_HDL_GXR            HDL_GXR                 1716
+-hdl_gt                        MACH_HDL_GT             HDL_GT                  1717
+-hdl_4g                        MACH_HDL_4G             HDL_4G                  1718
+-s3c6000                       MACH_S3C6000            S3C6000                 1719
+-mmsp2_mdk             MACH_MMSP2_MDK          MMSP2_MDK               1720
+-mpx220                        MACH_MPX220             MPX220                  1721
+-kzm_arm11_01          MACH_KZM_ARM11_01       KZM_ARM11_01            1722
+-htc_polaris           MACH_HTC_POLARIS        HTC_POLARIS             1723
+-htc_kaiser            MACH_HTC_KAISER         HTC_KAISER              1724
+-lg_ks20                       MACH_LG_KS20            LG_KS20                 1725
+-hhgps                 MACH_HHGPS              HHGPS                   1726
+-nokia_n810_wimax      MACH_NOKIA_N810_WIMAX   NOKIA_N810_WIMAX        1727
+-insight                       MACH_INSIGHT            INSIGHT                 1728
+-sapphire              MACH_SAPPHIRE           SAPPHIRE                1729
+-csb637xo              MACH_CSB637XO           CSB637XO                1730
+-evisiong              MACH_EVISIONG           EVISIONG                1731
+-stmp37xx              MACH_STMP37XX           STMP37XX                1732
+-stmp378x              MACH_STMP378X           STMP378X                1733
+-tnt                   MACH_TNT                TNT                     1734
+-tbxt                  MACH_TBXT               TBXT                    1735
+-playmate              MACH_PLAYMATE           PLAYMATE                1736
+-pns10                 MACH_PNS10              PNS10                   1737
+-eznavi                        MACH_EZNAVI             EZNAVI                  1738
+-ps4000                        MACH_PS4000             PS4000                  1739
+-ezx_a780              MACH_EZX_A780           EZX_A780                1740
+-ezx_e680              MACH_EZX_E680           EZX_E680                1741
+-ezx_a1200             MACH_EZX_A1200          EZX_A1200               1742
+-ezx_e6                        MACH_EZX_E6             EZX_E6                  1743
+-ezx_e2                        MACH_EZX_E2             EZX_E2                  1744
+-ezx_a910              MACH_EZX_A910           EZX_A910                1745
+-cwmx31                        MACH_CWMX31             CWMX31                  1746
+-sl2312                        MACH_SL2312             SL2312                  1747
+-blenny                        MACH_BLENNY             BLENNY                  1748
+-ds107                 MACH_DS107              DS107                   1749
+-dsx07                 MACH_DSX07              DSX07                   1750
+-picocom1              MACH_PICOCOM1           PICOCOM1                1751
+-lynx_wolverine                MACH_LYNX_WOLVERINE     LYNX_WOLVERINE          1752
+-ubisys_p9_sc19                MACH_UBISYS_P9_SC19     UBISYS_P9_SC19          1753
+-kratos_low            MACH_KRATOS_LOW         KRATOS_LOW              1754
+-m700                  MACH_M700               M700                    1755
+-edmini_v2             MACH_EDMINI_V2          EDMINI_V2               1756
+-zipit2                        MACH_ZIPIT2             ZIPIT2                  1757
+-hslfemtocell          MACH_HSLFEMTOCELL       HSLFEMTOCELL            1758
+-daintree_at91         MACH_DAINTREE_AT91      DAINTREE_AT91           1759
+-sg560usb              MACH_SG560USB           SG560USB                1760
+-omap3_pandora         MACH_OMAP3_PANDORA      OMAP3_PANDORA           1761
+-usr8200                       MACH_USR8200            USR8200                 1762
+-s1s65k                        MACH_S1S65K             S1S65K                  1763
+-s2s65a                        MACH_S2S65A             S2S65A                  1764
+-icore                 MACH_ICORE              ICORE                   1765
+-mss2                  MACH_MSS2               MSS2                    1766
+-belmont                       MACH_BELMONT            BELMONT                 1767
+-asusp525              MACH_ASUSP525           ASUSP525                1768
+-lb88rc8480            MACH_LB88RC8480         LB88RC8480              1769
+-hipxa                 MACH_HIPXA              HIPXA                   1770
+-mx25_3ds              MACH_MX25_3DS           MX25_3DS                1771
+-m800                  MACH_M800               M800                    1772
+-omap3530_lv_som               MACH_OMAP3530_LV_SOM    OMAP3530_LV_SOM         1773
+-prima_evb             MACH_PRIMA_EVB          PRIMA_EVB               1774
+-mx31bt1                       MACH_MX31BT1            MX31BT1                 1775
+-atlas4_evb            MACH_ATLAS4_EVB         ATLAS4_EVB              1776
+-mx31cicada            MACH_MX31CICADA         MX31CICADA              1777
+-mi424wr                       MACH_MI424WR            MI424WR                 1778
+-axs_ultrax            MACH_AXS_ULTRAX         AXS_ULTRAX              1779
+-at572d940deb          MACH_AT572D940DEB       AT572D940DEB            1780
+-davinci_da8xx_evm     MACH_DAVINCI_DA8XX_EVM  DAVINCI_DA8XX_EVM       1781
+-ep9302                        MACH_EP9302             EP9302                  1782
+-at572d940hfek         MACH_AT572D940HFEB      AT572D940HFEB           1783
+-cybook3                       MACH_CYBOOK3            CYBOOK3                 1784
+-wdg002                        MACH_WDG002             WDG002                  1785
+-sg560adsl             MACH_SG560ADSL          SG560ADSL               1786
+-nextio_n2800_ica      MACH_NEXTIO_N2800_ICA   NEXTIO_N2800_ICA        1787
+-marvell_newdb         MACH_MARVELL_NEWDB      MARVELL_NEWDB           1789
+-vandihud              MACH_VANDIHUD           VANDIHUD                1790
+-magx_e8                       MACH_MAGX_E8            MAGX_E8                 1791
+-magx_z6                       MACH_MAGX_Z6            MAGX_Z6                 1792
+-magx_v8                       MACH_MAGX_V8            MAGX_V8                 1793
+-magx_u9                       MACH_MAGX_U9            MAGX_U9                 1794
+-toughcf08             MACH_TOUGHCF08          TOUGHCF08               1795
+-zw4400                        MACH_ZW4400             ZW4400                  1796
+-marat91                       MACH_MARAT91            MARAT91                 1797
+-overo                 MACH_OVERO              OVERO                   1798
+-at2440evb             MACH_AT2440EVB          AT2440EVB               1799
+-neocore926            MACH_NEOCORE926         NEOCORE926              1800
+-wnr854t                       MACH_WNR854T            WNR854T                 1801
+-imx27                 MACH_IMX27              IMX27                   1802
+-moose_db              MACH_MOOSE_DB           MOOSE_DB                1803
+-fab4                  MACH_FAB4               FAB4                    1804
+-htcdiamond            MACH_HTCDIAMOND         HTCDIAMOND              1805
+-fiona                 MACH_FIONA              FIONA                   1806
+-mxc30030_x            MACH_MXC30030_X         MXC30030_X              1807
+-bmp1000                       MACH_BMP1000            BMP1000                 1808
+-logi9200              MACH_LOGI9200           LOGI9200                1809
+-tqma31                        MACH_TQMA31             TQMA31                  1810
+-ccw9p9215js           MACH_CCW9P9215JS        CCW9P9215JS             1811
+-rd88f5181l_ge         MACH_RD88F5181L_GE      RD88F5181L_GE           1812
+-sifmain                       MACH_SIFMAIN            SIFMAIN                 1813
+-sam9_l9261            MACH_SAM9_L9261         SAM9_L9261              1814
+-cc9m2443js            MACH_CC9M2443JS         CC9M2443JS              1815
+-xaria300              MACH_XARIA300           XARIA300                1816
+-it9200                        MACH_IT9200             IT9200                  1817
+-rd88f5181l_fxo                MACH_RD88F5181L_FXO     RD88F5181L_FXO          1818
+-kriss_sensor          MACH_KRISS_SENSOR       KRISS_SENSOR            1819
+-pilz_pmi5             MACH_PILZ_PMI5          PILZ_PMI5               1820
+-jade                  MACH_JADE               JADE                    1821
+-ks8695_softplc                MACH_KS8695_SOFTPLC     KS8695_SOFTPLC          1822
+-gprisc3                       MACH_GPRISC3            GPRISC3                 1823
+-stamp9g20             MACH_STAMP9G20          STAMP9G20               1824
+-smdk6430              MACH_SMDK6430           SMDK6430                1825
+-smdkc100              MACH_SMDKC100           SMDKC100                1826
+-tavorevb              MACH_TAVOREVB           TAVOREVB                1827
+-saar                  MACH_SAAR               SAAR                    1828
+-deister_eyecam                MACH_DEISTER_EYECAM     DEISTER_EYECAM          1829
+-at91sam9m10g45ek      MACH_AT91SAM9M10G45EK   AT91SAM9M10G45EK        1830
+-linkstation_produo    MACH_LINKSTATION_PRODUO LINKSTATION_PRODUO      1831
+-hit_b0                        MACH_HIT_B0             HIT_B0                  1832
+-adx_rmu                       MACH_ADX_RMU            ADX_RMU                 1833
+-xg_cpe_main           MACH_XG_CPE_MAIN        XG_CPE_MAIN             1834
+-edb9407a              MACH_EDB9407A           EDB9407A                1835
+-dtb9608                       MACH_DTB9608            DTB9608                 1836
+-em104v1                       MACH_EM104V1            EM104V1                 1837
+-demo                  MACH_DEMO               DEMO                    1838
+-logi9260              MACH_LOGI9260           LOGI9260                1839
+-mx31_exm32            MACH_MX31_EXM32         MX31_EXM32              1840
+-usb_a9g20             MACH_USB_A9G20          USB_A9G20               1841
+-picproje2008          MACH_PICPROJE2008       PICPROJE2008            1842
+-cs_e9315              MACH_CS_E9315           CS_E9315                1843
+-qil_a9g20             MACH_QIL_A9G20          QIL_A9G20               1844
+-sha_pon020            MACH_SHA_PON020         SHA_PON020              1845
+-nad                   MACH_NAD                NAD                     1846
+-sbc35_a9260           MACH_SBC35_A9260        SBC35_A9260             1847
+-sbc35_a9g20           MACH_SBC35_A9G20        SBC35_A9G20             1848
+-davinci_beginning     MACH_DAVINCI_BEGINNING  DAVINCI_BEGINNING       1849
+-uwc                   MACH_UWC                UWC                     1850
+-mxlads                        MACH_MXLADS             MXLADS                  1851
+-htcnike                       MACH_HTCNIKE            HTCNIKE                 1852
+-deister_pxa270                MACH_DEISTER_PXA270     DEISTER_PXA270          1853
+-cme9210js             MACH_CME9210JS          CME9210JS               1854
+-cc9p9360              MACH_CC9P9360           CC9P9360                1855
+-mocha                 MACH_MOCHA              MOCHA                   1856
+-wapd170ag             MACH_WAPD170AG          WAPD170AG               1857
+-linkstation_mini      MACH_LINKSTATION_MINI   LINKSTATION_MINI        1858
+-afeb9260              MACH_AFEB9260           AFEB9260                1859
+-w90x900                       MACH_W90X900            W90X900                 1860
+-w90x700                       MACH_W90X700            W90X700                 1861
+-kt300ip                       MACH_KT300IP            KT300IP                 1862
+-kt300ip_g20           MACH_KT300IP_G20        KT300IP_G20             1863
+-srcm                  MACH_SRCM               SRCM                    1864
+-wlnx_9260             MACH_WLNX_9260          WLNX_9260               1865
+-openmoko_gta03                MACH_OPENMOKO_GTA03     OPENMOKO_GTA03          1866
+-osprey2                       MACH_OSPREY2            OSPREY2                 1867
+-kbio9260              MACH_KBIO9260           KBIO9260                1868
+-ginza                 MACH_GINZA              GINZA                   1869
+-a636n                 MACH_A636N              A636N                   1870
+-imx27ipcam            MACH_IMX27IPCAM         IMX27IPCAM              1871
+-nemoc                 MACH_NEMOC              NEMOC                   1872
+-geneva                        MACH_GENEVA             GENEVA                  1873
+-htcpharos             MACH_HTCPHAROS          HTCPHAROS               1874
+-neonc                 MACH_NEONC              NEONC                   1875
+-nas7100                       MACH_NAS7100            NAS7100                 1876
+-teuphone              MACH_TEUPHONE           TEUPHONE                1877
+-annax_eth2            MACH_ANNAX_ETH2         ANNAX_ETH2              1878
+-csb733                        MACH_CSB733             CSB733                  1879
+-bk3                   MACH_BK3                BK3                     1880
+-omap_em32             MACH_OMAP_EM32          OMAP_EM32               1881
+-et9261cp              MACH_ET9261CP           ET9261CP                1882
+-jasperc                       MACH_JASPERC            JASPERC                 1883
+-issi_arm9             MACH_ISSI_ARM9          ISSI_ARM9               1884
+-ued                   MACH_UED                UED                     1885
+-esiblade              MACH_ESIBLADE           ESIBLADE                1886
+-eye02                 MACH_EYE02              EYE02                   1887
+-imx27kbd              MACH_IMX27KBD           IMX27KBD                1888
+-sst61vc010_fpga               MACH_SST61VC010_FPGA    SST61VC010_FPGA         1889
+-kixvp435              MACH_KIXVP435           KIXVP435                1890
+-kixnp435              MACH_KIXNP435           KIXNP435                1891
+-africa                        MACH_AFRICA             AFRICA                  1892
+-nh233                 MACH_NH233              NH233                   1893
+-rd88f6183ap_ge                MACH_RD88F6183AP_GE     RD88F6183AP_GE          1894
+-bcm4760                       MACH_BCM4760            BCM4760                 1895
+-eddy_v2                       MACH_EDDY_V2            EDDY_V2                 1896
+-realview_pba8         MACH_REALVIEW_PBA8      REALVIEW_PBA8           1897
+-hid_a7                        MACH_HID_A7             HID_A7                  1898
+-hero                  MACH_HERO               HERO                    1899
+-omap_poseidon         MACH_OMAP_POSEIDON      OMAP_POSEIDON           1900
+-realview_pbx          MACH_REALVIEW_PBX       REALVIEW_PBX            1901
+-micro9s                       MACH_MICRO9S            MICRO9S                 1902
+-mako                  MACH_MAKO               MAKO                    1903
+-xdaflame              MACH_XDAFLAME           XDAFLAME                1904
+-phidget_sbc2          MACH_PHIDGET_SBC2       PHIDGET_SBC2            1905
+-limestone             MACH_LIMESTONE          LIMESTONE               1906
+-iprobe_c32            MACH_IPROBE_C32         IPROBE_C32              1907
+-rut100                        MACH_RUT100             RUT100                  1908
+-asusp535              MACH_ASUSP535           ASUSP535                1909
+-htcraphael            MACH_HTCRAPHAEL         HTCRAPHAEL              1910
+-sygdg1                        MACH_SYGDG1             SYGDG1                  1911
+-sygdg2                        MACH_SYGDG2             SYGDG2                  1912
+-seoul                 MACH_SEOUL              SEOUL                   1913
+-salerno                       MACH_SALERNO            SALERNO                 1914
+-ucn_s3c64xx           MACH_UCN_S3C64XX        UCN_S3C64XX             1915
+-msm7201a              MACH_MSM7201A           MSM7201A                1916
+-lpr1                  MACH_LPR1               LPR1                    1917
+-armadillo500fx                MACH_ARMADILLO500FX     ARMADILLO500FX          1918
+-g3evm                 MACH_G3EVM              G3EVM                   1919
+-z3_dm355              MACH_Z3_DM355           Z3_DM355                1920
+-w90p910evb            MACH_W90P910EVB         W90P910EVB              1921
+-w90p920evb            MACH_W90P920EVB         W90P920EVB              1922
+-w90p950evb            MACH_W90P950EVB         W90P950EVB              1923
+-w90n960evb            MACH_W90N960EVB         W90N960EVB              1924
+-camhd                 MACH_CAMHD              CAMHD                   1925
+-mvc100                        MACH_MVC100             MVC100                  1926
+-electrum_200          MACH_ELECTRUM_200       ELECTRUM_200            1927
+-htcjade                       MACH_HTCJADE            HTCJADE                 1928
+-memphis                       MACH_MEMPHIS            MEMPHIS                 1929
+-imx27sbc              MACH_IMX27SBC           IMX27SBC                1930
+-lextar                        MACH_LEXTAR             LEXTAR                  1931
+-mv88f6281gtw_ge               MACH_MV88F6281GTW_GE    MV88F6281GTW_GE         1932
+-ncp                   MACH_NCP                NCP                     1933
+-z32an_series          MACH_Z32AN              Z32AN                   1934
+-tmq_capd              MACH_TMQ_CAPD           TMQ_CAPD                1935
+-omap3_wl              MACH_OMAP3_WL           OMAP3_WL                1936
+-chumby                        MACH_CHUMBY             CHUMBY                  1937
+-atsarm9                       MACH_ATSARM9            ATSARM9                 1938
+-davinci_dm365_evm     MACH_DAVINCI_DM365_EVM  DAVINCI_DM365_EVM       1939
+-bahamas                       MACH_BAHAMAS            BAHAMAS                 1940
+-das                   MACH_DAS                DAS                     1941
+-minidas                       MACH_MINIDAS            MINIDAS                 1942
+-vk1000                        MACH_VK1000             VK1000                  1943
+-centro                        MACH_CENTRO             CENTRO                  1944
+-ctera_2bay            MACH_CTERA_2BAY         CTERA_2BAY              1945
+-edgeconnect           MACH_EDGECONNECT        EDGECONNECT             1946
+-nd27000                       MACH_ND27000            ND27000                 1947
+-cobra                 MACH_GEMALTO_COBRA      GEMALTO_COBRA           1948
+-ingelabs_comet                MACH_INGELABS_COMET     INGELABS_COMET          1949
+-pollux_wiz            MACH_POLLUX_WIZ         POLLUX_WIZ              1950
+-blackstone            MACH_BLACKSTONE         BLACKSTONE              1951
+-topaz                 MACH_TOPAZ              TOPAZ                   1952
+-aixle                 MACH_AIXLE              AIXLE                   1953
+-mw998                 MACH_MW998              MW998                   1954
+-nokia_rx51            MACH_NOKIA_RX51         NOKIA_RX51              1955
+-vsc5605ev             MACH_VSC5605EV          VSC5605EV               1956
+-nt98700dk             MACH_NT98700DK          NT98700DK               1957
+-icontact              MACH_ICONTACT           ICONTACT                1958
+-swarco_frcpu          MACH_SWARCO_FRCPU       SWARCO_FRCPU            1959
+-swarco_scpu           MACH_SWARCO_SCPU        SWARCO_SCPU             1960
+-bbox_p16              MACH_BBOX_P16           BBOX_P16                1961
+-bstd                  MACH_BSTD               BSTD                    1962
+-sbc2440ii             MACH_SBC2440II          SBC2440II               1963
+-pcm034                        MACH_PCM034             PCM034                  1964
+-neso                  MACH_NESO               NESO                    1965
+-wlnx_9g20             MACH_WLNX_9G20          WLNX_9G20               1966
+-omap_zoom2            MACH_OMAP_ZOOM2         OMAP_ZOOM2              1967
+-totemnova             MACH_TOTEMNOVA          TOTEMNOVA               1968
+-c5000                 MACH_C5000              C5000                   1969
+-unipo_at91sam9263     MACH_UNIPO_AT91SAM9263  UNIPO_AT91SAM9263       1970
+-ethernut5             MACH_ETHERNUT5          ETHERNUT5               1971
+-arm11                 MACH_ARM11              ARM11                   1972
+-cpuat9260             MACH_CPUAT9260          CPUAT9260               1973
+-cpupxa255             MACH_CPUPXA255          CPUPXA255               1974
+-cpuimx27              MACH_CPUIMX27           CPUIMX27                1975
+-cheflux                       MACH_CHEFLUX            CHEFLUX                 1976
+-eb_cpux9k2            MACH_EB_CPUX9K2         EB_CPUX9K2              1977
+-opcotec                       MACH_OPCOTEC            OPCOTEC                 1978
+-yt                    MACH_YT                 YT                      1979
+-motoq                 MACH_MOTOQ              MOTOQ                   1980
+-bsb1                  MACH_BSB1               BSB1                    1981
+-acs5k                 MACH_ACS5K              ACS5K                   1982
+-milan                 MACH_MILAN              MILAN                   1983
+-quartzv2              MACH_QUARTZV2           QUARTZV2                1984
+-rsvp                  MACH_RSVP               RSVP                    1985
+-rmp200                        MACH_RMP200             RMP200                  1986
+-snapper_9260          MACH_SNAPPER_9260       SNAPPER_9260            1987
+-dsm320                        MACH_DSM320             DSM320                  1988
+-adsgcm                        MACH_ADSGCM             ADSGCM                  1989
+-ase2_400              MACH_ASE2_400           ASE2_400                1990
+-pizza                 MACH_PIZZA              PIZZA                   1991
+-spot_ngpl             MACH_SPOT_NGPL          SPOT_NGPL               1992
+-armata                        MACH_ARMATA             ARMATA                  1993
+-exeda                 MACH_EXEDA              EXEDA                   1994
+-mx31sf005             MACH_MX31SF005          MX31SF005               1995
+-f5d8231_4_v2          MACH_F5D8231_4_V2       F5D8231_4_V2            1996
+-q2440                 MACH_Q2440              Q2440                   1997
+-qq2440                        MACH_QQ2440             QQ2440                  1998
+-mini2440              MACH_MINI2440           MINI2440                1999
+-colibri300            MACH_COLIBRI300         COLIBRI300              2000
+-jades                 MACH_JADES              JADES                   2001
+-spark                 MACH_SPARK              SPARK                   2002
+-benzina                       MACH_BENZINA            BENZINA                 2003
+-blaze                 MACH_BLAZE              BLAZE                   2004
+-linkstation_ls_hgl    MACH_LINKSTATION_LS_HGL LINKSTATION_LS_HGL      2005
+-htckovsky             MACH_HTCVENUS           HTCVENUS                2006
+-sony_prs505           MACH_SONY_PRS505        SONY_PRS505             2007
+-hanlin_v3             MACH_HANLIN_V3          HANLIN_V3               2008
+-sapphira              MACH_SAPPHIRA           SAPPHIRA                2009
+-dack_sda_01           MACH_DACK_SDA_01        DACK_SDA_01             2010
+-armbox                        MACH_ARMBOX             ARMBOX                  2011
+-harris_rvp            MACH_HARRIS_RVP         HARRIS_RVP              2012
+-ribaldo                       MACH_RIBALDO            RIBALDO                 2013
+-agora                 MACH_AGORA              AGORA                   2014
+-omap3_mini            MACH_OMAP3_MINI         OMAP3_MINI              2015
+-a9sam6432_b           MACH_A9SAM6432_B        A9SAM6432_B             2016
+-usg2410                       MACH_USG2410            USG2410                 2017
+-pc72052_i10_revb      MACH_PC72052_I10_REVB   PC72052_I10_REVB        2018
+-mx35_exm32            MACH_MX35_EXM32         MX35_EXM32              2019
+-topas910              MACH_TOPAS910           TOPAS910                2020
+-hyena                 MACH_HYENA              HYENA                   2021
+-pospax                        MACH_POSPAX             POSPAX                  2022
+-hdl_gx                        MACH_HDL_GX             HDL_GX                  2023
+-ctera_4bay            MACH_CTERA_4BAY         CTERA_4BAY              2024
+-ctera_plug_c          MACH_CTERA_PLUG_C       CTERA_PLUG_C            2025
+-crwea_plug_i          MACH_CRWEA_PLUG_I       CRWEA_PLUG_I            2026
+-egauge2                       MACH_EGAUGE2            EGAUGE2                 2027
+-didj                  MACH_DIDJ               DIDJ                    2028
+-m_s3c2443             MACH_MEISTER            MEISTER                 2029
+-htcblackstone         MACH_HTCBLACKSTONE      HTCBLACKSTONE           2030
+-cpuat9g20             MACH_CPUAT9G20          CPUAT9G20               2031
+-smdk6440              MACH_SMDK6440           SMDK6440                2032
+-omap_35xx_mvp         MACH_OMAP_35XX_MVP      OMAP_35XX_MVP           2033
+-ctera_plug_i          MACH_CTERA_PLUG_I       CTERA_PLUG_I            2034
+-pvg610_100            MACH_PVG610             PVG610                  2035
+-hprw6815              MACH_HPRW6815           HPRW6815                2036
+-omap3_oswald          MACH_OMAP3_OSWALD       OMAP3_OSWALD            2037
+-nas4220b              MACH_NAS4220B           NAS4220B                2038
+-htcraphael_cdma               MACH_HTCRAPHAEL_CDMA    HTCRAPHAEL_CDMA         2039
+-htcdiamond_cdma               MACH_HTCDIAMOND_CDMA    HTCDIAMOND_CDMA         2040
+-scaler                        MACH_SCALER             SCALER                  2041
+-zylonite2             MACH_ZYLONITE2          ZYLONITE2               2042
+-aspenite              MACH_ASPENITE           ASPENITE                2043
+-teton                 MACH_TETON              TETON                   2044
+-ttc_dkb                       MACH_TTC_DKB            TTC_DKB                 2045
+-bishop2                       MACH_BISHOP2            BISHOP2                 2046
+-ippv5                 MACH_IPPV5              IPPV5                   2047
+-farm926                       MACH_FARM926            FARM926                 2048
+-mmccpu                        MACH_MMCCPU             MMCCPU                  2049
+-sgmsfl                        MACH_SGMSFL             SGMSFL                  2050
+-tt8000                        MACH_TT8000             TT8000                  2051
+-zrn4300lp             MACH_ZRN4300LP          ZRN4300LP               2052
+-mptc                  MACH_MPTC               MPTC                    2053
+-h6051                 MACH_H6051              H6051                   2054
+-pvg610_101            MACH_PVG610_101         PVG610_101              2055
+-stamp9261_pc_evb      MACH_STAMP9261_PC_EVB   STAMP9261_PC_EVB        2056
+-pelco_odysseus                MACH_PELCO_ODYSSEUS     PELCO_ODYSSEUS          2057
+-tny_a9260             MACH_TNY_A9260          TNY_A9260               2058
+-tny_a9g20             MACH_TNY_A9G20          TNY_A9G20               2059
+-aesop_mp2530f         MACH_AESOP_MP2530F      AESOP_MP2530F           2060
+-dx900                 MACH_DX900              DX900                   2061
+-cpodc2                        MACH_CPODC2             CPODC2                  2062
+-tilt_8925             MACH_TILT_8925          TILT_8925               2063
+-davinci_dm357_evm     MACH_DAVINCI_DM357_EVM  DAVINCI_DM357_EVM       2064
+-swordfish             MACH_SWORDFISH          SWORDFISH               2065
+-corvus                        MACH_CORVUS             CORVUS                  2066
+-taurus                        MACH_TAURUS             TAURUS                  2067
+-axm                   MACH_AXM                AXM                     2068
+-axc                   MACH_AXC                AXC                     2069
+-baby                  MACH_BABY               BABY                    2070
+-mp200                 MACH_MP200              MP200                   2071
+-pcm043                        MACH_PCM043             PCM043                  2072
+-hanlin_v3c            MACH_HANLIN_V3C         HANLIN_V3C              2073
+-kbk9g20                       MACH_KBK9G20            KBK9G20                 2074
+-adsturbog5            MACH_ADSTURBOG5         ADSTURBOG5              2075
+-avenger_lite1         MACH_AVENGER_LITE1      AVENGER_LITE1           2076
+-suc82x                        MACH_SUC                SUC                     2077
+-at91sam7s256          MACH_AT91SAM7S256       AT91SAM7S256            2078
+-mendoza                       MACH_MENDOZA            MENDOZA                 2079
+-kira                  MACH_KIRA               KIRA                    2080
+-mx1hbm                        MACH_MX1HBM             MX1HBM                  2081
+-quatro43xx            MACH_QUATRO43XX         QUATRO43XX              2082
+-quatro4230            MACH_QUATRO4230         QUATRO4230              2083
+-nsb400                        MACH_NSB400             NSB400                  2084
+-drp255                        MACH_DRP255             DRP255                  2085
+-thoth                 MACH_THOTH              THOTH                   2086
+-firestone             MACH_FIRESTONE          FIRESTONE               2087
+-asusp750              MACH_ASUSP750           ASUSP750                2088
+-ctera_dl              MACH_CTERA_DL           CTERA_DL                2089
+-socr                  MACH_SOCR               SOCR                    2090
+-htcoxygen             MACH_HTCOXYGEN          HTCOXYGEN               2091
+-heroc                 MACH_HEROC              HEROC                   2092
+-zeno6800              MACH_ZENO6800           ZENO6800                2093
+-sc2mcs                        MACH_SC2MCS             SC2MCS                  2094
+-gene100                       MACH_GENE100            GENE100                 2095
+-as353x                        MACH_AS353X             AS353X                  2096
+-sheevaplug            MACH_SHEEVAPLUG         SHEEVAPLUG              2097
+-at91sam9g20           MACH_AT91SAM9G20        AT91SAM9G20             2098
+-mv88f6192gtw_fe               MACH_MV88F6192GTW_FE    MV88F6192GTW_FE         2099
+-cc9200                        MACH_CC9200             CC9200                  2100
+-sm9200                        MACH_SM9200             SM9200                  2101
+-tp9200                        MACH_TP9200             TP9200                  2102
+-snapperdv             MACH_SNAPPERDV          SNAPPERDV               2103
+-avengers_lite         MACH_AVENGERS_LITE      AVENGERS_LITE           2104
+-avengers_lite1                MACH_AVENGERS_LITE1     AVENGERS_LITE1          2105
+-omap3axon             MACH_OMAP3AXON          OMAP3AXON               2106
+-ma8xx                 MACH_MA8XX              MA8XX                   2107
+-mp201ek                       MACH_MP201EK            MP201EK                 2108
+-davinci_tux           MACH_DAVINCI_TUX        DAVINCI_TUX             2109
+-mpa1600                       MACH_MPA1600            MPA1600                 2110
+-pelco_troy            MACH_PELCO_TROY         PELCO_TROY              2111
+-nsb667                        MACH_NSB667             NSB667                  2112
+-rovers5_4mpix         MACH_ROVERS5_4MPIX      ROVERS5_4MPIX           2113
+-twocom                        MACH_TWOCOM             TWOCOM                  2114
+-ubisys_p9_rcu3r2      MACH_UBISYS_P9_RCU3R2   UBISYS_P9_RCU3R2        2115
+-hero_espresso         MACH_HERO_ESPRESSO      HERO_ESPRESSO           2116
+-afeusb                        MACH_AFEUSB             AFEUSB                  2117
+-t830                  MACH_T830               T830                    2118
+-spd8020_cc            MACH_SPD8020_CC         SPD8020_CC              2119
+-om_3d7k                       MACH_OM_3D7K            OM_3D7K                 2120
+-picocom2              MACH_PICOCOM2           PICOCOM2                2121
+-uwg4mx27              MACH_UWG4MX27           UWG4MX27                2122
+-uwg4mx31              MACH_UWG4MX31           UWG4MX31                2123
+-cherry                        MACH_CHERRY             CHERRY                  2124
+-mx51_babbage          MACH_MX51_BABBAGE       MX51_BABBAGE            2125
+-s3c2440turkiye                MACH_S3C2440TURKIYE     S3C2440TURKIYE          2126
+-tx37                  MACH_TX37               TX37                    2127
+-sbc2800_9g20          MACH_SBC2800_9G20       SBC2800_9G20            2128
+-benzglb                       MACH_BENZGLB            BENZGLB                 2129
+-benztd                        MACH_BENZTD             BENZTD                  2130
+-cartesio_plus         MACH_CARTESIO_PLUS      CARTESIO_PLUS           2131
+-solrad_g20            MACH_SOLRAD_G20         SOLRAD_G20              2132
+-mx27wallace           MACH_MX27WALLACE        MX27WALLACE             2133
+-fmzwebmodul           MACH_FMZWEBMODUL        FMZWEBMODUL             2134
+-rd78x00_masa          MACH_RD78X00_MASA       RD78X00_MASA            2135
+-smallogger            MACH_SMALLOGGER         SMALLOGGER              2136
+-ccw9p9215             MACH_CCW9P9215          CCW9P9215               2137
+-dm355_leopard         MACH_DM355_LEOPARD      DM355_LEOPARD           2138
+-ts219                 MACH_TS219              TS219                   2139
+-tny_a9263             MACH_TNY_A9263          TNY_A9263               2140
+-apollo                        MACH_APOLLO             APOLLO                  2141
+-at91cap9stk           MACH_AT91CAP9STK        AT91CAP9STK             2142
+-spc300                        MACH_SPC300             SPC300                  2143
+-eko                   MACH_EKO                EKO                     2144
+-ccw9m2443             MACH_CCW9M2443          CCW9M2443               2145
+-ccw9m2443js           MACH_CCW9M2443JS        CCW9M2443JS             2146
+-m2m_router_device     MACH_M2M_ROUTER_DEVICE  M2M_ROUTER_DEVICE       2147
+-str9104nas            MACH_STAR9104NAS        STAR9104NAS             2148
+-pca100                        MACH_PCA100             PCA100                  2149
+-z3_dm365_mod_01               MACH_Z3_DM365_MOD_01    Z3_DM365_MOD_01         2150
+-hipox                 MACH_HIPOX              HIPOX                   2151
+-omap3_piteds          MACH_OMAP3_PITEDS       OMAP3_PITEDS            2152
+-bm150r                        MACH_BM150R             BM150R                  2153
+-tbone                 MACH_TBONE              TBONE                   2154
+-merlin                        MACH_MERLIN             MERLIN                  2155
+-falcon                        MACH_FALCON             FALCON                  2156
+-davinci_da850_evm     MACH_DAVINCI_DA850_EVM  DAVINCI_DA850_EVM       2157
+-s5p6440                       MACH_S5P6440            S5P6440                 2158
+-at91sam9g10ek         MACH_AT91SAM9G10EK      AT91SAM9G10EK           2159
+-omap_4430sdp          MACH_OMAP_4430SDP       OMAP_4430SDP            2160
+-lpc313x                       MACH_LPC313X            LPC313X                 2161
+-magx_zn5              MACH_MAGX_ZN5           MAGX_ZN5                2162
+-magx_em30             MACH_MAGX_EM30          MAGX_EM30               2163
+-magx_ve66             MACH_MAGX_VE66          MAGX_VE66               2164
+-meesc                 MACH_MEESC              MEESC                   2165
+-otc570                        MACH_OTC570             OTC570                  2166
+-bcu2412                       MACH_BCU2412            BCU2412                 2167
+-beacon                        MACH_BEACON             BEACON                  2168
+-actia_tgw             MACH_ACTIA_TGW          ACTIA_TGW               2169
+-e4430                 MACH_E4430              E4430                   2170
+-ql300                 MACH_QL300              QL300                   2171
+-btmavb101             MACH_BTMAVB101          BTMAVB101               2172
+-btmawb101             MACH_BTMAWB101          BTMAWB101               2173
+-sq201                 MACH_SQ201              SQ201                   2174
+-quatro45xx            MACH_QUATRO45XX         QUATRO45XX              2175
+-openpad                       MACH_OPENPAD            OPENPAD                 2176
+-tx25                  MACH_TX25               TX25                    2177
+-omap3_torpedo         MACH_OMAP3_TORPEDO      OMAP3_TORPEDO           2178
+-htcraphael_k          MACH_HTCRAPHAEL_K       HTCRAPHAEL_K            2179
+-lal43                 MACH_LAL43              LAL43                   2181
+-htcraphael_cdma500    MACH_HTCRAPHAEL_CDMA500 HTCRAPHAEL_CDMA500      2182
+-anw6410                       MACH_ANW6410            ANW6410                 2183
+-htcprophet            MACH_HTCPROPHET         HTCPROPHET              2185
+-cfa_10022             MACH_CFA_10022          CFA_10022               2186
+-imx27_visstrim_m10    MACH_IMX27_VISSTRIM_M10 IMX27_VISSTRIM_M10      2187
+-px2imx27              MACH_PX2IMX27           PX2IMX27                2188
+-stm3210e_eval         MACH_STM3210E_EVAL      STM3210E_EVAL           2189
+-dvs10                 MACH_DVS10              DVS10                   2190
+-portuxg20             MACH_PORTUXG20          PORTUXG20               2191
+-arm_spv                       MACH_ARM_SPV            ARM_SPV                 2192
+-smdkc110              MACH_SMDKC110           SMDKC110                2193
+-cabespresso           MACH_CABESPRESSO        CABESPRESSO             2194
+-hmc800                        MACH_HMC800             HMC800                  2195
+-sholes                        MACH_SHOLES             SHOLES                  2196
+-btmxc31                       MACH_BTMXC31            BTMXC31                 2197
+-dt501                 MACH_DT501              DT501                   2198
+-ktx                   MACH_KTX                KTX                     2199
+-omap3517evm           MACH_OMAP3517EVM        OMAP3517EVM             2200
+-netspace_v2           MACH_NETSPACE_V2        NETSPACE_V2             2201
+-netspace_max_v2               MACH_NETSPACE_MAX_V2    NETSPACE_MAX_V2         2202
+-d2net_v2              MACH_D2NET_V2           D2NET_V2                2203
+-net2big_v2            MACH_NET2BIG_V2         NET2BIG_V2              2204
+-net4big_v2            MACH_NET4BIG_V2         NET4BIG_V2              2205
+-net5big_v2            MACH_NET5BIG_V2         NET5BIG_V2              2206
+-endb2443              MACH_ENDB2443           ENDB2443                2207
+-inetspace_v2          MACH_INETSPACE_V2       INETSPACE_V2            2208
+-tros                  MACH_TROS               TROS                    2209
+-pelco_homer           MACH_PELCO_HOMER        PELCO_HOMER             2210
+-ofsp8                 MACH_OFSP8              OFSP8                   2211
+-at91sam9g45ekes               MACH_AT91SAM9G45EKES    AT91SAM9G45EKES         2212
+-guf_cupid             MACH_GUF_CUPID          GUF_CUPID               2213
+-eab1r                 MACH_EAB1R              EAB1R                   2214
+-desirec                       MACH_DESIREC            DESIREC                 2215
+-cordoba                       MACH_CORDOBA            CORDOBA                 2216
+-irvine                        MACH_IRVINE             IRVINE                  2217
+-sff772                        MACH_SFF772             SFF772                  2218
+-pelco_milano          MACH_PELCO_MILANO       PELCO_MILANO            2219
+-pc7302                        MACH_PC7302             PC7302                  2220
+-bip6000                       MACH_BIP6000            BIP6000                 2221
+-silvermoon            MACH_SILVERMOON         SILVERMOON              2222
+-vc0830                        MACH_VC0830             VC0830                  2223
+-dt430                 MACH_DT430              DT430                   2224
+-ji42pf                        MACH_JI42PF             JI42PF                  2225
+-gnet_ksm              MACH_GNET_KSM           GNET_KSM                2226
+-gnet_sgm              MACH_GNET_SGM           GNET_SGM                2227
+-gnet_sgr              MACH_GNET_SGR           GNET_SGR                2228
+-omap3_icetekevm               MACH_OMAP3_ICETEKEVM    OMAP3_ICETEKEVM         2229
+-pnp                   MACH_PNP                PNP                     2230
+-ctera_2bay_k          MACH_CTERA_2BAY_K       CTERA_2BAY_K            2231
+-ctera_2bay_u          MACH_CTERA_2BAY_U       CTERA_2BAY_U            2232
+-sas_c                 MACH_SAS_C              SAS_C                   2233
+-vma2315                       MACH_VMA2315            VMA2315                 2234
+-vcs                   MACH_VCS                VCS                     2235
+-spear600              MACH_SPEAR600           SPEAR600                2236
+-spear300              MACH_SPEAR300           SPEAR300                2237
+-spear1300             MACH_SPEAR1300          SPEAR1300               2238
+-lilly1131             MACH_LILLY1131          LILLY1131               2239
+-arvoo_ax301           MACH_ARVOO_AX301        ARVOO_AX301             2240
+-mapphone              MACH_MAPPHONE           MAPPHONE                2241
+-legend                        MACH_LEGEND             LEGEND                  2242
+-salsa                 MACH_SALSA              SALSA                   2243
+-lounge                        MACH_LOUNGE             LOUNGE                  2244
+-vision                        MACH_VISION             VISION                  2245
+-vmb20                 MACH_VMB20              VMB20                   2246
+-hy2410                        MACH_HY2410             HY2410                  2247
+-hy9315                        MACH_HY9315             HY9315                  2248
+-bullwinkle            MACH_BULLWINKLE         BULLWINKLE              2249
+-arm_ultimator2                MACH_ARM_ULTIMATOR2     ARM_ULTIMATOR2          2250
+-vs_v210                       MACH_VS_V210            VS_V210                 2252
+-vs_v212                       MACH_VS_V212            VS_V212                 2253
+-hmt                   MACH_HMT                HMT                     2254
+-suen3                 MACH_SUEN3              SUEN3                   2255
+-vesper                        MACH_VESPER             VESPER                  2256
+-str9                  MACH_STR9               STR9                    2257
+-omap3_wl_ff           MACH_OMAP3_WL_FF        OMAP3_WL_FF             2258
+-simcom                        MACH_SIMCOM             SIMCOM                  2259
+-mcwebio                       MACH_MCWEBIO            MCWEBIO                 2260
+-at91sam9g20ek_2mmc    MACH_AT91SAM9G20EK_2MMC AT91SAM9G20EK_2MMC      2288
++ebsa110         ARCH_EBSA110        EBSA110         0
++riscpc          ARCH_RPC        RISCPC          1
++nexuspci        ARCH_NEXUSPCI       NEXUSPCI        3
++ebsa285         ARCH_EBSA285        EBSA285         4
++netwinder       ARCH_NETWINDER      NETWINDER       5
++cats            ARCH_CATS       CATS            6
++tbox            ARCH_TBOX       TBOX            7
++co285           ARCH_CO285      CO285           8
++clps7110        ARCH_CLPS7110       CLPS7110        9
++archimedes      ARCH_ARC        ARCHIMEDES      10
++a5k         ARCH_A5K        A5K         11
++etoile          ARCH_ETOILE     ETOILE          12
++lacie_nas       ARCH_LACIE_NAS      LACIE_NAS       13
++clps7500        ARCH_CLPS7500       CLPS7500        14
++shark           ARCH_SHARK      SHARK           15
++brutus          SA1100_BRUTUS       BRUTUS          16
++personal_server     ARCH_PERSONAL_SERVER    PERSONAL_SERVER     17
++itsy            SA1100_ITSY     ITSY            18
++l7200           ARCH_L7200      L7200           19
++pleb            SA1100_PLEB     PLEB            20
++integrator      ARCH_INTEGRATOR     INTEGRATOR      21
++h3600           SA1100_H3600        H3600           22
++ixp1200         ARCH_IXP1200        IXP1200         23
++p720t           ARCH_P720T      P720T           24
++assabet         SA1100_ASSABET      ASSABET         25
++victor          SA1100_VICTOR       VICTOR          26
++lart            SA1100_LART     LART            27
++ranger          SA1100_RANGER       RANGER          28
++graphicsclient      SA1100_GRAPHICSCLIENT   GRAPHICSCLIENT      29
++xp860           SA1100_XP860        XP860           30
++cerf            SA1100_CERF     CERF            31
++nanoengine      SA1100_NANOENGINE   NANOENGINE      32
++fpic            SA1100_FPIC     FPIC            33
++extenex1        SA1100_EXTENEX1     EXTENEX1        34
++sherman         SA1100_SHERMAN      SHERMAN         35
++accelent_sa     SA1100_ACCELENT     ACCELENT_SA     36
++accelent_l7200      ARCH_L7200_ACCELENT ACCELENT_L7200      37
++netport         SA1100_NETPORT      NETPORT         38
++pangolin        SA1100_PANGOLIN     PANGOLIN        39
++yopy            SA1100_YOPY     YOPY            40
++coolidge        SA1100_COOLIDGE     COOLIDGE        41
++huw_webpanel        SA1100_HUW_WEBPANEL HUW_WEBPANEL        42
++spotme          ARCH_SPOTME     SPOTME          43
++freebird        ARCH_FREEBIRD       FREEBIRD        44
++ti925           ARCH_TI925      TI925           45
++riscstation     ARCH_RISCSTATION    RISCSTATION     46
++cavy            SA1100_CAVY     CAVY            47
++jornada720      SA1100_JORNADA720   JORNADA720      48
++omnimeter       SA1100_OMNIMETER    OMNIMETER       49
++edb7211         ARCH_EDB7211        EDB7211         50
++citygo          SA1100_CITYGO       CITYGO          51
++pfs168          SA1100_PFS168       PFS168          52
++spot            SA1100_SPOT     SPOT            53
++flexanet        SA1100_FLEXANET     FLEXANET        54
++webpal          ARCH_WEBPAL     WEBPAL          55
++linpda          SA1100_LINPDA       LINPDA          56
++anakin          ARCH_ANAKIN     ANAKIN          57
++mvi         SA1100_MVI      MVI         58
++jupiter         SA1100_JUPITER      JUPITER         59
++psionw          ARCH_PSIONW     PSIONW          60
++aln         SA1100_ALN      ALN         61
++epxa            ARCH_CAMELOT        CAMELOT         62
++gds2200         SA1100_GDS2200      GDS2200         63
++netbook         SA1100_PSION_SERIES7    PSION_SERIES7       64
++xfile           SA1100_XFILE        XFILE           65
++accelent_ep9312     ARCH_ACCELENT_EP9312    ACCELENT_EP9312     66
++ic200           ARCH_IC200      IC200           67
++creditlart      SA1100_CREDITLART   CREDITLART      68
++htm         SA1100_HTM      HTM         69
++iq80310         ARCH_IQ80310        IQ80310         70
++freebot         SA1100_FREEBOT      FREEBOT         71
++entel           ARCH_ENTEL      ENTEL           72
++enp3510         ARCH_ENP3510        ENP3510         73
++trizeps         SA1100_TRIZEPS      TRIZEPS         74
++nesa            SA1100_NESA     NESA            75
++venus           ARCH_VENUS      VENUS           76
++tardis          ARCH_TARDIS     TARDIS          77
++mercury         ARCH_MERCURY        MERCURY         78
++empeg           SA1100_EMPEG        EMPEG           79
++adi_evb         ARCH_I80200FCC      I80200FCC       80
++itt_cpb         SA1100_ITT_CPB      ITT_CPB         81
++svc         SA1100_SVC      SVC         82
++alpha2          SA1100_ALPHA2       ALPHA2          84
++alpha1          SA1100_ALPHA1       ALPHA1          85
++netarm          ARCH_NETARM     NETARM          86
++simpad          SA1100_SIMPAD       SIMPAD          87
++pda1            ARCH_PDA1       PDA1            88
++lubbock         ARCH_LUBBOCK        LUBBOCK         89
++aniko           ARCH_ANIKO      ANIKO           90
++clep7212        ARCH_CLEP7212       CLEP7212        91
++cs89712         ARCH_CS89712        CS89712         92
++weararm         SA1100_WEARARM      WEARARM         93
++possio_px       SA1100_POSSIO_PX    POSSIO_PX       94
++sidearm         SA1100_SIDEARM      SIDEARM         95
++stork           SA1100_STORK        STORK           96
++shannon         SA1100_SHANNON      SHANNON         97
++ace         ARCH_ACE        ACE         98
++ballyarm        SA1100_BALLYARM     BALLYARM        99
++simputer        SA1100_SIMPUTER     SIMPUTER        100
++nexterm         SA1100_NEXTERM      NEXTERM         101
++sa1100_elf      SA1100_SA1100_ELF   SA1100_ELF      102
++gator           SA1100_GATOR        GATOR           103
++granite         ARCH_GRANITE        GRANITE         104
++consus          SA1100_CONSUS       CONSUS          105
++aaed2000        ARCH_AAED2000       AAED2000        106
++cdb89712        ARCH_CDB89712       CDB89712        107
++graphicsmaster      SA1100_GRAPHICSMASTER   GRAPHICSMASTER      108
++adsbitsy        SA1100_ADSBITSY     ADSBITSY        109
++pxa_idp         ARCH_PXA_IDP        PXA_IDP         110
++plce            ARCH_PLCE       PLCE            111
++pt_system3      SA1100_PT_SYSTEM3   PT_SYSTEM3      112
++murphy          ARCH_MEDALB     MEDALB          113
++eagle           ARCH_EAGLE      EAGLE           114
++dsc21           ARCH_DSC21      DSC21           115
++dsc24           ARCH_DSC24      DSC24           116
++ti5472          ARCH_TI5472     TI5472          117
++autcpu12        ARCH_AUTCPU12       AUTCPU12        118
++uengine         ARCH_UENGINE        UENGINE         119
++bluestem        SA1100_BLUESTEM     BLUESTEM        120
++xingu8          ARCH_XINGU8     XINGU8          121
++bushstb         ARCH_BUSHSTB        BUSHSTB         122
++epsilon1        SA1100_EPSILON1     EPSILON1        123
++balloon         SA1100_BALLOON      BALLOON         124
++puppy           ARCH_PUPPY      PUPPY           125
++elroy           SA1100_ELROY        ELROY           126
++gms720          ARCH_GMS720     GMS720          127
++s24x            ARCH_S24X       S24X            128
++jtel_clep7312       ARCH_JTEL_CLEP7312  JTEL_CLEP7312       129
++cx821xx         ARCH_CX821XX        CX821XX         130
++edb7312         ARCH_EDB7312        EDB7312         131
++bsa1110         SA1100_BSA1110      BSA1110         132
++powerpin        ARCH_POWERPIN       POWERPIN        133
++openarm         ARCH_OPENARM        OPENARM         134
++whitechapel     SA1100_WHITECHAPEL  WHITECHAPEL     135
++h3100           SA1100_H3100        H3100           136
++h3800           SA1100_H3800        H3800           137
++blue_v1         ARCH_BLUE_V1        BLUE_V1         138
++pxa_cerf        ARCH_PXA_CERF       PXA_CERF        139
++arm7tevb        ARCH_ARM7TEVB       ARM7TEVB        140
++d7400           SA1100_D7400        D7400           141
++piranha         ARCH_PIRANHA        PIRANHA         142
++sbcamelot       SA1100_SBCAMELOT    SBCAMELOT       143
++kings           SA1100_KINGS        KINGS           144
++smdk2400        ARCH_SMDK2400       SMDK2400        145
++collie          SA1100_COLLIE       COLLIE          146
++idr         ARCH_IDR        IDR         147
++badge4          SA1100_BADGE4       BADGE4          148
++webnet          ARCH_WEBNET     WEBNET          149
++d7300           SA1100_D7300        D7300           150
++cep         SA1100_CEP      CEP         151
++fortunet        ARCH_FORTUNET       FORTUNET        152
++vc547x          ARCH_VC547X     VC547X          153
++filewalker      SA1100_FILEWALKER   FILEWALKER      154
++netgateway      SA1100_NETGATEWAY   NETGATEWAY      155
++symbol2800      SA1100_SYMBOL2800   SYMBOL2800      156
++suns            SA1100_SUNS     SUNS            157
++frodo           SA1100_FRODO        FRODO           158
++ms301           SA1100_MACH_TYTE_MS301  MACH_TYTE_MS301     159
++mx1ads          ARCH_MX1ADS     MX1ADS          160
++h7201           ARCH_H7201      H7201           161
++h7202           ARCH_H7202      H7202           162
++amico           ARCH_AMICO      AMICO           163
++iam         SA1100_IAM      IAM         164
++tt530           SA1100_TT530        TT530           165
++sam2400         ARCH_SAM2400        SAM2400         166
++jornada56x      SA1100_JORNADA56X   JORNADA56X      167
++active          SA1100_ACTIVE       ACTIVE          168
++iq80321         ARCH_IQ80321        IQ80321         169
++wid         SA1100_WID      WID         170
++sabinal         ARCH_SABINAL        SABINAL         171
++ixp425_matacumbe    ARCH_IXP425_MATACUMBE   IXP425_MATACUMBE    172
++miniprint       SA1100_MINIPRINT    MINIPRINT       173
++adm510x         ARCH_ADM510X        ADM510X         174
++svs200          SA1100_SVS200       SVS200          175
++atg_tcu         ARCH_ATG_TCU        ATG_TCU         176
++jornada820      SA1100_JORNADA820   JORNADA820      177
++s3c44b0         ARCH_S3C44B0        S3C44B0         178
++margis2         ARCH_MARGIS2        MARGIS2         179
++ks8695          ARCH_KS8695     KS8695          180
++brh         ARCH_BRH        BRH         181
++s3c2410         ARCH_S3C2410        S3C2410         182
++possio_px30     ARCH_POSSIO_PX30    POSSIO_PX30     183
++s3c2800         ARCH_S3C2800        S3C2800         184
++fleetwood       SA1100_FLEETWOOD    FLEETWOOD       185
++omaha           ARCH_OMAHA      OMAHA           186
++ta7         ARCH_TA7        TA7         187
++nova            SA1100_NOVA     NOVA            188
++hmk         ARCH_HMK        HMK         189
++karo            ARCH_KARO       KARO            190
++fester          SA1100_FESTER       FESTER          191
++gpi         ARCH_GPI        GPI         192
++smdk2410        ARCH_SMDK2410       SMDK2410        193
++i519            ARCH_I519       I519            194
++nexio           SA1100_NEXIO        NEXIO           195
++bitbox          SA1100_BITBOX       BITBOX          196
++g200            SA1100_G200     G200            197
++gill            SA1100_GILL     GILL            198
++pxa_mercury     ARCH_PXA_MERCURY    PXA_MERCURY     199
++ceiva           ARCH_CEIVA      CEIVA           200
++fret            SA1100_FRET     FRET            201
++emailphone      SA1100_EMAILPHONE   EMAILPHONE      202
++h3900           ARCH_H3900      H3900           203
++pxa1            ARCH_PXA1       PXA1            204
++koan369         SA1100_KOAN369      KOAN369         205
++cogent          ARCH_COGENT     COGENT          206
++esl_simputer        ARCH_ESL_SIMPUTER   ESL_SIMPUTER        207
++esl_simputer_clr    ARCH_ESL_SIMPUTER_CLR   ESL_SIMPUTER_CLR    208
++esl_simputer_bw     ARCH_ESL_SIMPUTER_BW    ESL_SIMPUTER_BW     209
++hhp_cradle      ARCH_HHP_CRADLE     HHP_CRADLE      210
++he500           ARCH_HE500      HE500           211
++inhandelf2      SA1100_INHANDELF2   INHANDELF2      212
++inhandftip      SA1100_INHANDFTIP   INHANDFTIP      213
++dnp1110         SA1100_DNP1110      DNP1110         214
++pnp1110         SA1100_PNP1110      PNP1110         215
++csb226          ARCH_CSB226     CSB226          216
++arnold          SA1100_ARNOLD       ARNOLD          217
++voiceblue       MACH_VOICEBLUE      VOICEBLUE       218
++jz8028          ARCH_JZ8028     JZ8028          219
++h5400           ARCH_H5400      H5400           220
++forte           SA1100_FORTE        FORTE           221
++acam            SA1100_ACAM     ACAM            222
++abox            SA1100_ABOX     ABOX            223
++atmel           ARCH_ATMEL      ATMEL           224
++sitsang         ARCH_SITSANG        SITSANG         225
++cpu1110lcdnet       SA1100_CPU1110LCDNET    CPU1110LCDNET       226
++mpl_vcma9       ARCH_MPL_VCMA9      MPL_VCMA9       227
++opus_a1         ARCH_OPUS_A1        OPUS_A1         228
++daytona         ARCH_DAYTONA        DAYTONA         229
++killbear        SA1100_KILLBEAR     KILLBEAR        230
++yoho            ARCH_YOHO       YOHO            231
++jasper          ARCH_JASPER     JASPER          232
++dsc25           ARCH_DSC25      DSC25           233
++omap_innovator      MACH_OMAP_INNOVATOR OMAP_INNOVATOR      234
++mnci            ARCH_RAMSES     RAMSES          235
++s28x            ARCH_S28X       S28X            236
++mport3          ARCH_MPORT3     MPORT3          237
++pxa_eagle250        ARCH_PXA_EAGLE250   PXA_EAGLE250        238
++pdb         ARCH_PDB        PDB         239
++blue_2g         SA1100_BLUE_2G      BLUE_2G         240
++bluearch        SA1100_BLUEARCH     BLUEARCH        241
++ixdp2400        ARCH_IXDP2400       IXDP2400        242
++ixdp2800        ARCH_IXDP2800       IXDP2800        243
++explorer        SA1100_EXPLORER     EXPLORER        244
++ixdp425         ARCH_IXDP425        IXDP425         245
++chimp           ARCH_CHIMP      CHIMP           246
++stork_nest      ARCH_STORK_NEST     STORK_NEST      247
++stork_egg       ARCH_STORK_EGG      STORK_EGG       248
++wismo           SA1100_WISMO        WISMO           249
++ezlinx          ARCH_EZLINX     EZLINX          250
++at91rm9200      ARCH_AT91RM9200     AT91RM9200      251
++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
++lavinna         SA1100_LAVINNA      LAVINNA         256
++pxa_uengine     ARCH_PXA_UENGINE    PXA_UENGINE     257
++innokom         ARCH_INNOKOM        INNOKOM         258
++bms         ARCH_BMS        BMS         259
++ixcdp1100       ARCH_IXCDP1100      IXCDP1100       260
++prpmc1100       ARCH_PRPMC1100      PRPMC1100       261
++at91rm9200dk        ARCH_AT91RM9200DK   AT91RM9200DK        262
++armstick        ARCH_ARMSTICK       ARMSTICK        263
++armonie         ARCH_ARMONIE        ARMONIE         264
++mport1          ARCH_MPORT1     MPORT1          265
++s3c5410         ARCH_S3C5410        S3C5410         266
++zcp320a         ARCH_ZCP320A        ZCP320A         267
++i_box           ARCH_I_BOX      I_BOX           268
++stlc1502        ARCH_STLC1502       STLC1502        269
++siren           ARCH_SIREN      SIREN           270
++greenlake       ARCH_GREENLAKE      GREENLAKE       271
++argus           ARCH_ARGUS      ARGUS           272
++combadge        SA1100_COMBADGE     COMBADGE        273
++rokepxa         ARCH_ROKEPXA        ROKEPXA         274
++cintegrator     ARCH_CINTEGRATOR    CINTEGRATOR     275
++guidea07        ARCH_GUIDEA07       GUIDEA07        276
++tat257          ARCH_TAT257     TAT257          277
++igp2425         ARCH_IGP2425        IGP2425         278
++bluegrama       ARCH_BLUEGRAMMA     BLUEGRAMMA      279
++ipod            ARCH_IPOD       IPOD            280
++adsbitsyx       ARCH_ADSBITSYX      ADSBITSYX       281
++trizeps2        ARCH_TRIZEPS2       TRIZEPS2        282
++viper           ARCH_VIPER      VIPER           283
++adsbitsyplus        SA1100_ADSBITSYPLUS ADSBITSYPLUS        284
++adsagc          SA1100_ADSAGC       ADSAGC          285
++stp7312         ARCH_STP7312        STP7312         286
++nx_phnx         MACH_NX_PHNX        NX_PHNX         287
++wep_ep250       ARCH_WEP_EP250      WEP_EP250       288
++inhandelf3      ARCH_INHANDELF3     INHANDELF3      289
++adi_coyote      ARCH_ADI_COYOTE     ADI_COYOTE      290
++iyonix          ARCH_IYONIX     IYONIX          291
++damicam1        ARCH_DAMICAM_SA1110 DAMICAM_SA1110      292
++meg03           ARCH_MEG03      MEG03           293
++pxa_whitechapel     ARCH_PXA_WHITECHAPEL    PXA_WHITECHAPEL     294
++nwsc            ARCH_NWSC       NWSC            295
++nwlarm          ARCH_NWLARM     NWLARM          296
++ixp425_mguard       ARCH_IXP425_MGUARD  IXP425_MGUARD       297
++pxa_netdcu4     ARCH_PXA_NETDCU4    PXA_NETDCU4     298
++ixdp2401        ARCH_IXDP2401       IXDP2401        299
++ixdp2801        ARCH_IXDP2801       IXDP2801        300
++zodiac          ARCH_ZODIAC     ZODIAC          301
++armmodul        ARCH_ARMMODUL       ARMMODUL        302
++ketop           SA1100_KETOP        KETOP           303
++av7200          ARCH_AV7200     AV7200          304
++arch_ti925      ARCH_ARCH_TI925     ARCH_TI925      305
++acq200          ARCH_ACQ200     ACQ200          306
++pt_dafit        SA1100_PT_DAFIT     PT_DAFIT        307
++ihba            ARCH_IHBA       IHBA            308
++quinque         ARCH_QUINQUE        QUINQUE         309
++nimbraone       ARCH_NIMBRAONE      NIMBRAONE       310
++nimbra29x       ARCH_NIMBRA29X      NIMBRA29X       311
++nimbra210       ARCH_NIMBRA210      NIMBRA210       312
++hhp_d95xx       ARCH_HHP_D95XX      HHP_D95XX       313
++labarm          ARCH_LABARM     LABARM          314
++m825xx          ARCH_M825XX     M825XX          315
++m7100           SA1100_M7100        M7100           316
++nipc2           ARCH_NIPC2      NIPC2           317
++fu7202          ARCH_FU7202     FU7202          318
++adsagx          ARCH_ADSAGX     ADSAGX          319
++pxa_pooh        ARCH_PXA_POOH       PXA_POOH        320
++bandon          ARCH_BANDON     BANDON          321
++pcm7210         ARCH_PCM7210        PCM7210         322
++nms9200         ARCH_NMS9200        NMS9200         323
++logodl          ARCH_LOGODL     LOGODL          324
++m7140           SA1100_M7140        M7140           325
++korebot         ARCH_KOREBOT        KOREBOT         326
++iq31244         ARCH_IQ31244        IQ31244         327
++koan393         SA1100_KOAN393      KOAN393         328
++inhandftip3     ARCH_INHANDFTIP3    INHANDFTIP3     329
++gonzo           ARCH_GONZO      GONZO           330
++bast            ARCH_BAST       BAST            331
++scanpass        ARCH_SCANPASS       SCANPASS        332
++ep7312_pooh     ARCH_EP7312_POOH    EP7312_POOH     333
++ta7s            ARCH_TA7S       TA7S            334
++ta7v            ARCH_TA7V       TA7V            335
++icarus          SA1100_ICARUS       ICARUS          336
++h1900           ARCH_H1900      H1900           337
++gemini          SA1100_GEMINI       GEMINI          338
++axim            ARCH_AXIM       AXIM            339
++audiotron       ARCH_AUDIOTRON      AUDIOTRON       340
++h2200           ARCH_H2200      H2200           341
++loox600         ARCH_LOOX600        LOOX600         342
++niop            ARCH_NIOP       NIOP            343
++dm310           ARCH_DM310      DM310           344
++seedpxa_c2      ARCH_SEEDPXA_C2     SEEDPXA_C2      345
++ixp4xx_mguardpci    ARCH_IXP4XX_MGUARD_PCI  IXP4XX_MGUARD_PCI   346
++h1940           ARCH_H1940      H1940           347
++scorpio         ARCH_SCORPIO        SCORPIO         348
++viva            ARCH_VIVA       VIVA            349
++pxa_xcard       ARCH_PXA_XCARD      PXA_XCARD       350
++csb335          ARCH_CSB335     CSB335          351
++ixrd425         ARCH_IXRD425        IXRD425         352
++iq80315         ARCH_IQ80315        IQ80315         353
++nmp7312         ARCH_NMP7312        NMP7312         354
++cx861xx         ARCH_CX861XX        CX861XX         355
++enp2611         ARCH_ENP2611        ENP2611         356
++xda         SA1100_XDA      XDA         357
++csir_ims        ARCH_CSIR_IMS       CSIR_IMS        358
++ixp421_dnaeeth      ARCH_IXP421_DNAEETH IXP421_DNAEETH      359
++pocketserv9200      ARCH_POCKETSERV9200 POCKETSERV9200      360
++toto            ARCH_TOTO       TOTO            361
++s3c2440         ARCH_S3C2440        S3C2440         362
++ks8695p         ARCH_KS8695P        KS8695P         363
++se4000          ARCH_SE4000     SE4000          364
++quadriceps      ARCH_QUADRICEPS     QUADRICEPS      365
++bronco          ARCH_BRONCO     BRONCO          366
++esl_wireless_tab    ARCH_ESL_WIRELESS_TAB   ESL_WIRELESS_TAB    367
++esl_sofcomp     ARCH_ESL_SOFCOMP    ESL_SOFCOMP     368
++s5c7375         ARCH_S5C7375        S5C7375         369
++spearhead       ARCH_SPEARHEAD      SPEARHEAD       370
++pantera         ARCH_PANTERA        PANTERA         371
++prayoglite      ARCH_PRAYOGLITE     PRAYOGLITE      372
++gumstix         ARCH_GUMSTIX        GUMSTIX         373
++rcube           ARCH_RCUBE      RCUBE           374
++rea_olv         ARCH_REA_OLV        REA_OLV         375
++pxa_iphone      ARCH_PXA_IPHONE     PXA_IPHONE      376
++s3c3410         ARCH_S3C3410        S3C3410         377
++espd_4510b      ARCH_ESPD_4510B     ESPD_4510B      378
++mp1x            ARCH_MP1X       MP1X            379
++at91rm9200tb        ARCH_AT91RM9200TB   AT91RM9200TB        380
++adsvgx          ARCH_ADSVGX     ADSVGX          381
++omap_h2         MACH_OMAP_H2        OMAP_H2         382
++pelee           ARCH_PELEE      PELEE           383
++e740            MACH_E740       E740            384
++iq80331         ARCH_IQ80331        IQ80331         385
++versatile_pb        ARCH_VERSATILE_PB   VERSATILE_PB        387
++kev7a400        MACH_KEV7A400       KEV7A400        388
++lpd7a400        MACH_LPD7A400       LPD7A400        389
++lpd7a404        MACH_LPD7A404       LPD7A404        390
++fujitsu_camelot     ARCH_FUJITSU_CAMELOT    FUJITSU_CAMELOT     391
++janus2m         ARCH_JANUS2M        JANUS2M         392
++embtf           MACH_EMBTF      EMBTF           393
++hpm         MACH_HPM        HPM         394
++smdk2410tk      MACH_SMDK2410TK     SMDK2410TK      395
++smdk2410aj      MACH_SMDK2410AJ     SMDK2410AJ      396
++streetracer     MACH_STREETRACER    STREETRACER     397
++eframe          MACH_EFRAME     EFRAME          398
++csb337          MACH_CSB337     CSB337          399
++pxa_lark        MACH_PXA_LARK       PXA_LARK        400
++pxa_pnp2110     MACH_PNP2110        PNP2110         401
++tcc72x          MACH_TCC72X     TCC72X          402
++altair          MACH_ALTAIR     ALTAIR          403
++kc3         MACH_KC3        KC3         404
++sinteftd        MACH_SINTEFTD       SINTEFTD        405
++mainstone       MACH_MAINSTONE      MAINSTONE       406
++aday4x          MACH_ADAY4X     ADAY4X          407
++lite300         MACH_LITE300        LITE300         408
++s5c7376         MACH_S5C7376        S5C7376         409
++mt02            MACH_MT02       MT02            410
++mport3s         MACH_MPORT3S        MPORT3S         411
++ra_alpha        MACH_RA_ALPHA       RA_ALPHA        412
++xcep            MACH_XCEP       XCEP            413
++arcom_vulcan        MACH_ARCOM_VULCAN   ARCOM_VULCAN        414
++stargate        MACH_STARGATE       STARGATE        415
++armadilloj      MACH_ARMADILLOJ     ARMADILLOJ      416
++elroy_jack      MACH_ELROY_JACK     ELROY_JACK      417
++backend         MACH_BACKEND        BACKEND         418
++s5linbox        MACH_S5LINBOX       S5LINBOX        419
++nomadik         MACH_NOMADIK        NOMADIK         420
++ia_cpu_9200     MACH_IA_CPU_9200    IA_CPU_9200     421
++at91_bja1       MACH_AT91_BJA1      AT91_BJA1       422
++corgi           MACH_CORGI      CORGI           423
++poodle          MACH_POODLE     POODLE          424
++ten         MACH_TEN        TEN         425
++roverp5p        MACH_ROVERP5P       ROVERP5P        426
++sc2700          MACH_SC2700     SC2700          427
++ex_eagle        MACH_EX_EAGLE       EX_EAGLE        428
++nx_pxa12        MACH_NX_PXA12       NX_PXA12        429
++nx_pxa5         MACH_NX_PXA5        NX_PXA5         430
++blackboard2     MACH_BLACKBOARD2    BLACKBOARD2     431
++i819            MACH_I819       I819            432
++ixmb995e        MACH_IXMB995E       IXMB995E        433
++skyrider        MACH_SKYRIDER       SKYRIDER        434
++skyhawk         MACH_SKYHAWK        SKYHAWK         435
++enterprise      MACH_ENTERPRISE     ENTERPRISE      436
++dep2410         MACH_DEP2410        DEP2410         437
++armcore         MACH_ARMCORE        ARMCORE         438
++hobbit          MACH_HOBBIT     HOBBIT          439
++h7210           MACH_H7210      H7210           440
++pxa_netdcu5     MACH_PXA_NETDCU5    PXA_NETDCU5     441
++acc         MACH_ACC        ACC         442
++esl_sarva       MACH_ESL_SARVA      ESL_SARVA       443
++xm250           MACH_XM250      XM250           444
++t6tc1xb         MACH_T6TC1XB        T6TC1XB         445
++ess710          MACH_ESS710     ESS710          446
++mx31ads         MACH_MX31ADS        MX31ADS         447
++himalaya        MACH_HIMALAYA       HIMALAYA        448
++bolfenk         MACH_BOLFENK        BOLFENK         449
++at91rm9200kr        MACH_AT91RM9200KR   AT91RM9200KR        450
++edb9312         MACH_EDB9312        EDB9312         451
++omap_generic        MACH_OMAP_GENERIC   OMAP_GENERIC        452
++aximx3          MACH_AXIMX3     AXIMX3          453
++eb67xdip        MACH_EB67XDIP       EB67XDIP        454
++webtxs          MACH_WEBTXS     WEBTXS          455
++hawk            MACH_HAWK       HAWK            456
++ccat91sbc001        MACH_CCAT91SBC001   CCAT91SBC001        457
++expresso        MACH_EXPRESSO       EXPRESSO        458
++h4000           MACH_H4000      H4000           459
++dino            MACH_DINO       DINO            460
++ml675k          MACH_ML675K     ML675K          461
++edb9301         MACH_EDB9301        EDB9301         462
++edb9315         MACH_EDB9315        EDB9315         463
++reciva_tt       MACH_RECIVA_TT      RECIVA_TT       464
++cstcb01         MACH_CSTCB01        CSTCB01         465
++cstcb1          MACH_CSTCB1     CSTCB1          466
++shadwell        MACH_SHADWELL       SHADWELL        467
++goepel263       MACH_GOEPEL263      GOEPEL263       468
++acq100          MACH_ACQ100     ACQ100          469
++mx1fs2          MACH_MX1FS2     MX1FS2          470
++hiptop_g1       MACH_HIPTOP_G1      HIPTOP_G1       471
++sparky          MACH_SPARKY     SPARKY          472
++ns9750          MACH_NS9750     NS9750          473
++phoenix         MACH_PHOENIX        PHOENIX         474
++vr1000          MACH_VR1000     VR1000          475
++deisterpxa      MACH_DEISTERPXA     DEISTERPXA      476
++bcm1160         MACH_BCM1160        BCM1160         477
++pcm022          MACH_PCM022     PCM022          478
++adsgcx          MACH_ADSGCX     ADSGCX          479
++dreadnaught     MACH_DREADNAUGHT    DREADNAUGHT     480
++dm320           MACH_DM320      DM320           481
++markov          MACH_MARKOV     MARKOV          482
++cos7a400        MACH_COS7A400       COS7A400        483
++milano          MACH_MILANO     MILANO          484
++ue9328          MACH_UE9328     UE9328          485
++uex255          MACH_UEX255     UEX255          486
++ue2410          MACH_UE2410     UE2410          487
++a620            MACH_A620       A620            488
++ocelot          MACH_OCELOT     OCELOT          489
++cheetah         MACH_CHEETAH        CHEETAH         490
++omap_perseus2       MACH_OMAP_PERSEUS2  OMAP_PERSEUS2       491
++zvue            MACH_ZVUE       ZVUE            492
++roverp1         MACH_ROVERP1        ROVERP1         493
++asidial2        MACH_ASIDIAL2       ASIDIAL2        494
++s3c24a0         MACH_S3C24A0        S3C24A0         495
++e800            MACH_E800       E800            496
++e750            MACH_E750       E750            497
++s3c5500         MACH_S3C5500        S3C5500         498
++smdk5500        MACH_SMDK5500       SMDK5500        499
++signalsync      MACH_SIGNALSYNC     SIGNALSYNC      500
++nbc         MACH_NBC        NBC         501
++kodiak          MACH_KODIAK     KODIAK          502
++netbookpro      MACH_NETBOOKPRO     NETBOOKPRO      503
++hw90200         MACH_HW90200        HW90200         504
++condor          MACH_CONDOR     CONDOR          505
++cup         MACH_CUP        CUP         506
++kite            MACH_KITE       KITE            507
++scb9328         MACH_SCB9328        SCB9328         508
++omap_h3         MACH_OMAP_H3        OMAP_H3         509
++omap_h4         MACH_OMAP_H4        OMAP_H4         510
++n10         MACH_N10        N10         511
++montejade       MACH_MONTAJADE      MONTAJADE       512
++sg560           MACH_SG560      SG560           513
++dp1000          MACH_DP1000     DP1000          514
++omap_osk        MACH_OMAP_OSK       OMAP_OSK        515
++rg100v3         MACH_RG100V3        RG100V3         516
++mx2ads          MACH_MX2ADS     MX2ADS          517
++pxa_kilo        MACH_PXA_KILO       PXA_KILO        518
++ixp4xx_eagle        MACH_IXP4XX_EAGLE   IXP4XX_EAGLE        519
++tosa            MACH_TOSA       TOSA            520
++mb2520f         MACH_MB2520F        MB2520F         521
++emc1000         MACH_EMC1000        EMC1000         522
++tidsc25         MACH_TIDSC25        TIDSC25         523
++akcpmxl         MACH_AKCPMXL        AKCPMXL         524
++av3xx           MACH_AV3XX      AV3XX           525
++avila           MACH_AVILA      AVILA           526
++pxa_mpm10       MACH_PXA_MPM10      PXA_MPM10       527
++pxa_kyanite     MACH_PXA_KYANITE    PXA_KYANITE     528
++sgold           MACH_SGOLD      SGOLD           529
++oscar           MACH_OSCAR      OSCAR           530
++epxa4usb2       MACH_EPXA4USB2      EPXA4USB2       531
++xsengine        MACH_XSENGINE       XSENGINE        532
++ip600           MACH_IP600      IP600           533
++mcan2           MACH_MCAN2      MCAN2           534
++ddi_blueridge       MACH_DDI_BLUERIDGE  DDI_BLUERIDGE       535
++skyminder       MACH_SKYMINDER      SKYMINDER       536
++lpd79520        MACH_LPD79520       LPD79520        537
++edb9302         MACH_EDB9302        EDB9302         538
++hw90340         MACH_HW90340        HW90340         539
++cip_box         MACH_CIP_BOX        CIP_BOX         540
++ivpn            MACH_IVPN       IVPN            541
++rsoc2           MACH_RSOC2      RSOC2           542
++husky           MACH_HUSKY      HUSKY           543
++boxer           MACH_BOXER      BOXER           544
++shepherd        MACH_SHEPHERD       SHEPHERD        545
++aml42800aa      MACH_AML42800AA     AML42800AA      546
++lpc2294         MACH_LPC2294        LPC2294         548
++switchgrass     MACH_SWITCHGRASS    SWITCHGRASS     549
++ens_cmu         MACH_ENS_CMU        ENS_CMU         550
++mm6_sdb         MACH_MM6_SDB        MM6_SDB         551
++saturn          MACH_SATURN     SATURN          552
++i30030evb       MACH_I30030EVB      I30030EVB       553
++mxc27530evb     MACH_MXC27530EVB    MXC27530EVB     554
++smdk2800        MACH_SMDK2800       SMDK2800        555
++mtwilson        MACH_MTWILSON       MTWILSON        556
++ziti            MACH_ZITI       ZITI            557
++grandfather     MACH_GRANDFATHER    GRANDFATHER     558
++tengine         MACH_TENGINE        TENGINE         559
++s3c2460         MACH_S3C2460        S3C2460         560
++pdm         MACH_PDM        PDM         561
++h4700           MACH_H4700      H4700           562
++h6300           MACH_H6300      H6300           563
++rz1700          MACH_RZ1700     RZ1700          564
++a716            MACH_A716       A716            565
++estk2440a       MACH_ESTK2440A      ESTK2440A       566
++atwixp425       MACH_ATWIXP425      ATWIXP425       567
++csb336          MACH_CSB336     CSB336          568
++rirm2           MACH_RIRM2      RIRM2           569
++cx23518         MACH_CX23518        CX23518         570
++cx2351x         MACH_CX2351X        CX2351X         571
++computime       MACH_COMPUTIME      COMPUTIME       572
++izarus          MACH_IZARUS     IZARUS          573
++pxa_rts         MACH_RTS        RTS         574
++se5100          MACH_SE5100     SE5100          575
++s3c2510         MACH_S3C2510        S3C2510         576
++csb437tl        MACH_CSB437TL       CSB437TL        577
++slauson         MACH_SLAUSON        SLAUSON         578
++pearlriver      MACH_PEARLRIVER     PEARLRIVER      579
++tdc_p210        MACH_TDC_P210       TDC_P210        580
++sg580           MACH_SG580      SG580           581
++wrsbcarm7       MACH_WRSBCARM7      WRSBCARM7       582
++ipd         MACH_IPD        IPD         583
++pxa_dnp2110     MACH_PXA_DNP2110    PXA_DNP2110     584
++xaeniax         MACH_XAENIAX        XAENIAX         585
++somn4250        MACH_SOMN4250       SOMN4250        586
++pleb2           MACH_PLEB2      PLEB2           587
++cornwallis      MACH_CORNWALLIS     CORNWALLIS      588
++gurney_drv      MACH_GURNEY_DRV     GURNEY_DRV      589
++chaffee         MACH_CHAFFEE        CHAFFEE         590
++rms101          MACH_RMS101     RMS101          591
++rx3715          MACH_RX3715     RX3715          592
++swift           MACH_SWIFT      SWIFT           593
++roverp7         MACH_ROVERP7        ROVERP7         594
++pr818s          MACH_PR818S     PR818S          595
++trxpro          MACH_TRXPRO     TRXPRO          596
++nslu2           MACH_NSLU2      NSLU2           597
++e400            MACH_E400       E400            598
++trab            MACH_TRAB       TRAB            599
++cmc_pu2         MACH_CMC_PU2        CMC_PU2         600
++fulcrum         MACH_FULCRUM        FULCRUM         601
++netgate42x      MACH_NETGATE42X     NETGATE42X      602
++str710          MACH_STR710     STR710          603
++ixdpg425        MACH_IXDPG425       IXDPG425        604
++tomtomgo        MACH_TOMTOMGO       TOMTOMGO        605
++versatile_ab        MACH_VERSATILE_AB   VERSATILE_AB        606
++edb9307         MACH_EDB9307        EDB9307         607
++sg565           MACH_SG565      SG565           608
++lpd79524        MACH_LPD79524       LPD79524        609
++lpd79525        MACH_LPD79525       LPD79525        610
++rms100          MACH_RMS100     RMS100          611
++kb9200          MACH_KB9200     KB9200          612
++sx1         MACH_SX1        SX1         613
++hms39c7092      MACH_HMS39C7092     HMS39C7092      614
++armadillo       MACH_ARMADILLO      ARMADILLO       615
++ipcu            MACH_IPCU       IPCU            616
++loox720         MACH_LOOX720        LOOX720         617
++ixdp465         MACH_IXDP465        IXDP465         618
++ixdp2351        MACH_IXDP2351       IXDP2351        619
++adsvix          MACH_ADSVIX     ADSVIX          620
++dm270           MACH_DM270      DM270           621
++socltplus       MACH_SOCLTPLUS      SOCLTPLUS       622
++ecia            MACH_ECIA       ECIA            623
++cm4008          MACH_CM4008     CM4008          624
++p2001           MACH_P2001      P2001           625
++twister         MACH_TWISTER        TWISTER         626
++mudshark        MACH_MUDSHARK       MUDSHARK        627
++hb2         MACH_HB2        HB2         628
++iq80332         MACH_IQ80332        IQ80332         629
++sendt           MACH_SENDT      SENDT           630
++mx2jazz         MACH_MX2JAZZ        MX2JAZZ         631
++multiio         MACH_MULTIIO        MULTIIO         632
++hrdisplay       MACH_HRDISPLAY      HRDISPLAY       633
++mxc27530ads     MACH_MXC27530ADS    MXC27530ADS     634
++trizeps3        MACH_TRIZEPS3       TRIZEPS3        635
++zefeerdza       MACH_ZEFEERDZA      ZEFEERDZA       636
++zefeerdzb       MACH_ZEFEERDZB      ZEFEERDZB       637
++zefeerdzg       MACH_ZEFEERDZG      ZEFEERDZG       638
++zefeerdzn       MACH_ZEFEERDZN      ZEFEERDZN       639
++zefeerdzq       MACH_ZEFEERDZQ      ZEFEERDZQ       640
++gtwx5715        MACH_GTWX5715       GTWX5715        641
++astro_jack      MACH_ASTRO_JACK     ASTRO_JACK      643
++tip03           MACH_TIP03      TIP03           644
++a9200ec         MACH_A9200EC        A9200EC         645
++pnx0105         MACH_PNX0105        PNX0105         646
++adcpoecpu       MACH_ADCPOECPU      ADCPOECPU       647
++csb637          MACH_CSB637     CSB637          648
++mb9200          MACH_MB9200     MB9200          650
++kulun           MACH_KULUN      KULUN           651
++snapper         MACH_SNAPPER        SNAPPER         652
++optima          MACH_OPTIMA     OPTIMA          653
++dlhsbc          MACH_DLHSBC     DLHSBC          654
++x30         MACH_X30        X30         655
++n30         MACH_N30        N30         656
++manga_ks8695        MACH_MANGA_KS8695   MANGA_KS8695        657
++ajax            MACH_AJAX       AJAX            658
++nec_mp900       MACH_NEC_MP900      NEC_MP900       659
++vvtk1000        MACH_VVTK1000       VVTK1000        661
++kafa            MACH_KAFA       KAFA            662
++vvtk3000        MACH_VVTK3000       VVTK3000        663
++pimx1           MACH_PIMX1      PIMX1           664
++ollie           MACH_OLLIE      OLLIE           665
++skymax          MACH_SKYMAX     SKYMAX          666
++jazz            MACH_JAZZ       JAZZ            667
++tel_t3          MACH_TEL_T3     TEL_T3          668
++aisino_fcr255       MACH_AISINO_FCR255  AISINO_FCR255       669
++btweb           MACH_BTWEB      BTWEB           670
++dbg_lh79520     MACH_DBG_LH79520    DBG_LH79520     671
++cm41xx          MACH_CM41XX     CM41XX          672
++ts72xx          MACH_TS72XX     TS72XX          673
++nggpxa          MACH_NGGPXA     NGGPXA          674
++csb535          MACH_CSB535     CSB535          675
++csb536          MACH_CSB536     CSB536          676
++pxa_trakpod     MACH_PXA_TRAKPOD    PXA_TRAKPOD     677
++praxis          MACH_PRAXIS     PRAXIS          678
++lh75411         MACH_LH75411        LH75411         679
++otom            MACH_OTOM       OTOM            680
++nexcoder_2440       MACH_NEXCODER_2440  NEXCODER_2440       681
++loox410         MACH_LOOX410        LOOX410         682
++westlake        MACH_WESTLAKE       WESTLAKE        683
++nsb         MACH_NSB        NSB         684
++esl_sarva_stn       MACH_ESL_SARVA_STN  ESL_SARVA_STN       685
++esl_sarva_tft       MACH_ESL_SARVA_TFT  ESL_SARVA_TFT       686
++esl_sarva_iad       MACH_ESL_SARVA_IAD  ESL_SARVA_IAD       687
++esl_sarva_acc       MACH_ESL_SARVA_ACC  ESL_SARVA_ACC       688
++typhoon         MACH_TYPHOON        TYPHOON         689
++cnav            MACH_CNAV       CNAV            690
++a730            MACH_A730       A730            691
++netstar         MACH_NETSTAR        NETSTAR         692
++supercon        MACH_PHASEFALE_SUPERCON PHASEFALE_SUPERCON  693
++shiva1100       MACH_SHIVA1100      SHIVA1100       694
++etexsc          MACH_ETEXSC     ETEXSC          695
++ixdpg465        MACH_IXDPG465       IXDPG465        696
++a9m2410         MACH_A9M2410        A9M2410         697
++a9m2440         MACH_A9M2440        A9M2440         698
++a9m9750         MACH_A9M9750        A9M9750         699
++a9m9360         MACH_A9M9360        A9M9360         700
++unc90           MACH_UNC90      UNC90           701
++eco920          MACH_ECO920     ECO920          702
++satview         MACH_SATVIEW        SATVIEW         703
++roadrunner      MACH_ROADRUNNER     ROADRUNNER      704
++at91rm9200ek        MACH_AT91RM9200EK   AT91RM9200EK        705
++gp32            MACH_GP32       GP32            706
++gem         MACH_GEM        GEM         707
++i858            MACH_I858       I858            708
++hx2750          MACH_HX2750     HX2750          709
++mxc91131evb     MACH_MXC91131EVB    MXC91131EVB     710
++p700            MACH_P700       P700            711
++cpe         MACH_CPE        CPE         712
++spitz           MACH_SPITZ      SPITZ           713
++nimbra340       MACH_NIMBRA340      NIMBRA340       714
++lpc22xx         MACH_LPC22XX        LPC22XX         715
++omap_comet3     MACH_COMET3     COMET3          716
++omap_comet4     MACH_COMET4     COMET4          717
++csb625          MACH_CSB625     CSB625          718
++fortunet2       MACH_FORTUNET2      FORTUNET2       719
++s5h2200         MACH_S5H2200        S5H2200         720
++optorm920       MACH_OPTORM920      OPTORM920       721
++adsbitsyxb      MACH_ADSBITSYXB     ADSBITSYXB      722
++adssphere       MACH_ADSSPHERE      ADSSPHERE       723
++adsportal       MACH_ADSPORTAL      ADSPORTAL       724
++ln2410sbc       MACH_LN2410SBC      LN2410SBC       725
++cb3rufc         MACH_CB3RUFC        CB3RUFC         726
++mp2usb          MACH_MP2USB     MP2USB          727
++ntnp425c        MACH_NTNP425C       NTNP425C        728
++colibri         MACH_COLIBRI        COLIBRI         729
++pcm7220         MACH_PCM7220        PCM7220         730
++gateway7001     MACH_GATEWAY7001    GATEWAY7001     731
++pcm027          MACH_PCM027     PCM027          732
++cmpxa           MACH_CMPXA      CMPXA           733
++anubis          MACH_ANUBIS     ANUBIS          734
++ite8152         MACH_ITE8152        ITE8152         735
++lpc3xxx         MACH_LPC3XXX        LPC3XXX         736
++puppeteer       MACH_PUPPETEER      PUPPETEER       737
++e570            MACH_E570       E570            739
++x50         MACH_X50        X50         740
++recon           MACH_RECON      RECON           741
++xboardgp8       MACH_XBOARDGP8      XBOARDGP8       742
++fpic2           MACH_FPIC2      FPIC2           743
++akita           MACH_AKITA      AKITA           744
++a81         MACH_A81        A81         745
++svm_sc25x       MACH_SVM_SC25X      SVM_SC25X       746
++vt020           MACH_VADATECH020    VADATECH020     747
++tli         MACH_TLI        TLI         748
++edb9315lc       MACH_EDB9315LC      EDB9315LC       749
++passec          MACH_PASSEC     PASSEC          750
++ds_tiger        MACH_DS_TIGER       DS_TIGER        751
++e310            MACH_E310       E310            752
++e330            MACH_E330       E330            753
++rt3000          MACH_RT3000     RT3000          754
++nokia770        MACH_NOKIA770       NOKIA770        755
++pnx0106         MACH_PNX0106        PNX0106         756
++hx21xx          MACH_HX21XX     HX21XX          757
++faraday         MACH_FARADAY        FARADAY         758
++sbc9312         MACH_SBC9312        SBC9312         759
++batman          MACH_BATMAN     BATMAN          760
++jpd201          MACH_JPD201     JPD201          761
++mipsa           MACH_MIPSA      MIPSA           762
++kacom           MACH_KACOM      KACOM           763
++swarcocpu       MACH_SWARCOCPU      SWARCOCPU       764
++swarcodsl       MACH_SWARCODSL      SWARCODSL       765
++blueangel       MACH_BLUEANGEL      BLUEANGEL       766
++hairygrama      MACH_HAIRYGRAMA     HAIRYGRAMA      767
++banff           MACH_BANFF      BANFF           768
++carmeva         MACH_CARMEVA        CARMEVA         769
++sam255          MACH_SAM255     SAM255          770
++ppm10           MACH_PPM10      PPM10           771
++edb9315a        MACH_EDB9315A       EDB9315A        772
++sunset          MACH_SUNSET     SUNSET          773
++stargate2       MACH_STARGATE2      STARGATE2       774
++intelmote2      MACH_INTELMOTE2     INTELMOTE2      775
++trizeps4        MACH_TRIZEPS4       TRIZEPS4        776
++mainstone2      MACH_MAINSTONE2     MAINSTONE2      777
++ez_ixp42x       MACH_EZ_IXP42X      EZ_IXP42X       778
++tapwave_zodiac      MACH_TAPWAVE_ZODIAC TAPWAVE_ZODIAC      779
++universalmeter      MACH_UNIVERSALMETER UNIVERSALMETER      780
++hicoarm9        MACH_HICOARM9       HICOARM9        781
++pnx4008         MACH_PNX4008        PNX4008         782
++kws6000         MACH_KWS6000        KWS6000         783
++portux920t      MACH_PORTUX920T     PORTUX920T      784
++ez_x5           MACH_EZ_X5      EZ_X5           785
++omap_rudolph        MACH_OMAP_RUDOLPH   OMAP_RUDOLPH        786
++cpuat91         MACH_CPUAT91        CPUAT91         787
++rea9200         MACH_REA9200        REA9200         788
++acts_pune_sa1110    MACH_ACTS_PUNE_SA1110   ACTS_PUNE_SA1110    789
++ixp425          MACH_IXP425     IXP425          790
++i30030ads       MACH_I30030ADS      I30030ADS       791
++perch           MACH_PERCH      PERCH           792
++eis05r1         MACH_EIS05R1        EIS05R1         793
++pepperpad       MACH_PEPPERPAD      PEPPERPAD       794
++sb3010          MACH_SB3010     SB3010          795
++rm9200          MACH_RM9200     RM9200          796
++dma03           MACH_DMA03      DMA03           797
++road_s101       MACH_ROAD_S101      ROAD_S101       798
++iq81340sc       MACH_IQ81340SC      IQ81340SC       799
++iq_nextgen_b        MACH_IQ_NEXTGEN_B   IQ_NEXTGEN_B        800
++iq81340mc       MACH_IQ81340MC      IQ81340MC       801
++iq_nextgen_d        MACH_IQ_NEXTGEN_D   IQ_NEXTGEN_D        802
++iq_nextgen_e        MACH_IQ_NEXTGEN_E   IQ_NEXTGEN_E        803
++mallow_at91     MACH_MALLOW_AT91    MALLOW_AT91     804
++cybertracker_i      MACH_CYBERTRACKER_I CYBERTRACKER_I      805
++gesbc931x       MACH_GESBC931X      GESBC931X       806
++centipad        MACH_CENTIPAD       CENTIPAD        807
++armsoc          MACH_ARMSOC     ARMSOC          808
++se4200          MACH_SE4200     SE4200          809
++ems197a         MACH_EMS197A        EMS197A         810
++micro9          MACH_MICRO9     MICRO9          811
++micro9l         MACH_MICRO9L        MICRO9L         812
++uc5471dsp       MACH_UC5471DSP      UC5471DSP       813
++sj5471eng       MACH_SJ5471ENG      SJ5471ENG       814
++none            MACH_CMPXA26X       CMPXA26X        815
++nc1         MACH_NC         NC          816
++omap_palmte     MACH_OMAP_PALMTE    OMAP_PALMTE     817
++ajax52x         MACH_AJAX52X        AJAX52X         818
++siriustar       MACH_SIRIUSTAR      SIRIUSTAR       819
++iodata_hdlg     MACH_IODATA_HDLG    IODATA_HDLG     820
++at91rm9200utl       MACH_AT91RM9200UTL  AT91RM9200UTL       821
++biosafe         MACH_BIOSAFE        BIOSAFE         822
++mp1000          MACH_MP1000     MP1000          823
++parsy           MACH_PARSY      PARSY           824
++ccxp270         MACH_CCXP       CCXP            825
++omap_gsample        MACH_OMAP_GSAMPLE   OMAP_GSAMPLE        826
++realview_eb     MACH_REALVIEW_EB    REALVIEW_EB     827
++samoa           MACH_SAMOA      SAMOA           828
++palmt3          MACH_PALMT3     PALMT3          829
++i878            MACH_I878       I878            830
++borzoi          MACH_BORZOI     BORZOI          831
++gecko           MACH_GECKO      GECKO           832
++ds101           MACH_DS101      DS101           833
++omap_palmtt2        MACH_OMAP_PALMTT2   OMAP_PALMTT2        834
++palmld          MACH_PALMLD     PALMLD          835
++cc9c            MACH_CC9C       CC9C            836
++sbc1670         MACH_SBC1670        SBC1670         837
++ixdp28x5        MACH_IXDP28X5       IXDP28X5        838
++omap_palmtt     MACH_OMAP_PALMTT    OMAP_PALMTT     839
++ml696k          MACH_ML696K     ML696K          840
++arcom_zeus      MACH_ARCOM_ZEUS     ARCOM_ZEUS      841
++osiris          MACH_OSIRIS     OSIRIS          842
++maestro         MACH_MAESTRO        MAESTRO         843
++palmte2         MACH_PALMTE2        PALMTE2         844
++ixbbm           MACH_IXBBM      IXBBM           845
++mx27ads         MACH_MX27ADS        MX27ADS         846
++ax8004          MACH_AX8004     AX8004          847
++at91sam9261ek       MACH_AT91SAM9261EK  AT91SAM9261EK       848
++loft            MACH_LOFT       LOFT            849
++magpie          MACH_MAGPIE     MAGPIE          850
++mx21ads         MACH_MX21ADS        MX21ADS         851
++mb87m3400       MACH_MB87M3400      MB87M3400       852
++mguard_delta        MACH_MGUARD_DELTA   MGUARD_DELTA        853
++davinci_dvdp        MACH_DAVINCI_DVDP   DAVINCI_DVDP        854
++htcuniversal        MACH_HTCUNIVERSAL   HTCUNIVERSAL        855
++tpad            MACH_TPAD       TPAD            856
++roverp3         MACH_ROVERP3        ROVERP3         857
++jornada928      MACH_JORNADA928     JORNADA928      858
++mv88fxx81       MACH_MV88FXX81      MV88FXX81       859
++stmp36xx        MACH_STMP36XX       STMP36XX        860
++sxni79524       MACH_SXNI79524      SXNI79524       861
++ams_delta       MACH_AMS_DELTA      AMS_DELTA       862
++uranium         MACH_URANIUM        URANIUM         863
++ucon            MACH_UCON       UCON            864
++nas100d         MACH_NAS100D        NAS100D         865
++l083            MACH_L083_1000      L083_1000       866
++ezx         MACH_EZX        EZX         867
++pnx5220         MACH_PNX5220        PNX5220         868
++butte           MACH_BUTTE      BUTTE           869
++srm2            MACH_SRM2       SRM2            870
++dsbr            MACH_DSBR       DSBR            871
++crystalball     MACH_CRYSTALBALL    CRYSTALBALL     872
++tinypxa27x      MACH_TINYPXA27X     TINYPXA27X      873
++herbie          MACH_HERBIE     HERBIE          874
++magician        MACH_MAGICIAN       MAGICIAN        875
++cm4002          MACH_CM4002     CM4002          876
++b4          MACH_B4         B4          877
++maui            MACH_MAUI       MAUI            878
++cybertracker_g      MACH_CYBERTRACKER_G CYBERTRACKER_G      879
++nxdkn           MACH_NXDKN      NXDKN           880
++mio8390         MACH_MIO8390        MIO8390         881
++omi_board       MACH_OMI_BOARD      OMI_BOARD       882
++mx21civ         MACH_MX21CIV        MX21CIV         883
++mahi_cdac       MACH_MAHI_CDAC      MAHI_CDAC       884
++palmtx          MACH_PALMTX     PALMTX          885
++s3c2413         MACH_S3C2413        S3C2413         887
++samsys_ep0      MACH_SAMSYS_EP0     SAMSYS_EP0      888
++wg302v1         MACH_WG302V1        WG302V1         889
++wg302v2         MACH_WG302V2        WG302V2         890
++eb42x           MACH_EB42X      EB42X           891
++iq331es         MACH_IQ331ES        IQ331ES         892
++cosydsp         MACH_COSYDSP        COSYDSP         893
++uplat7d_proto       MACH_UPLAT7D        UPLAT7D         894
++ptdavinci       MACH_PTDAVINCI      PTDAVINCI       895
++mbus            MACH_MBUS       MBUS            896
++nadia2vb        MACH_NADIA2VB       NADIA2VB        897
++r1000           MACH_R1000      R1000           898
++hw90250         MACH_HW90250        HW90250         899
++omap_2430sdp        MACH_OMAP_2430SDP   OMAP_2430SDP        900
++davinci_evm     MACH_DAVINCI_EVM    DAVINCI_EVM     901
++omap_tornado        MACH_OMAP_TORNADO   OMAP_TORNADO        902
++olocreek        MACH_OLOCREEK       OLOCREEK        903
++palmz72         MACH_PALMZ72        PALMZ72         904
++nxdb500         MACH_NXDB500        NXDB500         905
++apf9328         MACH_APF9328        APF9328         906
++omap_wipoq      MACH_OMAP_WIPOQ     OMAP_WIPOQ      907
++omap_twip       MACH_OMAP_TWIP      OMAP_TWIP       908
++treo650         MACH_TREO650        TREO650         909
++acumen          MACH_ACUMEN     ACUMEN          910
++xp100           MACH_XP100      XP100           911
++fs2410          MACH_FS2410     FS2410          912
++pxa270_cerf     MACH_PXA270_CERF    PXA270_CERF     913
++sq2ftlpalm      MACH_SQ2FTLPALM     SQ2FTLPALM      914
++bsemserver      MACH_BSEMSERVER     BSEMSERVER      915
++netclient       MACH_NETCLIENT      NETCLIENT       916
++palmt5          MACH_PALMT5     PALMT5          917
++palmtc          MACH_PALMTC     PALMTC          918
++omap_apollon        MACH_OMAP_APOLLON   OMAP_APOLLON        919
++mxc30030evb     MACH_MXC30030EVB    MXC30030EVB     920
++rea_cpu2        MACH_REA_2D     REA_2D          921
++eti3e524        MACH_TI3E524        TI3E524         922
++ateb9200        MACH_ATEB9200       ATEB9200        923
++auckland        MACH_AUCKLAND       AUCKLAND        924
++ak3220m         MACH_AK3320M        AK3320M         925
++duramax         MACH_DURAMAX        DURAMAX         926
++n35         MACH_N35        N35         927
++pronghorn       MACH_PRONGHORN      PRONGHORN       928
++fundy           MACH_FUNDY      FUNDY           929
++logicpd_pxa270      MACH_LOGICPD_PXA270 LOGICPD_PXA270      930
++cpu777          MACH_CPU777     CPU777          931
++simicon9201     MACH_SIMICON9201    SIMICON9201     932
++leap2_hpm       MACH_LEAP2_HPM      LEAP2_HPM       933
++cm922txa10      MACH_CM922TXA10     CM922TXA10      934
++sandgate        MACH_PXA        PXA         935
++sandgate2       MACH_SANDGATE2      SANDGATE2       936
++sandgate2g      MACH_SANDGATE2G     SANDGATE2G      937
++sandgate2p      MACH_SANDGATE2P     SANDGATE2P      938
++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
++ng_fvx538       MACH_NG_FVX538      NG_FVX538       944
++ng_fvs338       MACH_NG_FVS338      NG_FVS338       945
++pnx4103         MACH_PNX4103        PNX4103         946
++hesdb           MACH_HESDB      HESDB           947
++xsilo           MACH_XSILO      XSILO           948
++espresso        MACH_ESPRESSO       ESPRESSO        949
++emlc            MACH_EMLC       EMLC            950
++sisteron        MACH_SISTERON       SISTERON        951
++rx1950          MACH_RX1950     RX1950          952
++tsc_venus       MACH_TSC_VENUS      TSC_VENUS       953
++ds101j          MACH_DS101J     DS101J          954
++mxc30030ads     MACH_MXC30030ADS    MXC30030ADS     955
++fujitsu_wimaxsoc    MACH_FUJITSU_WIMAXSOC   FUJITSU_WIMAXSOC    956
++dualpcmodem     MACH_DUALPCMODEM    DUALPCMODEM     957
++gesbc9312       MACH_GESBC9312      GESBC9312       958
++htcapache       MACH_HTCAPACHE      HTCAPACHE       959
++ixdp435         MACH_IXDP435        IXDP435         960
++catprovt100     MACH_CATPROVT100    CATPROVT100     961
++picotux1xx      MACH_PICOTUX1XX     PICOTUX1XX      962
++picotux2xx      MACH_PICOTUX2XX     PICOTUX2XX      963
++dsmg600         MACH_DSMG600        DSMG600         964
++empc2           MACH_EMPC2      EMPC2           965
++ventura         MACH_VENTURA        VENTURA         966
++phidget_sbc     MACH_PHIDGET_SBC    PHIDGET_SBC     967
++ij3k            MACH_IJ3K       IJ3K            968
++pisgah          MACH_PISGAH     PISGAH          969
++omap_fsample        MACH_OMAP_FSAMPLE   OMAP_FSAMPLE        970
++sg720           MACH_SG720      SG720           971
++redfox          MACH_REDFOX     REDFOX          972
++mysh_ep9315_1       MACH_MYSH_EP9315_1  MYSH_EP9315_1       973
++tpf106          MACH_TPF106     TPF106          974
++at91rm9200kg        MACH_AT91RM9200KG   AT91RM9200KG        975
++rcmt2           MACH_SLEDB      SLEDB           976
++ontrack         MACH_ONTRACK        ONTRACK         977
++pm1200          MACH_PM1200     PM1200          978
++ess24562        MACH_ESS24XXX       ESS24XXX        979
++coremp7         MACH_COREMP7        COREMP7         980
++nexcoder_6446       MACH_NEXCODER_6446  NEXCODER_6446       981
++stvc8380        MACH_STVC8380       STVC8380        982
++teklynx         MACH_TEKLYNX        TEKLYNX         983
++carbonado       MACH_CARBONADO      CARBONADO       984
++sysmos_mp730        MACH_SYSMOS_MP730   SYSMOS_MP730        985
++snapper_cl15        MACH_SNAPPER_CL15   SNAPPER_CL15        986
++pgigim          MACH_PGIGIM     PGIGIM          987
++ptx9160p2       MACH_PTX9160P2      PTX9160P2       988
++dcore1          MACH_DCORE1     DCORE1          989
++victorpxa       MACH_VICTORPXA      VICTORPXA       990
++mx2dtb          MACH_MX2DTB     MX2DTB          991
++pxa_irex_er0100     MACH_PXA_IREX_ER0100    PXA_IREX_ER0100     992
++omap_palmz71        MACH_OMAP_PALMZ71   OMAP_PALMZ71        993
++bartec_deg      MACH_BARTEC_DEG     BARTEC_DEG      994
++hw50251         MACH_HW50251        HW50251         995
++ibox            MACH_IBOX       IBOX            996
++atlaslh7a404        MACH_ATLASLH7A404   ATLASLH7A404        997
++pt2026          MACH_PT2026     PT2026          998
++htcalpine       MACH_HTCALPINE      HTCALPINE       999
++bartec_vtu      MACH_BARTEC_VTU     BARTEC_VTU      1000
++vcoreii         MACH_VCOREII        VCOREII         1001
++pdnb3           MACH_PDNB3      PDNB3           1002
++htcbeetles      MACH_HTCBEETLES     HTCBEETLES      1003
++s3c6400         MACH_S3C6400        S3C6400         1004
++s3c2443         MACH_S3C2443        S3C2443         1005
++omap_ldk        MACH_OMAP_LDK       OMAP_LDK        1006
++smdk2460        MACH_SMDK2460       SMDK2460        1007
++smdk2440        MACH_SMDK2440       SMDK2440        1008
++smdk2412        MACH_SMDK2412       SMDK2412        1009
++webbox          MACH_WEBBOX     WEBBOX          1010
++cwwndp          MACH_CWWNDP     CWWNDP          1011
++i839            MACH_DRAGON     DRAGON          1012
++opendo_cpu_board    MACH_OPENDO_CPU_BOARD   OPENDO_CPU_BOARD    1013
++ccm2200         MACH_CCM2200        CCM2200         1014
++etwarm          MACH_ETWARM     ETWARM          1015
++m93030          MACH_M93030     M93030          1016
++cc7u            MACH_CC7U       CC7U            1017
++mtt_ranger      MACH_MTT_RANGER     MTT_RANGER      1018
++nexus           MACH_NEXUS      NEXUS           1019
++desman          MACH_DESMAN     DESMAN          1020
++bkde303         MACH_BKDE303        BKDE303         1021
++smdk2413        MACH_SMDK2413       SMDK2413        1022
++aml_m7200       MACH_AML_M7200      AML_M7200       1023
++aml_m5900       MACH_AML_M5900      AML_M5900       1024
++sg640           MACH_SG640      SG640           1025
++edg79524        MACH_EDG79524       EDG79524        1026
++ai2410          MACH_AI2410     AI2410          1027
++ixp465          MACH_IXP465     IXP465          1028
++balloon3        MACH_BALLOON3       BALLOON3        1029
++heins           MACH_HEINS      HEINS           1030
++mpluseva        MACH_MPLUSEVA       MPLUSEVA        1031
++rt042           MACH_RT042      RT042           1032
++cwiem           MACH_CWIEM      CWIEM           1033
++cm_x270         MACH_CM_X270        CM_X270         1034
++cm_x255         MACH_CM_X255        CM_X255         1035
++esh_at91        MACH_ESH_AT91       ESH_AT91        1036
++sandgate3       MACH_SANDGATE3      SANDGATE3       1037
++primo           MACH_PRIMO      PRIMO           1038
++gemstone        MACH_GEMSTONE       GEMSTONE        1039
++pronghorn_metro     MACH_PRONGHORNMETRO PRONGHORNMETRO      1040
++sidewinder      MACH_SIDEWINDER     SIDEWINDER      1041
++picomod1        MACH_PICOMOD1       PICOMOD1        1042
++sg590           MACH_SG590      SG590           1043
++akai9307        MACH_AKAI9307       AKAI9307        1044
++fontaine        MACH_FONTAINE       FONTAINE        1045
++wombat          MACH_WOMBAT     WOMBAT          1046
++acq300          MACH_ACQ300     ACQ300          1047
++mod272          MACH_MOD_270        MOD_270         1048
++vmc_vc0820      MACH_VC0820     VC0820          1049
++ani_aim         MACH_ANI_AIM        ANI_AIM         1050
++jellyfish       MACH_JELLYFISH      JELLYFISH       1051
++amanita         MACH_AMANITA        AMANITA         1052
++vlink           MACH_VLINK      VLINK           1053
++dexflex         MACH_DEXFLEX        DEXFLEX         1054
++eigen_ttq       MACH_EIGEN_TTQ      EIGEN_TTQ       1055
++arcom_titan     MACH_ARCOM_TITAN    ARCOM_TITAN     1056
++tabla           MACH_TABLA      TABLA           1057
++mdirac3         MACH_MDIRAC3        MDIRAC3         1058
++mrhfbp2         MACH_MRHFBP2        MRHFBP2         1059
++at91rm9200rb        MACH_AT91RM9200RB   AT91RM9200RB        1060
++ani_apm         MACH_ANI_APM        ANI_APM         1061
++ella1           MACH_ELLA1      ELLA1           1062
++inhand_pxa27x       MACH_INHAND_PXA27X  INHAND_PXA27X       1063
++inhand_pxa25x       MACH_INHAND_PXA25X  INHAND_PXA25X       1064
++empos_xm        MACH_EMPOS_XM       EMPOS_XM        1065
++empos           MACH_EMPOS      EMPOS           1066
++empos_tiny      MACH_EMPOS_TINY     EMPOS_TINY      1067
++empos_sm        MACH_EMPOS_SM       EMPOS_SM        1068
++egret           MACH_EGRET      EGRET           1069
++ostrich         MACH_OSTRICH        OSTRICH         1070
++n50         MACH_N50        N50         1071
++ecbat91         MACH_ECBAT91        ECBAT91         1072
++stareast        MACH_STAREAST       STAREAST        1073
++dspg_dw         MACH_DSPG_DW        DSPG_DW         1074
++onearm          MACH_ONEARM     ONEARM          1075
++mrg110_6        MACH_MRG110_6       MRG110_6        1076
++wrt300nv2       MACH_WRT300NV2      WRT300NV2       1077
++xm_bulverde     MACH_XM_BULVERDE    XM_BULVERDE     1078
++msm6100         MACH_MSM6100        MSM6100         1079
++eti_b1          MACH_ETI_B1     ETI_B1          1080
++za9l_series     MACH_ZILOG_ZA9L     ZILOG_ZA9L      1081
++bit2440         MACH_BIT2440        BIT2440         1082
++nbi         MACH_NBI        NBI         1083
++smdk2443        MACH_SMDK2443       SMDK2443        1084
++vdavinci        MACH_VDAVINCI       VDAVINCI        1085
++atc6            MACH_ATC6       ATC6            1086
++multmdw         MACH_MULTMDW        MULTMDW         1087
++mba2440         MACH_MBA2440        MBA2440         1088
++ecsd            MACH_ECSD       ECSD            1089
++palmz31         MACH_PALMZ31        PALMZ31         1090
++fsg         MACH_FSG        FSG         1091
++razor101        MACH_RAZOR101       RAZOR101        1092
++opera_tdm       MACH_OPERA_TDM      OPERA_TDM       1093
++comcerto        MACH_COMCERTO       COMCERTO        1094
++tb0319          MACH_TB0319     TB0319          1095
++kws8000         MACH_KWS8000        KWS8000         1096
++b2          MACH_B2         B2          1097
++lcl54           MACH_LCL54      LCL54           1098
++at91sam9260ek       MACH_AT91SAM9260EK  AT91SAM9260EK       1099
++glantank        MACH_GLANTANK       GLANTANK        1100
++n2100           MACH_N2100      N2100           1101
++n4100           MACH_N4100      N4100           1102
++rsc4            MACH_VERTICAL_RSC4  VERTICAL_RSC4       1103
++sg8100          MACH_SG8100     SG8100          1104
++im42xx          MACH_IM42XX     IM42XX          1105
++ftxx            MACH_FTXX       FTXX            1106
++lwfusion        MACH_LWFUSION       LWFUSION        1107
++qt2410          MACH_QT2410     QT2410          1108
++kixrp435        MACH_KIXRP435       KIXRP435        1109
++ccw9c           MACH_CCW9C      CCW9C           1110
++dabhs           MACH_DABHS      DABHS           1111
++gzmx            MACH_GZMX       GZMX            1112
++ipnw100ap       MACH_IPNW100AP      IPNW100AP       1113
++cc9p9360dev     MACH_CC9P9360DEV    CC9P9360DEV     1114
++cc9p9750dev     MACH_CC9P9750DEV    CC9P9750DEV     1115
++cc9p9360val     MACH_CC9P9360VAL    CC9P9360VAL     1116
++cc9p9750val     MACH_CC9P9750VAL    CC9P9750VAL     1117
++nx70v           MACH_NX70V      NX70V           1118
++at91rm9200df        MACH_AT91RM9200DF   AT91RM9200DF        1119
++se_pilot2       MACH_SE_PILOT2      SE_PILOT2       1120
++mtcn_t800       MACH_MTCN_T800      MTCN_T800       1121
++vcmx212         MACH_VCMX212        VCMX212         1122
++lynx            MACH_LYNX       LYNX            1123
++at91sam9260id       MACH_AT91SAM9260ID  AT91SAM9260ID       1124
++hw86052         MACH_HW86052        HW86052         1125
++pilz_pmi3       MACH_PILZ_PMI3      PILZ_PMI3       1126
++edb9302a        MACH_EDB9302A       EDB9302A        1127
++edb9307a        MACH_EDB9307A       EDB9307A        1128
++ct_dfs          MACH_CT_DFS     CT_DFS          1129
++pilz_pmi4       MACH_PILZ_PMI4      PILZ_PMI4       1130
++xceednp_ixp     MACH_XCEEDNP_IXP    XCEEDNP_IXP     1131
++smdk2442b       MACH_SMDK2442B      SMDK2442B       1132
++xnode           MACH_XNODE      XNODE           1133
++aidx270         MACH_AIDX270        AIDX270         1134
++rema            MACH_REMA       REMA            1135
++bps1000         MACH_BPS1000        BPS1000         1136
++hw90350         MACH_HW90350        HW90350         1137
++omap_3430sdp        MACH_OMAP_3430SDP   OMAP_3430SDP        1138
++bluetouch       MACH_BLUETOUCH      BLUETOUCH       1139
++vstms           MACH_VSTMS      VSTMS           1140
++xsbase270       MACH_XSBASE270      XSBASE270       1141
++at91sam9260ek_cn    MACH_AT91SAM9260EK_CN   AT91SAM9260EK_CN    1142
++adsturboxb      MACH_ADSTURBOXB     ADSTURBOXB      1143
++oti4110         MACH_OTI4110        OTI4110         1144
++hme_pxa         MACH_HME_PXA        HME_PXA         1145
++deisterdca      MACH_DEISTERDCA     DEISTERDCA      1146
++ces_ssem2       MACH_CES_SSEM2      CES_SSEM2       1147
++ces_mtr         MACH_CES_MTR        CES_MTR         1148
++tds_avng_sbc        MACH_TDS_AVNG_SBC   TDS_AVNG_SBC        1149
++everest         MACH_EVEREST        EVEREST         1150
++pnx4010         MACH_PNX4010        PNX4010         1151
++oxnas           MACH_OXNAS      OXNAS           1152
++fiori           MACH_FIORI      FIORI           1153
++ml1200          MACH_ML1200     ML1200          1154
++pecos           MACH_PECOS      PECOS           1155
++nb2xxx          MACH_NB2XXX     NB2XXX          1156
++hw6900          MACH_HW6900     HW6900          1157
++cdcs_quoll      MACH_CDCS_QUOLL     CDCS_QUOLL      1158
++quicksilver     MACH_QUICKSILVER    QUICKSILVER     1159
++uplat926        MACH_UPLAT926       UPLAT926        1160
++dep2410_dep2410     MACH_DEP2410_THOMAS DEP2410_THOMAS      1161
++dtk2410         MACH_DTK2410        DTK2410         1162
++chili           MACH_CHILI      CHILI           1163
++demeter         MACH_DEMETER        DEMETER         1164
++dionysus        MACH_DIONYSUS       DIONYSUS        1165
++as352x          MACH_AS352X     AS352X          1166
++service         MACH_SERVICE        SERVICE         1167
++cs_e9301        MACH_CS_E9301       CS_E9301        1168
++micro9m         MACH_MICRO9M        MICRO9M         1169
++ia_mospck       MACH_IA_MOSPCK      IA_MOSPCK       1170
++ql201b          MACH_QL201B     QL201B          1171
++bbm         MACH_BBM        BBM         1174
++exxx            MACH_EXXX       EXXX            1175
++wma11b          MACH_WMA11B     WMA11B          1176
++pelco_atlas     MACH_PELCO_ATLAS    PELCO_ATLAS     1177
++g500            MACH_G500       G500            1178
++bug         MACH_BUG        BUG         1179
++mx33ads         MACH_MX33ADS        MX33ADS         1180
++chub            MACH_CHUB       CHUB            1181
++neo1973_gta01       MACH_NEO1973_GTA01  NEO1973_GTA01       1182
++w90n740         MACH_W90N740        W90N740         1183
++medallion_sa2410    MACH_MEDALLION_SA2410   MEDALLION_SA2410    1184
++ia_cpu_9200_2       MACH_IA_CPU_9200_2  IA_CPU_9200_2       1185
++dimmrm9200      MACH_DIMMRM9200     DIMMRM9200      1186
++pm9261          MACH_PM9261     PM9261          1187
++ml7304          MACH_ML7304     ML7304          1189
++ucp250          MACH_UCP250     UCP250          1190
++intboard        MACH_INTBOARD       INTBOARD        1191
++gulfstream      MACH_GULFSTREAM     GULFSTREAM      1192
++labquest        MACH_LABQUEST       LABQUEST        1193
++vcmx313         MACH_VCMX313        VCMX313         1194
++urg200          MACH_URG200     URG200          1195
++cpux255lcdnet       MACH_CPUX255LCDNET  CPUX255LCDNET       1196
++netdcu9         MACH_NETDCU9        NETDCU9         1197
++netdcu10        MACH_NETDCU10       NETDCU10        1198
++dspg_dga        MACH_DSPG_DGA       DSPG_DGA        1199
++dspg_dvw        MACH_DSPG_DVW       DSPG_DVW        1200
++solos           MACH_SOLOS      SOLOS           1201
++at91sam9263ek       MACH_AT91SAM9263EK  AT91SAM9263EK       1202
++osstbox         MACH_OSSTBOX        OSSTBOX         1203
++kbat9261        MACH_KBAT9261       KBAT9261        1204
++ct1100          MACH_CT1100     CT1100          1205
++akcppxa         MACH_AKCPPXA        AKCPPXA         1206
++ochaya1020      MACH_OCHAYA1020     OCHAYA1020      1207
++hitrack         MACH_HITRACK        HITRACK         1208
++syme1           MACH_SYME1      SYME1           1209
++syhl1           MACH_SYHL1      SYHL1           1210
++empca400        MACH_EMPCA400       EMPCA400        1211
++em7210          MACH_EM7210     EM7210          1212
++htchermes       MACH_HTCHERMES      HTCHERMES       1213
++eti_c1          MACH_ETI_C1     ETI_C1          1214
++ac100           MACH_AC100      AC100           1216
++sneetch         MACH_SNEETCH        SNEETCH         1217
++studentmate     MACH_STUDENTMATE    STUDENTMATE     1218
++zir2410         MACH_ZIR2410        ZIR2410         1219
++zir2413         MACH_ZIR2413        ZIR2413         1220
++dlonip3         MACH_DLONIP3        DLONIP3         1221
++instream        MACH_INSTREAM       INSTREAM        1222
++ambarella       MACH_AMBARELLA      AMBARELLA       1223
++nevis           MACH_NEVIS      NEVIS           1224
++htc_trinity     MACH_HTC_TRINITY    HTC_TRINITY     1225
++ql202b          MACH_QL202B     QL202B          1226
++vpac270         MACH_VPAC270        VPAC270         1227
++rd129           MACH_RD129      RD129           1228
++htcwizard       MACH_HTCWIZARD      HTCWIZARD       1229
++treo680         MACH_TREO680        TREO680         1230
++tecon_tmezon        MACH_TECON_TMEZON   TECON_TMEZON        1231
++zylonite        MACH_ZYLONITE       ZYLONITE        1233
++gene1270        MACH_GENE1270       GENE1270        1234
++zir2412         MACH_ZIR2412        ZIR2412         1235
++mx31lite        MACH_MX31LITE       MX31LITE        1236
++t700wx          MACH_T700WX     T700WX          1237
++vf100           MACH_VF100      VF100           1238
++nsb2            MACH_NSB2       NSB2            1239
++nxhmi_bb        MACH_NXHMI_BB       NXHMI_BB        1240
++nxhmi_re        MACH_NXHMI_RE       NXHMI_RE        1241
++n4100pro        MACH_N4100PRO       N4100PRO        1242
++sam9260         MACH_SAM9260        SAM9260         1243
++omap_treo600        MACH_OMAP_TREO600   OMAP_TREO600        1244
++indy2410        MACH_INDY2410       INDY2410        1245
++nelt_a          MACH_NELT_A     NELT_A          1246
++n311            MACH_N311       N311            1248
++at91sam9260vgk      MACH_AT91SAM9260VGK AT91SAM9260VGK      1249
++at91leppe       MACH_AT91LEPPE      AT91LEPPE       1250
++at91lepccn      MACH_AT91LEPCCN     AT91LEPCCN      1251
++apc7100         MACH_APC7100        APC7100         1252
++stargazer       MACH_STARGAZER      STARGAZER       1253
++sonata          MACH_SONATA     SONATA          1254
++schmoogie       MACH_SCHMOOGIE      SCHMOOGIE       1255
++aztool          MACH_AZTOOL     AZTOOL          1256
++mioa701         MACH_MIOA701        MIOA701         1257
++sxni9260        MACH_SXNI9260       SXNI9260        1258
++mxc27520evb     MACH_MXC27520EVB    MXC27520EVB     1259
++armadillo5x0        MACH_ARMADILLO5X0   ARMADILLO5X0        1260
++mb9260          MACH_MB9260     MB9260          1261
++mb9263          MACH_MB9263     MB9263          1262
++ipac9302        MACH_IPAC9302       IPAC9302        1263
++cc9p9360js      MACH_CC9P9360JS     CC9P9360JS      1264
++gallium         MACH_GALLIUM        GALLIUM         1265
++msc2410         MACH_MSC2410        MSC2410         1266
++ghi270          MACH_GHI270     GHI270          1267
++davinci_leonardo    MACH_DAVINCI_LEONARDO   DAVINCI_LEONARDO    1268
++oiab            MACH_OIAB       OIAB            1269
++smdk6400        MACH_SMDK6400       SMDK6400        1270
++nokia_n800      MACH_NOKIA_N800     NOKIA_N800      1271
++greenphone      MACH_GREENPHONE     GREENPHONE      1272
++compex42x       MACH_COMPEXWP18     COMPEXWP18      1273
++xmate           MACH_XMATE      XMATE           1274
++energizer       MACH_ENERGIZER      ENERGIZER       1275
++ime1            MACH_IME1       IME1            1276
++sweda_tms       MACH_SWEDATMS       SWEDATMS        1277
++ntnp435c        MACH_NTNP435C       NTNP435C        1278
++spectro2        MACH_SPECTRO2       SPECTRO2        1279
++h6039           MACH_H6039      H6039           1280
++ep80219         MACH_EP80219        EP80219         1281
++samoa_ii        MACH_SAMOA_II       SAMOA_II        1282
++cwmxl           MACH_CWMXL      CWMXL           1283
++as9200          MACH_AS9200     AS9200          1284
++sfx1149         MACH_SFX1149        SFX1149         1285
++navi010         MACH_NAVI010        NAVI010         1286
++multmdp         MACH_MULTMDP        MULTMDP         1287
++scb9520         MACH_SCB9520        SCB9520         1288
++htcathena       MACH_HTCATHENA      HTCATHENA       1289
++xp179           MACH_XP179      XP179           1290
++h4300           MACH_H4300      H4300           1291
++goramo_mlr      MACH_GORAMO_MLR     GORAMO_MLR      1292
++mxc30020evb     MACH_MXC30020EVB    MXC30020EVB     1293
++adsbitsyg5      MACH_ADSBITSYG5     ADSBITSYG5      1294
++adsportalplus       MACH_ADSPORTALPLUS  ADSPORTALPLUS       1295
++mmsp2plus       MACH_MMSP2PLUS      MMSP2PLUS       1296
++em_x270         MACH_EM_X270        EM_X270         1297
++tpp302          MACH_TPP302     TPP302          1298
++tpp104          MACH_TPM104     TPM104          1299
++tpm102          MACH_TPM102     TPM102          1300
++tpm109          MACH_TPM109     TPM109          1301
++fbxo1           MACH_FBXO1      FBXO1           1302
++hxd8            MACH_HXD8       HXD8            1303
++neo1973_gta02       MACH_NEO1973_GTA02  NEO1973_GTA02       1304
++emtest          MACH_EMTEST     EMTEST          1305
++ad6900          MACH_AD6900     AD6900          1306
++europa          MACH_EUROPA     EUROPA          1307
++metroconnect        MACH_METROCONNECT   METROCONNECT        1308
++ez_s2410        MACH_EZ_S2410       EZ_S2410        1309
++ez_s2440        MACH_EZ_S2440       EZ_S2440        1310
++ez_ep9312       MACH_EZ_EP9312      EZ_EP9312       1311
++ez_ep9315       MACH_EZ_EP9315      EZ_EP9315       1312
++ez_x7           MACH_EZ_X7      EZ_X7           1313
++godotdb         MACH_GODOTDB        GODOTDB         1314
++mistral         MACH_MISTRAL        MISTRAL         1315
++msm         MACH_MSM        MSM         1316
++ct5910          MACH_CT5910     CT5910          1317
++ct5912          MACH_CT5912     CT5912          1318
++hynet_ine       MACH_HYNET_INE      HYNET_INE       1319
++hynet_app       MACH_HYNET_APP      HYNET_APP       1320
++msm7200         MACH_MSM7200        MSM7200         1321
++msm7600         MACH_MSM7600        MSM7600         1322
++ceb255          MACH_CEB255     CEB255          1323
++ciel            MACH_CIEL       CIEL            1324
++slm5650         MACH_SLM5650        SLM5650         1325
++at91sam9rlek        MACH_AT91SAM9RLEK   AT91SAM9RLEK        1326
++comtech_router      MACH_COMTECH_ROUTER COMTECH_ROUTER      1327
++sbc2410x        MACH_SBC2410X       SBC2410X        1328
++at4x0bd         MACH_AT4X0BD        AT4X0BD         1329
++cbifr           MACH_CBIFR      CBIFR           1330
++arcom_quantum       MACH_ARCOM_QUANTUM  ARCOM_QUANTUM       1331
++matrix520       MACH_MATRIX520      MATRIX520       1332
++matrix510       MACH_MATRIX510      MATRIX510       1333
++matrix500       MACH_MATRIX500      MATRIX500       1334
++m501            MACH_M501       M501            1335
++aaeon1270       MACH_AAEON1270      AAEON1270       1336
++matrix500ev     MACH_MATRIX500EV    MATRIX500EV     1337
++pac500          MACH_PAC500     PAC500          1338
++pnx8181         MACH_PNX8181        PNX8181         1339
++colibri320      MACH_COLIBRI320     COLIBRI320      1340
++aztoolbb        MACH_AZTOOLBB       AZTOOLBB        1341
++aztoolg2        MACH_AZTOOLG2       AZTOOLG2        1342
++dvlhost         MACH_DVLHOST        DVLHOST         1343
++zir9200         MACH_ZIR9200        ZIR9200         1344
++zir9260         MACH_ZIR9260        ZIR9260         1345
++cocopah         MACH_COCOPAH        COCOPAH         1346
++nds         MACH_NDS        NDS         1347
++rosencrantz     MACH_ROSENCRANTZ    ROSENCRANTZ     1348
++fttx_odsc       MACH_FTTX_ODSC      FTTX_ODSC       1349
++classe_r6904        MACH_CLASSE_R6904   CLASSE_R6904        1350
++cam60           MACH_CAM60      CAM60           1351
++mxc30031ads     MACH_MXC30031ADS    MXC30031ADS     1352
++datacall        MACH_DATACALL       DATACALL        1353
++at91eb01        MACH_AT91EB01       AT91EB01        1354
++rty         MACH_RTY        RTY         1355
++dwl2100         MACH_DWL2100        DWL2100         1356
++vinsi           MACH_VINSI      VINSI           1357
++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
++adx_abox        MACH_ADX_ABOX       ADX_ABOX        1365
++adx_tpid        MACH_ADX_TPID       ADX_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_DM355_EVM  DAVINCI_DM355_EVM   1381
++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
++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
++treo700p        MACH_TREO700P       TREO700P        1421
++treo700w        MACH_TREO700W       TREO700W        1422
++treo750         MACH_TREO750        TREO750         1423
++treo755p        MACH_TREO755P       TREO755P        1424
++ezreganut9200       MACH_EZREGANUT9200  EZREGANUT9200       1425
++sarge           MACH_SARGE      SARGE           1426
++a696            MACH_A696       A696            1427
++turtle1916      MACH_TURTLE     TURTLE          1428
++mx27_3ds        MACH_MX27_3DS       MX27_3DS        1430
++bishop          MACH_BISHOP     BISHOP          1431
++pxx         MACH_PXX        PXX         1432
++redwood         MACH_REDWOOD        REDWOOD         1433
++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_HERALD     HERALD          1461
++artemis         MACH_ARTEMIS        ARTEMIS         1462
++htctitan        MACH_HTCTITAN       HTCTITAN        1463
++qranium         MACH_QRANIUM        QRANIUM         1464
++adx_wsc2        MACH_ADX_WSC2       ADX_WSC2        1465
++adx_medcom      MACH_ADX_MEDCOM     ADX_MEDCOM      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
++tll5000         MACH_TLL5000        TLL5000         1522
++bebot           MACH_BEBOT      BEBOT           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
++adx_pcu57       MACH_ADX_PCU57      ADX_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
++nokia_n810      MACH_NOKIA_N810     NOKIA_N810      1548
++c270            MACH_C270       C270            1549
++sentry          MACH_SENTRY     SENTRY          1550
++pcm038          MACH_PCM038     PCM038          1551
++anc300          MACH_ANC300     ANC300          1552
++htckaiser       MACH_HTCKAISER      HTCKAISER       1553
++sbat100         MACH_SBAT100        SBAT100         1554
++modunorm        MACH_MODUNORM       MODUNORM        1555
++pelos_twarm     MACH_PELOS_TWARM    PELOS_TWARM     1556
++flank           MACH_FLANK      FLANK           1557
++sirloin         MACH_SIRLOIN        SIRLOIN         1558
++brisket         MACH_BRISKET        BRISKET         1559
++chuck           MACH_CHUCK      CHUCK           1560
++otter           MACH_OTTER      OTTER           1561
++davinci_ldk     MACH_DAVINCI_LDK    DAVINCI_LDK     1562
++phreedom        MACH_PHREEDOM       PHREEDOM        1563
++sg310           MACH_SG310      SG310           1564
++ts_x09          MACH_TS209      TS209           1565
++at91cap9adk     MACH_AT91CAP9ADK    AT91CAP9ADK     1566
++tion9315        MACH_TION9315       TION9315        1567
++mast            MACH_MAST       MAST            1568
++pfw         MACH_PFW        PFW         1569
++yl_p2440        MACH_YL_P2440       YL_P2440        1570
++zsbc32          MACH_ZSBC32     ZSBC32          1571
++omap_pace2      MACH_OMAP_PACE2     OMAP_PACE2      1572
++imx_pace2       MACH_IMX_PACE2      IMX_PACE2       1573
++mx31moboard     MACH_MX31MOBOARD    MX31MOBOARD     1574
++mx37_3ds        MACH_MX37_3DS       MX37_3DS        1575
++rcc         MACH_RCC        RCC         1576
++dmp         MACH_ARM9       ARM9            1577
++vision_ep9307       MACH_VISION_EP9307  VISION_EP9307       1578
++scly1000        MACH_SCLY1000       SCLY1000        1579
++fontel_ep       MACH_FONTEL_EP      FONTEL_EP       1580
++voiceblue3g     MACH_VOICEBLUE3G    VOICEBLUE3G     1581
++tt9200          MACH_TT9200     TT9200          1582
++digi2410        MACH_DIGI2410       DIGI2410        1583
++terastation_pro2    MACH_TERASTATION_PRO2   TERASTATION_PRO2    1584
++linkstation_pro     MACH_LINKSTATION_PRO    LINKSTATION_PRO     1585
++motorola_a780       MACH_MOTOROLA_A780  MOTOROLA_A780       1587
++motorola_e6     MACH_MOTOROLA_E6    MOTOROLA_E6     1588
++motorola_e2     MACH_MOTOROLA_E2    MOTOROLA_E2     1589
++motorola_e680       MACH_MOTOROLA_E680  MOTOROLA_E680       1590
++ur2410          MACH_UR2410     UR2410          1591
++tas9261         MACH_TAS9261        TAS9261         1592
++davinci_hermes_hd   MACH_HERMES_HD      HERMES_HD       1593
++davinci_perseo_hd   MACH_PERSEO_HD      PERSEO_HD       1594
++stargazer2      MACH_STARGAZER2     STARGAZER2      1595
++e350            MACH_E350       E350            1596
++wpcm450         MACH_WPCM450        WPCM450         1597
++cartesio        MACH_CARTESIO       CARTESIO        1598
++toybox          MACH_TOYBOX     TOYBOX          1599
++tx27            MACH_TX27       TX27            1600
++ts409           MACH_TS409      TS409           1601
++p300            MACH_P300       P300            1602
++xdacomet        MACH_XDACOMET       XDACOMET        1603
++dexflex2        MACH_DEXFLEX2       DEXFLEX2        1604
++ow          MACH_OW         OW          1605
++armebs3         MACH_ARMEBS3        ARMEBS3         1606
++u3          MACH_U3         U3          1607
++smdk2450        MACH_SMDK2450       SMDK2450        1608
++rsi_ews         MACH_RSI_EWS        RSI_EWS         1609
++tnb         MACH_TNB        TNB         1610
++toepath         MACH_TOEPATH        TOEPATH         1611
++kb9263          MACH_KB9263     KB9263          1612
++mt7108          MACH_MT7108     MT7108          1613
++smtr2440        MACH_SMTR2440       SMTR2440        1614
++manao           MACH_MANAO      MANAO           1615
++cm_x300         MACH_CM_X300        CM_X300         1616
++gulfstream_kp       MACH_GULFSTREAM_KP  GULFSTREAM_KP       1617
++lanreadyfn522       MACH_LANREADYFN522  LANREADYFN522       1618
++arma37          MACH_ARMA37     ARMA37          1619
++mendel          MACH_MENDEL     MENDEL          1620
++pelco_iliad     MACH_PELCO_ILIAD    PELCO_ILIAD     1621
++unit2p          MACH_UNIT2P     UNIT2P          1622
++inc20otter      MACH_INC20OTTER     INC20OTTER      1623
++at91sam9g20ek       MACH_AT91SAM9G20EK  AT91SAM9G20EK       1624
++sc_ge2          MACH_STORCENTER     STORCENTER      1625
++smdk6410        MACH_SMDK6410       SMDK6410        1626
++u300            MACH_U300       U300            1627
++u500            MACH_U500       U500            1628
++ds9260          MACH_DS9260     DS9260          1629
++riverrock       MACH_RIVERROCK      RIVERROCK       1630
++scibath         MACH_SCIBATH        SCIBATH         1631
++at91sam7se      MACH_AT91SAM7SE512EK    AT91SAM7SE512EK     1632
++wrt350n_v2      MACH_WRT350N_V2     WRT350N_V2      1633
++multimedia      MACH_MULTIMEDIA     MULTIMEDIA      1634
++marvin          MACH_MARVIN     MARVIN          1635
++x500            MACH_X500       X500            1636
++awlug4lcu       MACH_AWLUG4LCU      AWLUG4LCU       1637
++palermoc        MACH_PALERMOC       PALERMOC        1638
++omap_ldp        MACH_OMAP_LDP       OMAP_LDP        1639
++ip500           MACH_IP500      IP500           1640
++ase2            MACH_ASE2       ASE2            1642
++mx35evb         MACH_MX35EVB        MX35EVB         1643
++aml_m8050       MACH_AML_M8050      AML_M8050       1644
++mx35_3ds        MACH_MX35_3DS       MX35_3DS        1645
++mars            MACH_MARS       MARS            1646
++neuros_osd2     MACH_NEUROS_OSD2    NEUROS_OSD2     1647
++badger          MACH_BADGER     BADGER          1648
++trizeps4wl      MACH_TRIZEPS4WL     TRIZEPS4WL      1649
++trizeps5        MACH_TRIZEPS5       TRIZEPS5        1650
++marlin          MACH_MARLIN     MARLIN          1651
++ts78xx          MACH_TS78XX     TS78XX          1652
++hpipaq214       MACH_HPIPAQ214      HPIPAQ214       1653
++at572d940dcm        MACH_AT572D940DCM   AT572D940DCM        1654
++ne1board        MACH_NE1BOARD       NE1BOARD        1655
++zante           MACH_ZANTE      ZANTE           1656
++sffsdr          MACH_SFFSDR     SFFSDR          1657
++tw2662          MACH_TW2662     TW2662          1658
++vf10xx          MACH_VF10XX     VF10XX          1659
++zoran43xx       MACH_ZORAN43XX      ZORAN43XX       1660
++sonix926        MACH_SONIX926       SONIX926        1661
++celestialsemi       MACH_CELESTIALSEMI  CELESTIALSEMI       1662
++cc9m2443js      MACH_CC9M2443JS     CC9M2443JS      1663
++tw5334          MACH_TW5334     TW5334          1664
++omap_htcartemis     MACH_HTCARTEMIS     HTCARTEMIS      1665
++nal_hlite       MACH_NAL_HLITE      NAL_HLITE       1666
++htcvogue        MACH_HTCVOGUE       HTCVOGUE        1667
++smartweb        MACH_SMARTWEB       SMARTWEB        1668
++mv86xx          MACH_MV86XX     MV86XX          1669
++mv87xx          MACH_MV87XX     MV87XX          1670
++songyoungho     MACH_SONGYOUNGHO    SONGYOUNGHO     1671
++younghotema     MACH_YOUNGHOTEMA    YOUNGHOTEMA     1672
++pcm037          MACH_PCM037     PCM037          1673
++mmvp            MACH_MMVP       MMVP            1674
++mmap            MACH_MMAP       MMAP            1675
++ptid2410        MACH_PTID2410       PTID2410        1676
++james_926       MACH_JAMES_926      JAMES_926       1677
++fm6000          MACH_FM6000     FM6000          1678
++db88f6281_bp        MACH_DB88F6281_BP   DB88F6281_BP        1680
++rd88f6192_nas       MACH_RD88F6192_NAS  RD88F6192_NAS       1681
++rd88f6281       MACH_RD88F6281      RD88F6281       1682
++db78x00_bp      MACH_DB78X00_BP     DB78X00_BP      1683
++smdk2416        MACH_SMDK2416       SMDK2416        1685
++oce_spider_si       MACH_OCE_SPIDER_SI  OCE_SPIDER_SI       1686
++oce_spider_sk       MACH_OCE_SPIDER_SK  OCE_SPIDER_SK       1687
++rovern6         MACH_ROVERN6        ROVERN6         1688
++pelco_evolution     MACH_PELCO_EVOLUTION    PELCO_EVOLUTION     1689
++wbd111          MACH_WBD111     WBD111          1690
++elaracpe        MACH_ELARACPE       ELARACPE        1691
++mabv3           MACH_MABV3      MABV3           1692
++mv2120          MACH_MV2120     MV2120          1693
++csb737          MACH_CSB737     CSB737          1695
++mx51_3ds        MACH_MX51_3DS       MX51_3DS        1696
++g900            MACH_G900       G900            1697
++apf27           MACH_APF27      APF27           1698
++ggus2000        MACH_GGUS2000       GGUS2000        1699
++omap_2430_mimic     MACH_OMAP_2430_MIMIC    OMAP_2430_MIMIC     1700
++imx27lite       MACH_IMX27LITE      IMX27LITE       1701
++almex           MACH_ALMEX      ALMEX           1702
++control         MACH_CONTROL        CONTROL         1703
++mba2410         MACH_MBA2410        MBA2410         1704
++volcano         MACH_VOLCANO        VOLCANO         1705
++zenith          MACH_ZENITH     ZENITH          1706
++muchip          MACH_MUCHIP     MUCHIP          1707
++magellan        MACH_MAGELLAN       MAGELLAN        1708
++usb_a9260       MACH_USB_A9260      USB_A9260       1709
++usb_a9263       MACH_USB_A9263      USB_A9263       1710
++qil_a9260       MACH_QIL_A9260      QIL_A9260       1711
++cme9210         MACH_CME9210        CME9210         1712
++hczh4           MACH_HCZH4      HCZH4           1713
++spearbasic      MACH_SPEARBASIC     SPEARBASIC      1714
++dep2440         MACH_DEP2440        DEP2440         1715
++hdl_gxr         MACH_HDL_GXR        HDL_GXR         1716
++hdl_gt          MACH_HDL_GT     HDL_GT          1717
++hdl_4g          MACH_HDL_4G     HDL_4G          1718
++s3c6000         MACH_S3C6000        S3C6000         1719
++mmsp2_mdk       MACH_MMSP2_MDK      MMSP2_MDK       1720
++mpx220          MACH_MPX220     MPX220          1721
++kzm_arm11_01        MACH_KZM_ARM11_01   KZM_ARM11_01        1722
++htc_polaris     MACH_HTC_POLARIS    HTC_POLARIS     1723
++htc_kaiser      MACH_HTC_KAISER     HTC_KAISER      1724
++lg_ks20         MACH_LG_KS20        LG_KS20         1725
++hhgps           MACH_HHGPS      HHGPS           1726
++nokia_n810_wimax    MACH_NOKIA_N810_WIMAX   NOKIA_N810_WIMAX    1727
++insight         MACH_INSIGHT        INSIGHT         1728
++sapphire        MACH_SAPPHIRE       SAPPHIRE        1729
++csb637xo        MACH_CSB637XO       CSB637XO        1730
++evisiong        MACH_EVISIONG       EVISIONG        1731
++stmp37xx        MACH_STMP37XX       STMP37XX        1732
++stmp378x        MACH_STMP378X       STMP378X        1733
++tnt         MACH_TNT        TNT         1734
++tbxt            MACH_TBXT       TBXT            1735
++playmate        MACH_PLAYMATE       PLAYMATE        1736
++pns10           MACH_PNS10      PNS10           1737
++eznavi          MACH_EZNAVI     EZNAVI          1738
++ps4000          MACH_PS4000     PS4000          1739
++ezx_a780        MACH_EZX_A780       EZX_A780        1740
++ezx_e680        MACH_EZX_E680       EZX_E680        1741
++ezx_a1200       MACH_EZX_A1200      EZX_A1200       1742
++ezx_e6          MACH_EZX_E6     EZX_E6          1743
++ezx_e2          MACH_EZX_E2     EZX_E2          1744
++ezx_a910        MACH_EZX_A910       EZX_A910        1745
++cwmx31          MACH_CWMX31     CWMX31          1746
++sl2312          MACH_SL2312     SL2312          1747
++blenny          MACH_BLENNY     BLENNY          1748
++ds107           MACH_DS107      DS107           1749
++dsx07           MACH_DSX07      DSX07           1750
++picocom1        MACH_PICOCOM1       PICOCOM1        1751
++lynx_wolverine      MACH_LYNX_WOLVERINE LYNX_WOLVERINE      1752
++ubisys_p9_sc19      MACH_UBISYS_P9_SC19 UBISYS_P9_SC19      1753
++kratos_low      MACH_KRATOS_LOW     KRATOS_LOW      1754
++m700            MACH_M700       M700            1755
++edmini_v2       MACH_EDMINI_V2      EDMINI_V2       1756
++zipit2          MACH_ZIPIT2     ZIPIT2          1757
++hslfemtocell        MACH_HSLFEMTOCELL   HSLFEMTOCELL        1758
++daintree_at91       MACH_DAINTREE_AT91  DAINTREE_AT91       1759
++sg560usb        MACH_SG560USB       SG560USB        1760
++omap3_pandora       MACH_OMAP3_PANDORA  OMAP3_PANDORA       1761
++usr8200         MACH_USR8200        USR8200         1762
++s1s65k          MACH_S1S65K     S1S65K          1763
++s2s65a          MACH_S2S65A     S2S65A          1764
++icore           MACH_ICORE      ICORE           1765
++mss2            MACH_MSS2       MSS2            1766
++belmont         MACH_BELMONT        BELMONT         1767
++asusp525        MACH_ASUSP525       ASUSP525        1768
++lb88rc8480      MACH_LB88RC8480     LB88RC8480      1769
++hipxa           MACH_HIPXA      HIPXA           1770
++mx25_3ds        MACH_MX25_3DS       MX25_3DS        1771
++m800            MACH_M800       M800            1772
++omap3530_lv_som     MACH_OMAP3530_LV_SOM    OMAP3530_LV_SOM     1773
++prima_evb       MACH_PRIMA_EVB      PRIMA_EVB       1774
++mx31bt1         MACH_MX31BT1        MX31BT1         1775
++atlas4_evb      MACH_ATLAS4_EVB     ATLAS4_EVB      1776
++mx31cicada      MACH_MX31CICADA     MX31CICADA      1777
++mi424wr         MACH_MI424WR        MI424WR         1778
++axs_ultrax      MACH_AXS_ULTRAX     AXS_ULTRAX      1779
++at572d940deb        MACH_AT572D940DEB   AT572D940DEB        1780
++davinci_da830_evm   MACH_DAVINCI_DA830_EVM  DAVINCI_DA830_EVM   1781
++ep9302          MACH_EP9302     EP9302          1782
++at572d940hfek       MACH_AT572D940HFEB  AT572D940HFEB       1783
++cybook3         MACH_CYBOOK3        CYBOOK3         1784
++wdg002          MACH_WDG002     WDG002          1785
++sg560adsl       MACH_SG560ADSL      SG560ADSL       1786
++nextio_n2800_ica    MACH_NEXTIO_N2800_ICA   NEXTIO_N2800_ICA    1787
++dove_db         MACH_DOVE_DB        DOVE_DB         1788
++marvell_newdb       MACH_MARVELL_NEWDB  MARVELL_NEWDB       1789
++vandihud        MACH_VANDIHUD       VANDIHUD        1790
++magx_e8         MACH_MAGX_E8        MAGX_E8         1791
++magx_z6         MACH_MAGX_Z6        MAGX_Z6         1792
++magx_v8         MACH_MAGX_V8        MAGX_V8         1793
++magx_u9         MACH_MAGX_U9        MAGX_U9         1794
++toughcf08       MACH_TOUGHCF08      TOUGHCF08       1795
++zw4400          MACH_ZW4400     ZW4400          1796
++marat91         MACH_MARAT91        MARAT91         1797
++overo           MACH_OVERO      OVERO           1798
++at2440evb       MACH_AT2440EVB      AT2440EVB       1799
++neocore926      MACH_NEOCORE926     NEOCORE926      1800
++wnr854t         MACH_WNR854T        WNR854T         1801
++imx27           MACH_IMX27      IMX27           1802
++moose_db        MACH_MOOSE_DB       MOOSE_DB        1803
++fab4            MACH_FAB4       FAB4            1804
++htcdiamond      MACH_HTCDIAMOND     HTCDIAMOND      1805
++fiona           MACH_FIONA      FIONA           1806
++mxc30030_x      MACH_MXC30030_X     MXC30030_X      1807
++bmp1000         MACH_BMP1000        BMP1000         1808
++logi9200        MACH_LOGI9200       LOGI9200        1809
++tqma31          MACH_TQMA31     TQMA31          1810
++ccw9p9215js     MACH_CCW9P9215JS    CCW9P9215JS     1811
++rd88f5181l_ge       MACH_RD88F5181L_GE  RD88F5181L_GE       1812
++sifmain         MACH_SIFMAIN        SIFMAIN         1813
++sam9_l9261      MACH_SAM9_L9261     SAM9_L9261      1814
++cc9m2443        MACH_CC9M2443       CC9M2443        1815
++xaria300        MACH_XARIA300       XARIA300        1816
++it9200          MACH_IT9200     IT9200          1817
++rd88f5181l_fxo      MACH_RD88F5181L_FXO RD88F5181L_FXO      1818
++kriss_sensor        MACH_KRISS_SENSOR   KRISS_SENSOR        1819
++pilz_pmi5       MACH_PILZ_PMI5      PILZ_PMI5       1820
++jade            MACH_JADE       JADE            1821
++ks8695_softplc      MACH_KS8695_SOFTPLC KS8695_SOFTPLC      1822
++gprisc3         MACH_GPRISC3        GPRISC3         1823
++stamp9g20       MACH_STAMP9G20      STAMP9G20       1824
++smdk6430        MACH_SMDK6430       SMDK6430        1825
++smdkc100        MACH_SMDKC100       SMDKC100        1826
++tavorevb        MACH_TAVOREVB       TAVOREVB        1827
++saar            MACH_SAAR       SAAR            1828
++deister_eyecam      MACH_DEISTER_EYECAM DEISTER_EYECAM      1829
++at91sam9m10g45ek    MACH_AT91SAM9M10G45EK   AT91SAM9M10G45EK    1830
++linkstation_produo  MACH_LINKSTATION_PRODUO LINKSTATION_PRODUO  1831
++hit_b0          MACH_HIT_B0     HIT_B0          1832
++adx_rmu         MACH_ADX_RMU        ADX_RMU         1833
++xg_cpe_main     MACH_XG_CPE_MAIN    XG_CPE_MAIN     1834
++edb9407a        MACH_EDB9407A       EDB9407A        1835
++dtb9608         MACH_DTB9608        DTB9608         1836
++em104v1         MACH_EM104V1        EM104V1         1837
++demo            MACH_DEMO       DEMO            1838
++logi9260        MACH_LOGI9260       LOGI9260        1839
++mx31_exm32      MACH_MX31_EXM32     MX31_EXM32      1840
++usb_a9g20       MACH_USB_A9G20      USB_A9G20       1841
++picproje2008        MACH_PICPROJE2008   PICPROJE2008        1842
++cs_e9315        MACH_CS_E9315       CS_E9315        1843
++qil_a9g20       MACH_QIL_A9G20      QIL_A9G20       1844
++sha_pon020      MACH_SHA_PON020     SHA_PON020      1845
++nad         MACH_NAD        NAD         1846
++sbc35_a9260     MACH_SBC35_A9260    SBC35_A9260     1847
++sbc35_a9g20     MACH_SBC35_A9G20    SBC35_A9G20     1848
++davinci_beginning   MACH_DAVINCI_BEGINNING  DAVINCI_BEGINNING   1849
++uwc         MACH_UWC        UWC         1850
++mxlads          MACH_MXLADS     MXLADS          1851
++htcnike         MACH_HTCNIKE        HTCNIKE         1852
++deister_pxa270      MACH_DEISTER_PXA270 DEISTER_PXA270      1853
++cme9210js       MACH_CME9210JS      CME9210JS       1854
++cc9p9360        MACH_CC9P9360       CC9P9360        1855
++mocha           MACH_MOCHA      MOCHA           1856
++wapd170ag       MACH_WAPD170AG      WAPD170AG       1857
++linkstation_mini    MACH_LINKSTATION_MINI   LINKSTATION_MINI    1858
++afeb9260        MACH_AFEB9260       AFEB9260        1859
++w90x900         MACH_W90X900        W90X900         1860
++w90x700         MACH_W90X700        W90X700         1861
++kt300ip         MACH_KT300IP        KT300IP         1862
++kt300ip_g20     MACH_KT300IP_G20    KT300IP_G20     1863
++srcm            MACH_SRCM       SRCM            1864
++wlnx_9260       MACH_WLNX_9260      WLNX_9260       1865
++openmoko_gta03      MACH_OPENMOKO_GTA03 OPENMOKO_GTA03      1866
++osprey2         MACH_OSPREY2        OSPREY2         1867
++kbio9260        MACH_KBIO9260       KBIO9260        1868
++ginza           MACH_GINZA      GINZA           1869
++a636n           MACH_A636N      A636N           1870
++imx27ipcam      MACH_IMX27IPCAM     IMX27IPCAM      1871
++nemoc           MACH_NEMOC      NEMOC           1872
++geneva          MACH_GENEVA     GENEVA          1873
++htcpharos       MACH_HTCPHAROS      HTCPHAROS       1874
++neonc           MACH_NEONC      NEONC           1875
++nas7100         MACH_NAS7100        NAS7100         1876
++teuphone        MACH_TEUPHONE       TEUPHONE        1877
++annax_eth2      MACH_ANNAX_ETH2     ANNAX_ETH2      1878
++csb733          MACH_CSB733     CSB733          1879
++bk3         MACH_BK3        BK3         1880
++omap_em32       MACH_OMAP_EM32      OMAP_EM32       1881
++et9261cp        MACH_ET9261CP       ET9261CP        1882
++jasperc         MACH_JASPERC        JASPERC         1883
++issi_arm9       MACH_ISSI_ARM9      ISSI_ARM9       1884
++ued         MACH_UED        UED         1885
++esiblade        MACH_ESIBLADE       ESIBLADE        1886
++eye02           MACH_EYE02      EYE02           1887
++imx27kbd        MACH_IMX27KBD       IMX27KBD        1888
++sst61vc010_fpga     MACH_SST61VC010_FPGA    SST61VC010_FPGA     1889
++kixvp435        MACH_KIXVP435       KIXVP435        1890
++kixnp435        MACH_KIXNP435       KIXNP435        1891
++africa          MACH_AFRICA     AFRICA          1892
++nh233           MACH_NH233      NH233           1893
++rd88f6183ap_ge      MACH_RD88F6183AP_GE RD88F6183AP_GE      1894
++bcm4760         MACH_BCM4760        BCM4760         1895
++eddy_v2         MACH_EDDY_V2        EDDY_V2         1896
++realview_pba8       MACH_REALVIEW_PBA8  REALVIEW_PBA8       1897
++hid_a7          MACH_HID_A7     HID_A7          1898
++hero            MACH_HERO       HERO            1899
++omap_poseidon       MACH_OMAP_POSEIDON  OMAP_POSEIDON       1900
++realview_pbx        MACH_REALVIEW_PBX   REALVIEW_PBX        1901
++micro9s         MACH_MICRO9S        MICRO9S         1902
++mako            MACH_MAKO       MAKO            1903
++xdaflame        MACH_XDAFLAME       XDAFLAME        1904
++phidget_sbc2        MACH_PHIDGET_SBC2   PHIDGET_SBC2        1905
++limestone       MACH_LIMESTONE      LIMESTONE       1906
++iprobe_c32      MACH_IPROBE_C32     IPROBE_C32      1907
++rut100          MACH_RUT100     RUT100          1908
++asusp535        MACH_ASUSP535       ASUSP535        1909
++htcraphael      MACH_HTCRAPHAEL     HTCRAPHAEL      1910
++sygdg1          MACH_SYGDG1     SYGDG1          1911
++sygdg2          MACH_SYGDG2     SYGDG2          1912
++seoul           MACH_SEOUL      SEOUL           1913
++salerno         MACH_SALERNO        SALERNO         1914
++ucn_s3c64xx     MACH_UCN_S3C64XX    UCN_S3C64XX     1915
++msm7201a        MACH_MSM7201A       MSM7201A        1916
++lpr1            MACH_LPR1       LPR1            1917
++armadillo500fx      MACH_ARMADILLO500FX ARMADILLO500FX      1918
++g3evm           MACH_G3EVM      G3EVM           1919
++z3_dm355        MACH_Z3_DM355       Z3_DM355        1920
++w90p910evb      MACH_W90P910EVB     W90P910EVB      1921
++w90p920evb      MACH_W90P920EVB     W90P920EVB      1922
++w90p950evb      MACH_W90P950EVB     W90P950EVB      1923
++w90n960evb      MACH_W90N960EVB     W90N960EVB      1924
++camhd           MACH_CAMHD      CAMHD           1925
++mvc100          MACH_MVC100     MVC100          1926
++electrum_200        MACH_ELECTRUM_200   ELECTRUM_200        1927
++htcjade         MACH_HTCJADE        HTCJADE         1928
++memphis         MACH_MEMPHIS        MEMPHIS         1929
++imx27sbc        MACH_IMX27SBC       IMX27SBC        1930
++lextar          MACH_LEXTAR     LEXTAR          1931
++mv88f6281gtw_ge     MACH_MV88F6281GTW_GE    MV88F6281GTW_GE     1932
++ncp         MACH_NCP        NCP         1933
++z32an_series        MACH_Z32AN      Z32AN           1934
++tmq_capd        MACH_TMQ_CAPD       TMQ_CAPD        1935
++omap3_wl        MACH_OMAP3_WL       OMAP3_WL        1936
++chumby          MACH_CHUMBY     CHUMBY          1937
++atsarm9         MACH_ATSARM9        ATSARM9         1938
++davinci_dm365_evm   MACH_DAVINCI_DM365_EVM  DAVINCI_DM365_EVM   1939
++bahamas         MACH_BAHAMAS        BAHAMAS         1940
++das         MACH_DAS        DAS         1941
++minidas         MACH_MINIDAS        MINIDAS         1942
++vk1000          MACH_VK1000     VK1000          1943
++centro          MACH_CENTRO     CENTRO          1944
++ctera_2bay      MACH_CTERA_2BAY     CTERA_2BAY      1945
++edgeconnect     MACH_EDGECONNECT    EDGECONNECT     1946
++nd27000         MACH_ND27000        ND27000         1947
++cobra           MACH_GEMALTO_COBRA  GEMALTO_COBRA       1948
++ingelabs_comet      MACH_INGELABS_COMET INGELABS_COMET      1949
++pollux_wiz      MACH_POLLUX_WIZ     POLLUX_WIZ      1950
++blackstone      MACH_BLACKSTONE     BLACKSTONE      1951
++topaz           MACH_TOPAZ      TOPAZ           1952
++aixle           MACH_AIXLE      AIXLE           1953
++mw998           MACH_MW998      MW998           1954
++nokia_rx51      MACH_NOKIA_RX51     NOKIA_RX51      1955
++vsc5605ev       MACH_VSC5605EV      VSC5605EV       1956
++nt98700dk       MACH_NT98700DK      NT98700DK       1957
++icontact        MACH_ICONTACT       ICONTACT        1958
++swarco_frcpu        MACH_SWARCO_FRCPU   SWARCO_FRCPU        1959
++swarco_scpu     MACH_SWARCO_SCPU    SWARCO_SCPU     1960
++bbox_p16        MACH_BBOX_P16       BBOX_P16        1961
++bstd            MACH_BSTD       BSTD            1962
++sbc2440ii       MACH_SBC2440II      SBC2440II       1963
++pcm034          MACH_PCM034     PCM034          1964
++neso            MACH_NESO       NESO            1965
++wlnx_9g20       MACH_WLNX_9G20      WLNX_9G20       1966
++omap_zoom2      MACH_OMAP_ZOOM2     OMAP_ZOOM2      1967
++totemnova       MACH_TOTEMNOVA      TOTEMNOVA       1968
++c5000           MACH_C5000      C5000           1969
++unipo_at91sam9263   MACH_UNIPO_AT91SAM9263  UNIPO_AT91SAM9263   1970
++ethernut5       MACH_ETHERNUT5      ETHERNUT5       1971
++arm11           MACH_ARM11      ARM11           1972
++cpuat9260       MACH_CPUAT9260      CPUAT9260       1973
++cpupxa255       MACH_CPUPXA255      CPUPXA255       1974
++eukrea_cpuimx27     MACH_CPUIMX27       CPUIMX27        1975
++cheflux         MACH_CHEFLUX        CHEFLUX         1976
++eb_cpux9k2      MACH_EB_CPUX9K2     EB_CPUX9K2      1977
++opcotec         MACH_OPCOTEC        OPCOTEC         1978
++yt          MACH_YT         YT          1979
++motoq           MACH_MOTOQ      MOTOQ           1980
++bsb1            MACH_BSB1       BSB1            1981
++acs5k           MACH_ACS5K      ACS5K           1982
++milan           MACH_MILAN      MILAN           1983
++quartzv2        MACH_QUARTZV2       QUARTZV2        1984
++rsvp            MACH_RSVP       RSVP            1985
++rmp200          MACH_RMP200     RMP200          1986
++snapper_9260        MACH_SNAPPER_9260   SNAPPER_9260        1987
++dsm320          MACH_DSM320     DSM320          1988
++adsgcm          MACH_ADSGCM     ADSGCM          1989
++ase2_400        MACH_ASE2_400       ASE2_400        1990
++pizza           MACH_PIZZA      PIZZA           1991
++spot_ngpl       MACH_SPOT_NGPL      SPOT_NGPL       1992
++armata          MACH_ARMATA     ARMATA          1993
++exeda           MACH_EXEDA      EXEDA           1994
++mx31sf005       MACH_MX31SF005      MX31SF005       1995
++f5d8231_4_v2        MACH_F5D8231_4_V2   F5D8231_4_V2        1996
++q2440           MACH_Q2440      Q2440           1997
++qq2440          MACH_QQ2440     QQ2440          1998
++mini2440        MACH_MINI2440       MINI2440        1999
++colibri300      MACH_COLIBRI300     COLIBRI300      2000
++jades           MACH_JADES      JADES           2001
++spark           MACH_SPARK      SPARK           2002
++benzina         MACH_BENZINA        BENZINA         2003
++blaze           MACH_BLAZE      BLAZE           2004
++linkstation_ls_hgl  MACH_LINKSTATION_LS_HGL LINKSTATION_LS_HGL  2005
++htckovsky       MACH_HTCVENUS       HTCVENUS        2006
++sony_prs505     MACH_SONY_PRS505    SONY_PRS505     2007
++hanlin_v3       MACH_HANLIN_V3      HANLIN_V3       2008
++sapphira        MACH_SAPPHIRA       SAPPHIRA        2009
++dack_sda_01     MACH_DACK_SDA_01    DACK_SDA_01     2010
++armbox          MACH_ARMBOX     ARMBOX          2011
++harris_rvp      MACH_HARRIS_RVP     HARRIS_RVP      2012
++ribaldo         MACH_RIBALDO        RIBALDO         2013
++agora           MACH_AGORA      AGORA           2014
++omap3_mini      MACH_OMAP3_MINI     OMAP3_MINI      2015
++a9sam6432_b     MACH_A9SAM6432_B    A9SAM6432_B     2016
++usg2410         MACH_USG2410        USG2410         2017
++pc72052_i10_revb    MACH_PC72052_I10_REVB   PC72052_I10_REVB    2018
++mx35_exm32      MACH_MX35_EXM32     MX35_EXM32      2019
++topas910        MACH_TOPAS910       TOPAS910        2020
++hyena           MACH_HYENA      HYENA           2021
++pospax          MACH_POSPAX     POSPAX          2022
++hdl_gx          MACH_HDL_GX     HDL_GX          2023
++ctera_4bay      MACH_CTERA_4BAY     CTERA_4BAY      2024
++ctera_plug_c        MACH_CTERA_PLUG_C   CTERA_PLUG_C        2025
++crwea_plug_i        MACH_CRWEA_PLUG_I   CRWEA_PLUG_I        2026
++egauge2         MACH_EGAUGE2        EGAUGE2         2027
++didj            MACH_DIDJ       DIDJ            2028
++m_s3c2443       MACH_MEISTER        MEISTER         2029
++htcblackstone       MACH_HTCBLACKSTONE  HTCBLACKSTONE       2030
++cpuat9g20       MACH_CPUAT9G20      CPUAT9G20       2031
++smdk6440        MACH_SMDK6440       SMDK6440        2032
++omap_35xx_mvp       MACH_OMAP_35XX_MVP  OMAP_35XX_MVP       2033
++ctera_plug_i        MACH_CTERA_PLUG_I   CTERA_PLUG_I        2034
++pvg610_100      MACH_PVG610     PVG610          2035
++hprw6815        MACH_HPRW6815       HPRW6815        2036
++omap3_oswald        MACH_OMAP3_OSWALD   OMAP3_OSWALD        2037
++nas4220b        MACH_NAS4220B       NAS4220B        2038
++htcraphael_cdma     MACH_HTCRAPHAEL_CDMA    HTCRAPHAEL_CDMA     2039
++htcdiamond_cdma     MACH_HTCDIAMOND_CDMA    HTCDIAMOND_CDMA     2040
++scaler          MACH_SCALER     SCALER          2041
++zylonite2       MACH_ZYLONITE2      ZYLONITE2       2042
++aspenite        MACH_ASPENITE       ASPENITE        2043
++teton           MACH_TETON      TETON           2044
++ttc_dkb         MACH_TTC_DKB        TTC_DKB         2045
++bishop2         MACH_BISHOP2        BISHOP2         2046
++ippv5           MACH_IPPV5      IPPV5           2047
++farm926         MACH_FARM926        FARM926         2048
++mmccpu          MACH_MMCCPU     MMCCPU          2049
++sgmsfl          MACH_SGMSFL     SGMSFL          2050
++tt8000          MACH_TT8000     TT8000          2051
++zrn4300lp       MACH_ZRN4300LP      ZRN4300LP       2052
++mptc            MACH_MPTC       MPTC            2053
++h6051           MACH_H6051      H6051           2054
++pvg610_101      MACH_PVG610_101     PVG610_101      2055
++stamp9261_pc_evb    MACH_STAMP9261_PC_EVB   STAMP9261_PC_EVB    2056
++pelco_odysseus      MACH_PELCO_ODYSSEUS PELCO_ODYSSEUS      2057
++tny_a9260       MACH_TNY_A9260      TNY_A9260       2058
++tny_a9g20       MACH_TNY_A9G20      TNY_A9G20       2059
++aesop_mp2530f       MACH_AESOP_MP2530F  AESOP_MP2530F       2060
++dx900           MACH_DX900      DX900           2061
++cpodc2          MACH_CPODC2     CPODC2          2062
++tilt_8925       MACH_TILT_8925      TILT_8925       2063
++davinci_dm357_evm   MACH_DAVINCI_DM357_EVM  DAVINCI_DM357_EVM   2064
++swordfish       MACH_SWORDFISH      SWORDFISH       2065
++corvus          MACH_CORVUS     CORVUS          2066
++taurus          MACH_TAURUS     TAURUS          2067
++axm         MACH_AXM        AXM         2068
++axc         MACH_AXC        AXC         2069
++baby            MACH_BABY       BABY            2070
++mp200           MACH_MP200      MP200           2071
++pcm043          MACH_PCM043     PCM043          2072
++hanlin_v3c      MACH_HANLIN_V3C     HANLIN_V3C      2073
++kbk9g20         MACH_KBK9G20        KBK9G20         2074
++adsturbog5      MACH_ADSTURBOG5     ADSTURBOG5      2075
++avenger_lite1       MACH_AVENGER_LITE1  AVENGER_LITE1       2076
++suc82x          MACH_SUC        SUC         2077
++at91sam7s256        MACH_AT91SAM7S256   AT91SAM7S256        2078
++mendoza         MACH_MENDOZA        MENDOZA         2079
++kira            MACH_KIRA       KIRA            2080
++mx1hbm          MACH_MX1HBM     MX1HBM          2081
++quatro43xx      MACH_QUATRO43XX     QUATRO43XX      2082
++quatro4230      MACH_QUATRO4230     QUATRO4230      2083
++nsb400          MACH_NSB400     NSB400          2084
++drp255          MACH_DRP255     DRP255          2085
++thoth           MACH_THOTH      THOTH           2086
++firestone       MACH_FIRESTONE      FIRESTONE       2087
++asusp750        MACH_ASUSP750       ASUSP750        2088
++ctera_dl        MACH_CTERA_DL       CTERA_DL        2089
++socr            MACH_SOCR       SOCR            2090
++htcoxygen       MACH_HTCOXYGEN      HTCOXYGEN       2091
++heroc           MACH_HEROC      HEROC           2092
++zeno6800        MACH_ZENO6800       ZENO6800        2093
++sc2mcs          MACH_SC2MCS     SC2MCS          2094
++gene100         MACH_GENE100        GENE100         2095
++as353x          MACH_AS353X     AS353X          2096
++sheevaplug      MACH_SHEEVAPLUG     SHEEVAPLUG      2097
++at91sam9g20     MACH_AT91SAM9G20    AT91SAM9G20     2098
++mv88f6192gtw_fe     MACH_MV88F6192GTW_FE    MV88F6192GTW_FE     2099
++cc9200          MACH_CC9200     CC9200          2100
++sm9200          MACH_SM9200     SM9200          2101
++tp9200          MACH_TP9200     TP9200          2102
++snapperdv       MACH_SNAPPERDV      SNAPPERDV       2103
++avengers_lite       MACH_AVENGERS_LITE  AVENGERS_LITE       2104
++avengers_lite1      MACH_AVENGERS_LITE1 AVENGERS_LITE1      2105
++omap3axon       MACH_OMAP3AXON      OMAP3AXON       2106
++ma8xx           MACH_MA8XX      MA8XX           2107
++mp201ek         MACH_MP201EK        MP201EK         2108
++davinci_tux     MACH_DAVINCI_TUX    DAVINCI_TUX     2109
++mpa1600         MACH_MPA1600        MPA1600         2110
++pelco_troy      MACH_PELCO_TROY     PELCO_TROY      2111
++nsb667          MACH_NSB667     NSB667          2112
++rovers5_4mpix       MACH_ROVERS5_4MPIX  ROVERS5_4MPIX       2113
++twocom          MACH_TWOCOM     TWOCOM          2114
++ubisys_p9_rcu3r2    MACH_UBISYS_P9_RCU3R2   UBISYS_P9_RCU3R2    2115
++hero_espresso       MACH_HERO_ESPRESSO  HERO_ESPRESSO       2116
++afeusb          MACH_AFEUSB     AFEUSB          2117
++t830            MACH_T830       T830            2118
++spd8020_cc      MACH_SPD8020_CC     SPD8020_CC      2119
++om_3d7k         MACH_OM_3D7K        OM_3D7K         2120
++picocom2        MACH_PICOCOM2       PICOCOM2        2121
++uwg4mx27        MACH_UWG4MX27       UWG4MX27        2122
++uwg4mx31        MACH_UWG4MX31       UWG4MX31        2123
++cherry          MACH_CHERRY     CHERRY          2124
++mx51_babbage        MACH_MX51_BABBAGE   MX51_BABBAGE        2125
++s3c2440turkiye      MACH_S3C2440TURKIYE S3C2440TURKIYE      2126
++tx37            MACH_TX37       TX37            2127
++sbc2800_9g20        MACH_SBC2800_9G20   SBC2800_9G20        2128
++benzglb         MACH_BENZGLB        BENZGLB         2129
++benztd          MACH_BENZTD     BENZTD          2130
++cartesio_plus       MACH_CARTESIO_PLUS  CARTESIO_PLUS       2131
++solrad_g20      MACH_SOLRAD_G20     SOLRAD_G20      2132
++mx27wallace     MACH_MX27WALLACE    MX27WALLACE     2133
++fmzwebmodul     MACH_FMZWEBMODUL    FMZWEBMODUL     2134
++rd78x00_masa        MACH_RD78X00_MASA   RD78X00_MASA        2135
++smallogger      MACH_SMALLOGGER     SMALLOGGER      2136
++ccw9p9215       MACH_CCW9P9215      CCW9P9215       2137
++dm355_leopard       MACH_DM355_LEOPARD  DM355_LEOPARD       2138
++ts219           MACH_TS219      TS219           2139
++tny_a9263       MACH_TNY_A9263      TNY_A9263       2140
++apollo          MACH_APOLLO     APOLLO          2141
++at91cap9stk     MACH_AT91CAP9STK    AT91CAP9STK     2142
++spc300          MACH_SPC300     SPC300          2143
++eko         MACH_EKO        EKO         2144
++ccw9m2443       MACH_CCW9M2443      CCW9M2443       2145
++ccw9m2443js     MACH_CCW9M2443JS    CCW9M2443JS     2146
++m2m_router_device   MACH_M2M_ROUTER_DEVICE  M2M_ROUTER_DEVICE   2147
++str9104nas      MACH_STAR9104NAS    STAR9104NAS     2148
++pca100          MACH_PCA100     PCA100          2149
++z3_dm365_mod_01     MACH_Z3_DM365_MOD_01    Z3_DM365_MOD_01     2150
++hipox           MACH_HIPOX      HIPOX           2151
++omap3_piteds        MACH_OMAP3_PITEDS   OMAP3_PITEDS        2152
++bm150r          MACH_BM150R     BM150R          2153
++tbone           MACH_TBONE      TBONE           2154
++merlin          MACH_MERLIN     MERLIN          2155
++falcon          MACH_FALCON     FALCON          2156
++davinci_da850_evm   MACH_DAVINCI_DA850_EVM  DAVINCI_DA850_EVM   2157
++s5p6440         MACH_S5P6440        S5P6440         2158
++at91sam9g10ek       MACH_AT91SAM9G10EK  AT91SAM9G10EK       2159
++omap_4430sdp        MACH_OMAP_4430SDP   OMAP_4430SDP        2160
++lpc313x         MACH_LPC313X        LPC313X         2161
++magx_zn5        MACH_MAGX_ZN5       MAGX_ZN5        2162
++magx_em30       MACH_MAGX_EM30      MAGX_EM30       2163
++magx_ve66       MACH_MAGX_VE66      MAGX_VE66       2164
++meesc           MACH_MEESC      MEESC           2165
++otc570          MACH_OTC570     OTC570          2166
++bcu2412         MACH_BCU2412        BCU2412         2167
++beacon          MACH_BEACON     BEACON          2168
++actia_tgw       MACH_ACTIA_TGW      ACTIA_TGW       2169
++e4430           MACH_E4430      E4430           2170
++ql300           MACH_QL300      QL300           2171
++btmavb101       MACH_BTMAVB101      BTMAVB101       2172
++btmawb101       MACH_BTMAWB101      BTMAWB101       2173
++sq201           MACH_SQ201      SQ201           2174
++quatro45xx      MACH_QUATRO45XX     QUATRO45XX      2175
++openpad         MACH_OPENPAD        OPENPAD         2176
++tx25            MACH_TX25       TX25            2177
++omap3_torpedo       MACH_OMAP3_TORPEDO  OMAP3_TORPEDO       2178
++htcraphael_k        MACH_HTCRAPHAEL_K   HTCRAPHAEL_K        2179
++lal43           MACH_LAL43      LAL43           2181
++htcraphael_cdma500  MACH_HTCRAPHAEL_CDMA500 HTCRAPHAEL_CDMA500  2182
++anw6410         MACH_ANW6410        ANW6410         2183
++htcprophet      MACH_HTCPROPHET     HTCPROPHET      2185
++cfa_10022       MACH_CFA_10022      CFA_10022       2186
++imx27_visstrim_m10  MACH_IMX27_VISSTRIM_M10 IMX27_VISSTRIM_M10  2187
++px2imx27        MACH_PX2IMX27       PX2IMX27        2188
++stm3210e_eval       MACH_STM3210E_EVAL  STM3210E_EVAL       2189
++dvs10           MACH_DVS10      DVS10           2190
++portuxg20       MACH_PORTUXG20      PORTUXG20       2191
++arm_spv         MACH_ARM_SPV        ARM_SPV         2192
++smdkc110        MACH_SMDKC110       SMDKC110        2193
++cabespresso     MACH_CABESPRESSO    CABESPRESSO     2194
++hmc800          MACH_HMC800     HMC800          2195
++sholes          MACH_SHOLES     SHOLES          2196
++btmxc31         MACH_BTMXC31        BTMXC31         2197
++dt501           MACH_DT501      DT501           2198
++ktx         MACH_KTX        KTX         2199
++omap3517evm     MACH_OMAP3517EVM    OMAP3517EVM     2200
++netspace_v2     MACH_NETSPACE_V2    NETSPACE_V2     2201
++netspace_max_v2     MACH_NETSPACE_MAX_V2    NETSPACE_MAX_V2     2202
++d2net_v2        MACH_D2NET_V2       D2NET_V2        2203
++net2big_v2      MACH_NET2BIG_V2     NET2BIG_V2      2204
++net4big_v2      MACH_NET4BIG_V2     NET4BIG_V2      2205
++net5big_v2      MACH_NET5BIG_V2     NET5BIG_V2      2206
++endb2443        MACH_ENDB2443       ENDB2443        2207
++inetspace_v2        MACH_INETSPACE_V2   INETSPACE_V2        2208
++tros            MACH_TROS       TROS            2209
++pelco_homer     MACH_PELCO_HOMER    PELCO_HOMER     2210
++ofsp8           MACH_OFSP8      OFSP8           2211
++at91sam9g45ekes     MACH_AT91SAM9G45EKES    AT91SAM9G45EKES     2212
++guf_cupid       MACH_GUF_CUPID      GUF_CUPID       2213
++eab1r           MACH_EAB1R      EAB1R           2214
++desirec         MACH_DESIREC        DESIREC         2215
++cordoba         MACH_CORDOBA        CORDOBA         2216
++irvine          MACH_IRVINE     IRVINE          2217
++sff772          MACH_SFF772     SFF772          2218
++pelco_milano        MACH_PELCO_MILANO   PELCO_MILANO        2219
++pc7302          MACH_PC7302     PC7302          2220
++bip6000         MACH_BIP6000        BIP6000         2221
++silvermoon      MACH_SILVERMOON     SILVERMOON      2222
++vc0830          MACH_VC0830     VC0830          2223
++dt430           MACH_DT430      DT430           2224
++ji42pf          MACH_JI42PF     JI42PF          2225
++gnet_ksm        MACH_GNET_KSM       GNET_KSM        2226
++gnet_sgm        MACH_GNET_SGM       GNET_SGM        2227
++gnet_sgr        MACH_GNET_SGR       GNET_SGR        2228
++omap3_icetekevm     MACH_OMAP3_ICETEKEVM    OMAP3_ICETEKEVM     2229
++pnp         MACH_PNP        PNP         2230
++ctera_2bay_k        MACH_CTERA_2BAY_K   CTERA_2BAY_K        2231
++ctera_2bay_u        MACH_CTERA_2BAY_U   CTERA_2BAY_U        2232
++sas_c           MACH_SAS_C      SAS_C           2233
++vma2315         MACH_VMA2315        VMA2315         2234
++vcs         MACH_VCS        VCS         2235
++spear600        MACH_SPEAR600       SPEAR600        2236
++spear300        MACH_SPEAR300       SPEAR300        2237
++spear1300       MACH_SPEAR1300      SPEAR1300       2238
++lilly1131       MACH_LILLY1131      LILLY1131       2239
++arvoo_ax301     MACH_ARVOO_AX301    ARVOO_AX301     2240
++mapphone        MACH_MAPPHONE       MAPPHONE        2241
++legend          MACH_LEGEND     LEGEND          2242
++salsa           MACH_SALSA      SALSA           2243
++lounge          MACH_LOUNGE     LOUNGE          2244
++vision          MACH_VISION     VISION          2245
++vmb20           MACH_VMB20      VMB20           2246
++hy2410          MACH_HY2410     HY2410          2247
++hy9315          MACH_HY9315     HY9315          2248
++bullwinkle      MACH_BULLWINKLE     BULLWINKLE      2249
++arm_ultimator2      MACH_ARM_ULTIMATOR2 ARM_ULTIMATOR2      2250
++vs_v210         MACH_VS_V210        VS_V210         2252
++vs_v212         MACH_VS_V212        VS_V212         2253
++hmt         MACH_HMT        HMT         2254
++suen3           MACH_SUEN3      SUEN3           2255
++vesper          MACH_VESPER     VESPER          2256
++str9            MACH_STR9       STR9            2257
++omap3_wl_ff     MACH_OMAP3_WL_FF    OMAP3_WL_FF     2258
++simcom          MACH_SIMCOM     SIMCOM          2259
++mcwebio         MACH_MCWEBIO        MCWEBIO         2260
++omap3_phrazer       MACH_OMAP3_PHRAZER  OMAP3_PHRAZER       2261
++darwin          MACH_DARWIN     DARWIN          2262
++oratiscomu      MACH_ORATISCOMU     ORATISCOMU      2263
++rtsbc20         MACH_RTSBC20        RTSBC20         2264
++sgh_i780        MACH_I780       I780            2265
++gemini324       MACH_GEMINI324      GEMINI324       2266
++oratislan       MACH_ORATISLAN      ORATISLAN       2267
++oratisalog      MACH_ORATISALOG     ORATISALOG      2268
++oratismadi      MACH_ORATISMADI     ORATISMADI      2269
++oratisot16      MACH_ORATISOT16     ORATISOT16      2270
++oratisdesk      MACH_ORATISDESK     ORATISDESK      2271
++vexpress        MACH_VEXPRESS       VEXPRESS        2272
++sintexo         MACH_SINTEXO        SINTEXO         2273
++cm3389          MACH_CM3389     CM3389          2274
++omap3_cio       MACH_OMAP3_CIO      OMAP3_CIO       2275
++sgh_i900        MACH_SGH_I900       SGH_I900        2276
++bst100          MACH_BST100     BST100          2277
++passion         MACH_PASSION        PASSION         2278
++indesign_at91sam    MACH_INDESIGN_AT91SAM   INDESIGN_AT91SAM    2279
++c4_badger       MACH_C4_BADGER      C4_BADGER       2280
++c4_viper        MACH_C4_VIPER       C4_VIPER        2281
++d2net           MACH_D2NET      D2NET           2282
++bigdisk         MACH_BIGDISK        BIGDISK         2283
++notalvision     MACH_NOTALVISION    NOTALVISION     2284
++omap3_kboc      MACH_OMAP3_KBOC     OMAP3_KBOC      2285
++cyclone         MACH_CYCLONE        CYCLONE         2286
++ninja           MACH_NINJA      NINJA           2287
++at91sam9g20ek_2mmc  MACH_AT91SAM9G20EK_2MMC AT91SAM9G20EK_2MMC  2288
++bcmring         MACH_BCMRING        BCMRING         2289
++resol_dl2       MACH_RESOL_DL2      RESOL_DL2       2290
++ifosw           MACH_IFOSW      IFOSW           2291
++htcrhodium      MACH_HTCRHODIUM     HTCRHODIUM      2292
++htctopaz        MACH_HTCTOPAZ       HTCTOPAZ        2293
++matrix504       MACH_MATRIX504      MATRIX504       2294
++mrfsa           MACH_MRFSA      MRFSA           2295
++sc_p270         MACH_SC_P270        SC_P270         2296
++atlas5_evb      MACH_ATLAS5_EVB     ATLAS5_EVB      2297
++pelco_lobox     MACH_PELCO_LOBOX    PELCO_LOBOX     2298
++dilax_pcu200        MACH_DILAX_PCU200   DILAX_PCU200        2299
++leonardo        MACH_LEONARDO       LEONARDO        2300
++zoran_approach7     MACH_ZORAN_APPROACH7    ZORAN_APPROACH7     2301
++dp6xx           MACH_DP6XX      DP6XX           2302
++bcm2153_vesper      MACH_BCM2153_VESPER BCM2153_VESPER      2303
++mahimahi        MACH_MAHIMAHI       MAHIMAHI        2304
++clickc          MACH_CLICKC     CLICKC          2305
++zb_gateway      MACH_ZB_GATEWAY     ZB_GATEWAY      2306
++tazcard         MACH_TAZCARD        TAZCARD         2307
++tazdev          MACH_TAZDEV     TAZDEV          2308
++annax_cb_arm        MACH_ANNAX_CB_ARM   ANNAX_CB_ARM        2309
++annax_dm3       MACH_ANNAX_DM3      ANNAX_DM3       2310
++cerebric        MACH_CEREBRIC       CEREBRIC        2311
++orca            MACH_ORCA       ORCA            2312
++pc9260          MACH_PC9260     PC9260          2313
++ems285a         MACH_EMS285A        EMS285A         2314
++gec2410         MACH_GEC2410        GEC2410         2315
++gec2440         MACH_GEC2440        GEC2440         2316
++mw903           MACH_ARCH_MW903     ARCH_MW903      2317
++mw2440          MACH_MW2440     MW2440          2318
++ecac2378        MACH_ECAC2378       ECAC2378        2319
++tazkiosk        MACH_TAZKIOSK       TAZKIOSK        2320
++whiterabbit_mch     MACH_WHITERABBIT_MCH    WHITERABBIT_MCH     2321
++sbox9263        MACH_SBOX9263       SBOX9263        2322
++oreo            MACH_OREO       OREO            2323
++smdk6442        MACH_SMDK6442       SMDK6442        2324
++openrd_base     MACH_OPENRD_BASE    OPENRD_BASE     2325
++incredible      MACH_INCREDIBLE     INCREDIBLE      2326
++incrediblec     MACH_INCREDIBLEC    INCREDIBLEC     2327
++heroct          MACH_HEROCT     HEROCT          2328
++mmnet1000       MACH_MMNET1000      MMNET1000       2329
++devkit8000      MACH_DEVKIT8000     DEVKIT8000      2330
++devkit9000      MACH_DEVKIT9000     DEVKIT9000      2331
++mx31txtr        MACH_MX31TXTR       MX31TXTR        2332
++u380            MACH_U380       U380            2333
++oamp3_hualu     MACH_HUALU_BOARD    HUALU_BOARD     2334
++npcmx50         MACH_NPCMX50        NPCMX50         2335
++mx51_lange51        MACH_MX51_LANGE51   MX51_LANGE51        2336
++mx51_lange52        MACH_MX51_LANGE52   MX51_LANGE52        2337
++riom            MACH_RIOM       RIOM            2338
++comcas          MACH_COMCAS     COMCAS          2339
++wsi_mx27        MACH_WSI_MX27       WSI_MX27        2340
++cm_t35          MACH_CM_T35     CM_T35          2341
++net2big         MACH_NET2BIG        NET2BIG         2342
++motorola_a1600      MACH_MOTOROLA_A1600 MOTOROLA_A1600      2343
++igep0020        MACH_IGEP0020       IGEP0020        2344
++igep0010        MACH_IGEP0010       IGEP0010        2345
++mv6281gtwge2        MACH_MV6281GTWGE2   MV6281GTWGE2        2346
++scat100         MACH_SCAT100        SCAT100         2347
++sanmina         MACH_SANMINA        SANMINA         2348
++momento         MACH_MOMENTO        MOMENTO         2349
++nuc9xx          MACH_NUC9XX     NUC9XX          2350
++nuc910evb       MACH_NUC910EVB      NUC910EVB       2351
++nuc920evb       MACH_NUC920EVB      NUC920EVB       2352
++nuc950evb       MACH_NUC950EVB      NUC950EVB       2353
++nuc945evb       MACH_NUC945EVB      NUC945EVB       2354
++nuc960evb       MACH_NUC960EVB      NUC960EVB       2355
++nuc932evb       MACH_NUC932EVB      NUC932EVB       2356
++nuc900          MACH_NUC900     NUC900          2357
++sd1soc          MACH_SD1SOC     SD1SOC          2358
++ln2440bc        MACH_LN2440BC       LN2440BC        2359
++rsbc            MACH_RSBC       RSBC            2360
++openrd_client       MACH_OPENRD_CLIENT  OPENRD_CLIENT       2361
++hpipaq11x       MACH_HPIPAQ11X      HPIPAQ11X       2362
++wayland         MACH_WAYLAND        WAYLAND         2363
++acnbsx102       MACH_ACNBSX102      ACNBSX102       2364
++hwat91          MACH_HWAT91     HWAT91          2365
++at91sam9263cs       MACH_AT91SAM9263CS  AT91SAM9263CS       2366
++csb732          MACH_CSB732     CSB732          2367
++u8500           MACH_U8500      U8500           2368
++huqiu           MACH_HUQIU      HUQIU           2369
++mx51_kunlun     MACH_MX51_KUNLUN    MX51_KUNLUN     2370
++pmt1g           MACH_PMT1G      PMT1G           2371
++htcelf          MACH_HTCELF     HTCELF          2372
++armadillo420        MACH_ARMADILLO420   ARMADILLO420        2373
++armadillo440        MACH_ARMADILLO440   ARMADILLO440        2374
++u_chip_dual_arm     MACH_U_CHIP_DUAL_ARM    U_CHIP_DUAL_ARM     2375
++csr_bdb3        MACH_CSR_BDB3       CSR_BDB3        2376
++dolby_cat1018       MACH_DOLBY_CAT1018  DOLBY_CAT1018       2377
++hy9307          MACH_HY9307     HY9307          2378
++aspire_easystore    MACH_A_ES       A_ES            2379
++davinci_irif        MACH_DAVINCI_IRIF   DAVINCI_IRIF        2380
++agama9263       MACH_AGAMA9263      AGAMA9263       2381
++marvell_jasper      MACH_MARVELL_JASPER MARVELL_JASPER      2382
++flint           MACH_FLINT      FLINT           2383
++tavorevb3       MACH_TAVOREVB3      TAVOREVB3       2384
++sch_m490        MACH_SCH_M490       SCH_M490        2386
++rbl01           MACH_RBL01      RBL01           2387
++omnifi          MACH_OMNIFI     OMNIFI          2388
++otavalo         MACH_OTAVALO        OTAVALO         2389
++siena           MACH_SIENNA     SIENNA          2390
++htc_excalibur_s620  MACH_HTC_EXCALIBUR_S620 HTC_EXCALIBUR_S620  2391
++htc_opal        MACH_HTC_OPAL       HTC_OPAL        2392
++touchbook       MACH_TOUCHBOOK      TOUCHBOOK       2393
++latte           MACH_LATTE      LATTE           2394
++xa200           MACH_XA200      XA200           2395
++nimrod          MACH_NIMROD     NIMROD          2396
++cc9p9215_3g     MACH_CC9P9215_3G    CC9P9215_3G     2397
++cc9p9215_3gjs       MACH_CC9P9215_3GJS  CC9P9215_3GJS       2398
++tk71            MACH_TK71       TK71            2399
++comham3525      MACH_COMHAM3525     COMHAM3525      2400
++mx31erebus      MACH_MX31EREBUS     MX31EREBUS      2401
++mcardmx27       MACH_MCARDMX27      MCARDMX27       2402
++paradise        MACH_PARADISE       PARADISE        2403
++tide            MACH_TIDE       TIDE            2404
++wzl2440         MACH_WZL2440        WZL2440         2405
++sdrdemo         MACH_SDRDEMO        SDRDEMO         2406
++ethercan2       MACH_ETHERCAN2      ETHERCAN2       2407
++ecmimg20        MACH_ECMIMG20       ECMIMG20        2408
++omap_dragon     MACH_OMAP_DRAGON    OMAP_DRAGON     2409
++halo            MACH_HALO       HALO            2410
++huangshan       MACH_HUANGSHAN      HUANGSHAN       2411
++vl_ma2sc        MACH_VL_MA2SC       VL_MA2SC        2412
++raumfeld_rc     MACH_RAUMFELD_RC    RAUMFELD_RC     2413
++raumfeld_connector  MACH_RAUMFELD_CONNECTOR RAUMFELD_CONNECTOR  2414
++raumfeld_speaker    MACH_RAUMFELD_SPEAKER   RAUMFELD_SPEAKER    2415
++multibus_master     MACH_MULTIBUS_MASTER    MULTIBUS_MASTER     2416
++multibus_pbk        MACH_MULTIBUS_PBK   MULTIBUS_PBK        2417
++tnetv107x       MACH_TNETV107X      TNETV107X       2418
++snake           MACH_SNAKE      SNAKE           2419
++cwmx27          MACH_CWMX27     CWMX27          2420
++sch_m480        MACH_SCH_M480       SCH_M480        2421
++platypus        MACH_PLATYPUS       PLATYPUS        2422
++pss2            MACH_PSS2       PSS2            2423
++davinci_apm150      MACH_DAVINCI_APM150 DAVINCI_APM150      2424
++str9100         MACH_STR9100        STR9100         2425
++net5big         MACH_NET5BIG        NET5BIG         2426
++seabed9263      MACH_SEABED9263     SEABED9263      2427
++mx51_m2id       MACH_MX51_M2ID      MX51_M2ID       2428
++octvocplus_eb       MACH_OCTVOCPLUS_EB  OCTVOCPLUS_EB       2429
++klk_firefox     MACH_KLK_FIREFOX    KLK_FIREFOX     2430
++klk_wirma_module    MACH_KLK_WIRMA_MODULE   KLK_WIRMA_MODULE    2431
++klk_wirma_mmi       MACH_KLK_WIRMA_MMI  KLK_WIRMA_MMI       2432
++supersonic      MACH_SUPERSONIC     SUPERSONIC      2433
++liberty         MACH_LIBERTY        LIBERTY         2434
++mh355           MACH_MH355      MH355           2435
++pc7802          MACH_PC7802     PC7802          2436
++gnet_sgc        MACH_GNET_SGC       GNET_SGC        2437
++einstein15      MACH_EINSTEIN15     EINSTEIN15      2438
++cmpd            MACH_CMPD       CMPD            2439
++davinci_hase1       MACH_DAVINCI_HASE1  DAVINCI_HASE1       2440
++lgeincitephone      MACH_LGEINCITEPHONE LGEINCITEPHONE      2441
++ea313x          MACH_EA313X     EA313X          2442
++fwbd_39064      MACH_FWBD_39064     FWBD_39064      2443
++fwbd_390128     MACH_FWBD_390128    FWBD_390128     2444
++pelco_moe       MACH_PELCO_MOE      PELCO_MOE       2445
++minimix27       MACH_MINIMIX27      MINIMIX27       2446
++omap3_thunder       MACH_OMAP3_THUNDER  OMAP3_THUNDER       2447
++passionc        MACH_PASSIONC       PASSIONC        2448
++mx27amata       MACH_MX27AMATA      MX27AMATA       2449
++bgat1           MACH_BGAT1      BGAT1           2450
++buzz            MACH_BUZZ       BUZZ            2451
++mb9g20          MACH_MB9G20     MB9G20          2452
++yushan          MACH_YUSHAN     YUSHAN          2453
++lizard          MACH_LIZARD     LIZARD          2454
++omap3polycom        MACH_OMAP3POLYCOM   OMAP3POLYCOM        2455
++smdkv210        MACH_SMDKV210       SMDKV210        2456
++bravo           MACH_BRAVO      BRAVO           2457
++siogentoo1      MACH_SIOGENTOO1     SIOGENTOO1      2458
++siogentoo2      MACH_SIOGENTOO2     SIOGENTOO2      2459
++sm3k            MACH_SM3K       SM3K            2460
++acer_tempo_f900     MACH_ACER_TEMPO_F900    ACER_TEMPO_F900     2461
++sst61vc010_dev      MACH_SST61VC010_DEV SST61VC010_DEV      2462
++glittertind     MACH_GLITTERTIND    GLITTERTIND     2463
++omap_zoom3      MACH_OMAP_ZOOM3     OMAP_ZOOM3      2464
++omap_3630sdp        MACH_OMAP_3630SDP   OMAP_3630SDP        2465
++cybook2440      MACH_CYBOOK2440     CYBOOK2440      2466
++torino_s        MACH_TORINO_S       TORINO_S        2467
++havana          MACH_HAVANA     HAVANA          2468
++beaumont_11     MACH_BEAUMONT_11    BEAUMONT_11     2469
++vanguard        MACH_VANGUARD       VANGUARD        2470
++s5pc110_draco       MACH_S5PC110_DRACO  S5PC110_DRACO       2471
++cartesio_two        MACH_CARTESIO_TWO   CARTESIO_TWO        2472
++aster           MACH_ASTER      ASTER           2473
++voguesv210      MACH_VOGUESV210     VOGUESV210      2474
++acm500x         MACH_ACM500X        ACM500X         2475
++km9260          MACH_KM9260     KM9260          2476
++nideflexg1      MACH_NIDEFLEXG1     NIDEFLEXG1      2477
++ctera_plug_io       MACH_CTERA_PLUG_IO  CTERA_PLUG_IO       2478
++smartq7         MACH_SMARTQ7        SMARTQ7         2479
++at91sam9g10ek2      MACH_AT91SAM9G10EK2 AT91SAM9G10EK2      2480
++asusp527        MACH_ASUSP527       ASUSP527        2481
++at91sam9g20mpm2     MACH_AT91SAM9G20MPM2    AT91SAM9G20MPM2     2482
++topasa900       MACH_TOPASA900      TOPASA900       2483
++electrum_100        MACH_ELECTRUM_100   ELECTRUM_100        2484
++mx51grb         MACH_MX51GRB        MX51GRB         2485
++xea300          MACH_XEA300     XEA300          2486
++htcstartrek     MACH_HTCSTARTREK    HTCSTARTREK     2487
++lima            MACH_LIMA       LIMA            2488
++csb740          MACH_CSB740     CSB740          2489
++usb_s8815       MACH_USB_S8815      USB_S8815       2490
++watson_efm_plugin   MACH_WATSON_EFM_PLUGIN  WATSON_EFM_PLUGIN   2491
++milkyway        MACH_MILKYWAY       MILKYWAY        2492
++g4evm           MACH_G4EVM      G4EVM           2493
++picomod6        MACH_PICOMOD6       PICOMOD6        2494
++omapl138_hawkboard  MACH_OMAPL138_HAWKBOARD OMAPL138_HAWKBOARD  2495
++ip6000          MACH_IP6000     IP6000          2496
++ip6010          MACH_IP6010     IP6010          2497
++utm400          MACH_UTM400     UTM400          2498
++omap3_zybex     MACH_OMAP3_ZYBEX    OMAP3_ZYBEX     2499
++wireless_space      MACH_WIRELESS_SPACE WIRELESS_SPACE      2500
++sx560           MACH_SX560      SX560           2501
++ts41x           MACH_TS41X      TS41X           2502
++elphel10373     MACH_ELPHEL10373    ELPHEL10373     2503
++rhobot          MACH_RHOBOT     RHOBOT          2504
++mx51_refresh        MACH_MX51_REFRESH   MX51_REFRESH        2505
++ls9260          MACH_LS9260     LS9260          2506
++shank           MACH_SHANK      SHANK           2507
++qsd8x50_st1     MACH_QSD8X50_ST1    QSD8X50_ST1     2508
++at91sam9m10ekes     MACH_AT91SAM9M10EKES    AT91SAM9M10EKES     2509
++hiram           MACH_HIRAM      HIRAM           2510
++phy3250         MACH_PHY3250        PHY3250         2511
++ea3250          MACH_EA3250     EA3250          2512
++fdi3250         MACH_FDI3250        FDI3250         2513
++whitestone      MACH_WHITESTONE     WHITESTONE      2514
++at91sam9263nit      MACH_AT91SAM9263NIT AT91SAM9263NIT      2515
++ccmx51          MACH_CCMX51     CCMX51          2516
++ccmx51js        MACH_CCMX51JS       CCMX51JS        2517
++ccwmx51         MACH_CCWMX51        CCWMX51         2518
++ccwmx51js       MACH_CCWMX51JS      CCWMX51JS       2519
++mini6410        MACH_MINI6410       MINI6410        2520
++tiny6410        MACH_TINY6410       TINY6410        2521
++nano6410        MACH_NANO6410       NANO6410        2522
++at572d940hfnldb     MACH_AT572D940HFNLDB    AT572D940HFNLDB     2523
++htcleo          MACH_HTCLEO     HTCLEO          2524
++avp13           MACH_AVP13      AVP13           2525
++xxsvideod       MACH_XXSVIDEOD      XXSVIDEOD       2526
++vpnext          MACH_VPNEXT     VPNEXT          2527
++swarco_itc3     MACH_SWARCO_ITC3    SWARCO_ITC3     2528
++tx51            MACH_TX51       TX51            2529
++dolby_cat1021       MACH_DOLBY_CAT1021  DOLBY_CAT1021       2530
++mx28evk         MACH_MX28EVK        MX28EVK         2531
++phoenix260      MACH_PHOENIX260     PHOENIX260      2532
++uvaca_stork     MACH_UVACA_STORK    UVACA_STORK     2533
++smartq5         MACH_SMARTQ5        SMARTQ5         2534
++all3078         MACH_ALL3078        ALL3078         2535
++ctera_2bay_ds       MACH_CTERA_2BAY_DS  CTERA_2BAY_DS       2536
++siogentoo3      MACH_SIOGENTOO3     SIOGENTOO3      2537
++epb5000         MACH_EPB5000        EPB5000         2538
++hy9263          MACH_HY9263     HY9263          2539
++acer_tempo_m900     MACH_ACER_TEMPO_M900    ACER_TEMPO_M900     2540
++acer_tempo_dx650    MACH_ACER_TEMPO_DX900   ACER_TEMPO_DX900    2541
++acer_tempo_x960     MACH_ACER_TEMPO_X960    ACER_TEMPO_X960     2542
++acer_eten_v900      MACH_ACER_ETEN_V900 ACER_ETEN_V900      2543
++acer_eten_x900      MACH_ACER_ETEN_X900 ACER_ETEN_X900      2544
++bonnell         MACH_BONNELL        BONNELL         2545
++oht_mx27        MACH_OHT_MX27       OHT_MX27        2546
++htcquartz       MACH_HTCQUARTZ      HTCQUARTZ       2547
++davinci_dm6467tevm  MACH_DAVINCI_DM6467TEVM DAVINCI_DM6467TEVM  2548
++c3ax03          MACH_C3AX03     C3AX03          2549
++mxt_td60        MACH_MXT_TD60       MXT_TD60        2550
++esyx            MACH_ESYX       ESYX            2551
++dove_db2        MACH_DOVE_DB2       DOVE_DB2        2552
++bulldog         MACH_BULLDOG        BULLDOG         2553
++derell_me2000       MACH_DERELL_ME2000  DERELL_ME2000       2554
++bcmring_base        MACH_BCMRING_BASE   BCMRING_BASE        2555
++bcmring_evm     MACH_BCMRING_EVM    BCMRING_EVM     2556
++bcmring_evm_jazz    MACH_BCMRING_EVM_JAZZ   BCMRING_EVM_JAZZ    2557
++bcmring_sp      MACH_BCMRING_SP     BCMRING_SP      2558
++bcmring_sv      MACH_BCMRING_SV     BCMRING_SV      2559
++bcmring_sv_jazz     MACH_BCMRING_SV_JAZZ    BCMRING_SV_JAZZ     2560
++bcmring_tablet      MACH_BCMRING_TABLET BCMRING_TABLET      2561
++bcmring_vp      MACH_BCMRING_VP     BCMRING_VP      2562
++bcmring_evm_seikor  MACH_BCMRING_EVM_SEIKOR BCMRING_EVM_SEIKOR  2563
++bcmring_sp_wqvga    MACH_BCMRING_SP_WQVGA   BCMRING_SP_WQVGA    2564
++bcmring_custom      MACH_BCMRING_CUSTOM BCMRING_CUSTOM      2565
++acer_s200       MACH_ACER_S200      ACER_S200       2566
++bt270           MACH_BT270      BT270           2567
++iseo            MACH_ISEO       ISEO            2568
++cezanne         MACH_CEZANNE        CEZANNE         2569
++lucca           MACH_LUCCA      LUCCA           2570
++supersmart      MACH_SUPERSMART     SUPERSMART      2571
++arm11_board     MACH_CS_MISANO      CS_MISANO       2572
++magnolia2       MACH_MAGNOLIA2      MAGNOLIA2       2573
++emxx            MACH_EMXX       EMXX            2574
++outlaw          MACH_OUTLAW     OUTLAW          2575
++riot_bei2       MACH_RIOT_BEI2      RIOT_BEI2       2576
++riot_vox        MACH_RIOT_VOX       RIOT_VOX        2577
++riot_x37        MACH_RIOT_X37       RIOT_X37        2578
++mega25mx        MACH_MEGA25MX       MEGA25MX        2579
++benzina2        MACH_BENZINA2       BENZINA2        2580
++ignite          MACH_IGNITE     IGNITE          2581
++foggia          MACH_FOGGIA     FOGGIA          2582
++arezzo          MACH_AREZZO     AREZZO          2583
++leica_skywalker     MACH_LEICA_SKYWALKER    LEICA_SKYWALKER     2584
++jacinto2_jamr       MACH_JACINTO2_JAMR  JACINTO2_JAMR       2585
++gts_nova        MACH_GTS_NOVA       GTS_NOVA        2586
++p3600           MACH_P3600      P3600           2587
++dlt2            MACH_DLT2       DLT2            2588
++df3120          MACH_DF3120     DF3120          2589
++ecucore_9g20        MACH_ECUCORE_9G20   ECUCORE_9G20        2590
++nautel_lpc3240      MACH_NAUTEL_LPC3240 NAUTEL_LPC3240      2591
++glacier         MACH_GLACIER        GLACIER         2592
++phrazer_bulldog     MACH_PHRAZER_BULLDOG    PHRAZER_BULLDOG     2593
++omap3_bulldog       MACH_OMAP3_BULLDOG  OMAP3_BULLDOG       2594
++pca101          MACH_PCA101     PCA101          2595
++buzzc           MACH_BUZZC      BUZZC           2596
++sasie2          MACH_SASIE2     SASIE2          2597
++davinci_cio     MACH_DAVINCI_CIO    DAVINCI_CIO     2598
++smartmeter_dl       MACH_SMARTMETER_DL  SMARTMETER_DL       2599
++wzl6410         MACH_WZL6410        WZL6410         2600
++wzl6410m        MACH_WZL6410M       WZL6410M        2601
++wzl6410f        MACH_WZL6410F       WZL6410F        2602
++wzl6410i        MACH_WZL6410I       WZL6410I        2603
++spacecom1       MACH_SPACECOM1      SPACECOM1       2604
++pingu920        MACH_PINGU920       PINGU920        2605
++bravoc          MACH_BRAVOC     BRAVOC          2606
++cybo2440        MACH_CYBO2440       CYBO2440        2607
++vdssw           MACH_VDSSW      VDSSW           2608
++romulus         MACH_ROMULUS        ROMULUS         2609
++omap_magic      MACH_OMAP_MAGIC     OMAP_MAGIC      2610
++eltd100         MACH_ELTD100        ELTD100         2611
++capc7117        MACH_CAPC7117       CAPC7117        2612
++swan            MACH_SWAN       SWAN            2613
++veu         MACH_VEU        VEU         2614
++rm2         MACH_RM2        RM2         2615
++tt2100          MACH_TT2100     TT2100          2616
++venice          MACH_VENICE     VENICE          2617
++pc7323          MACH_PC7323     PC7323          2618
++masp            MACH_MASP       MASP            2619
++fujitsu_tvstbsoc0   MACH_FUJITSU_TVSTBSOC   FUJITSU_TVSTBSOC    2620
++fujitsu_tvstbsoc1   MACH_FUJITSU_TVSTBSOC1  FUJITSU_TVSTBSOC1   2621
++lexikon         MACH_LEXIKON        LEXIKON         2622
++mini2440v2      MACH_MINI2440V2     MINI2440V2      2623
++icontrol        MACH_ICONTROL       ICONTROL        2624
++sheevad         MACH_SHEEVAD        SHEEVAD         2625
++qsd8x50a_st1_1      MACH_QSD8X50A_ST1_1 QSD8X50A_ST1_1      2626
++qsd8x50a_st1_5      MACH_QSD8X50A_ST1_5 QSD8X50A_ST1_5      2627
++bee         MACH_BEE        BEE         2628
++mx23evk         MACH_MX23EVK        MX23EVK         2629
++ap4evb          MACH_AP4EVB     AP4EVB          2630
++stockholm       MACH_STOCKHOLM      STOCKHOLM       2631
++lpc_h3131       MACH_LPC_H3131      LPC_H3131       2632
++stingray        MACH_STINGRAY       STINGRAY        2633
++kraken          MACH_KRAKEN     KRAKEN          2634
++gw2388          MACH_GW2388     GW2388          2635
++jadecpu         MACH_JADECPU        JADECPU         2636
++carlisle        MACH_CARLISLE       CARLISLE        2637
++lux_sf9         MACH_LUX_SFT9       LUX_SFT9        2638
++nemid_tb        MACH_NEMID_TB       NEMID_TB        2639
++terrier         MACH_TERRIER        TERRIER         2640
++turbot          MACH_TURBOT     TURBOT          2641
++sanddab         MACH_SANDDAB        SANDDAB         2642
++mx35_cicada     MACH_MX35_CICADA    MX35_CICADA     2643
++ghi2703d        MACH_GHI2703D       GHI2703D        2644
++lux_sfx9        MACH_LUX_SFX9       LUX_SFX9        2645
++lux_sf9g        MACH_LUX_SF9G       LUX_SF9G        2646
++lux_edk9        MACH_LUX_EDK9       LUX_EDK9        2647
++hw90240         MACH_HW90240        HW90240         2648
++dm365_leopard       MACH_DM365_LEOPARD  DM365_LEOPARD       2649
++mityomapl138        MACH_MITYOMAPL138   MITYOMAPL138        2650
++scat110         MACH_SCAT110        SCAT110         2651
++acer_a1         MACH_ACER_A1        ACER_A1         2652
++cmcontrol       MACH_CMCONTROL      CMCONTROL       2653
++pelco_lamar     MACH_PELCO_LAMAR    PELCO_LAMAR     2654
++rfp43           MACH_RFP43      RFP43           2655
++sk86r0301       MACH_SK86R0301      SK86R0301       2656
++ctpxa           MACH_CTPXA      CTPXA           2657
++epb_arm9_a      MACH_EPB_ARM9_A     EPB_ARM9_A      2658
++guruplug        MACH_GURUPLUG       GURUPLUG        2659
++spear310        MACH_SPEAR310       SPEAR310        2660
++spear320        MACH_SPEAR320       SPEAR320        2661
++robotx          MACH_ROBOTX     ROBOTX          2662
++lsxhl           MACH_LSXHL      LSXHL           2663
++smartlite       MACH_SMARTLITE      SMARTLITE       2664
++cws2            MACH_CWS2       CWS2            2665
++m619            MACH_M619       M619            2666
++smartview       MACH_SMARTVIEW      SMARTVIEW       2667
++lsa_salsa       MACH_LSA_SALSA      LSA_SALSA       2668
++kizbox          MACH_KIZBOX     KIZBOX          2669
++htccharmer      MACH_HTCCHARMER     HTCCHARMER      2670
++guf_neso_lt     MACH_GUF_NESO_LT    GUF_NESO_LT     2671
++pm9g45          MACH_PM9G45     PM9G45          2672
+-- 
+1.5.5.6
+
diff --git a/recipes/linux/linux-2.6.30/ronetix-pm9g45/0003-print-some-more-info-from-atmel_nand.c.patch b/recipes/linux/linux-2.6.30/ronetix-pm9g45/0003-print-some-more-info-from-atmel_nand.c.patch
new file mode 100644 (file)
index 0000000..910a597
--- /dev/null
@@ -0,0 +1,40 @@
+From ccbca3b163447d30352ddb94388693b320864bfc Mon Sep 17 00:00:00 2001
+From: Asen Dimov <dimov@ronetix.at>
+Date: Tue, 2 Mar 2010 01:17:56 +0200
+Subject: [PATCH] print some more info from atmel_nand.c
+
+---
+ drivers/mtd/nand/atmel_nand.c |    9 +++++++--
+ 1 files changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/mtd/nand/atmel_nand.c b/drivers/mtd/nand/atmel_nand.c
+index f6dad3d..c974a56 100644
+--- a/drivers/mtd/nand/atmel_nand.c
++++ b/drivers/mtd/nand/atmel_nand.c
+@@ -411,6 +411,8 @@ static int __init atmel_nand_probe(struct platform_device *pdev)
+               res = -EIO;
+               goto err_nand_ioremap;
+       }
++      printk(KERN_ERR "atmel_nand: nand chip  ioremap 0x%08x(Physical) to 0x%08x(virtual) length 0x%08x\n",
++              mem->start, host->io_base, mem->end - mem->start + 1);
+       mtd = &host->mtd;
+       nand_chip = &host->nand_chip;
+@@ -515,9 +517,12 @@ static int __init atmel_nand_probe(struct platform_device *pdev)
+               }
+       }
+-      printk(KERN_INFO "AT91 NAND: %i-bit, %s ECC\n",
++      printk(KERN_INFO "AT91 NAND: %i-bit, %s ECC, Sizes: %d page, %d erase block, %d oob \n",
+               (nand_chip->options & NAND_BUSWIDTH_16) ? 16 : 8,
+-              ecc_modes[nand_chip->ecc.mode]
++              ecc_modes[nand_chip->ecc.mode],
++              mtd->writesize,
++              mtd->erasesize,
++              mtd->oobsize
+       );
+       /* second phase scan */
+-- 
+1.5.5.6
+
diff --git a/recipes/linux/linux-2.6.30/ronetix-pm9g45/0004-add-newline-at-the-end-of-uncorrectable-error.patch b/recipes/linux/linux-2.6.30/ronetix-pm9g45/0004-add-newline-at-the-end-of-uncorrectable-error.patch
new file mode 100644 (file)
index 0000000..397138f
--- /dev/null
@@ -0,0 +1,25 @@
+From 9581bc758367d20b9d0eedc9e4c5c678ebd6ba36 Mon Sep 17 00:00:00 2001
+From: Asen Dimov <dimov@ronetix.at>
+Date: Tue, 2 Mar 2010 01:19:44 +0200
+Subject: [PATCH] add newline at the end of uncorrectable error :
+
+---
+ drivers/mtd/nand/nand_ecc.c |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/mtd/nand/nand_ecc.c b/drivers/mtd/nand/nand_ecc.c
+index 868147a..958bf49 100644
+--- a/drivers/mtd/nand/nand_ecc.c
++++ b/drivers/mtd/nand/nand_ecc.c
+@@ -492,7 +492,7 @@ int nand_correct_data(struct mtd_info *mtd, unsigned char *buf,
+       if ((bitsperbyte[b0] + bitsperbyte[b1] + bitsperbyte[b2]) == 1)
+               return 1;       /* error in ecc data; no action needed */
+-      printk(KERN_ERR "uncorrectable error : ");
++      printk(KERN_ERR "uncorrectable error : \n");
+       return -1;
+ }
+ EXPORT_SYMBOL(nand_correct_data);
+-- 
+1.5.5.6
+
diff --git a/recipes/linux/linux-2.6.30/ronetix-pm9g45/0005-Add-CompactFlash-to-at91sam9g45-architecture.patch b/recipes/linux/linux-2.6.30/ronetix-pm9g45/0005-Add-CompactFlash-to-at91sam9g45-architecture.patch
new file mode 100644 (file)
index 0000000..e970520
--- /dev/null
@@ -0,0 +1,143 @@
+From 2297a86fcf8d9e2ecceee3d0905a8f054d91e9a5 Mon Sep 17 00:00:00 2001
+From: Asen Dimov <dimov@ronetix.at>
+Date: Tue, 2 Mar 2010 01:51:37 +0200
+Subject: [PATCH] Add CompactFlash to at91sam9g45 architecture
+
+---
+ arch/arm/mach-at91/at91sam9g45_devices.c |  106 ++++++++++++++++++++++++++++++
+ drivers/pcmcia/Kconfig                   |    2 +-
+ 2 files changed, 107 insertions(+), 1 deletions(-)
+
+diff --git a/arch/arm/mach-at91/at91sam9g45_devices.c b/arch/arm/mach-at91/at91sam9g45_devices.c
+index 3d9c66e..26d2b72 100644
+--- a/arch/arm/mach-at91/at91sam9g45_devices.c
++++ b/arch/arm/mach-at91/at91sam9g45_devices.c
+@@ -507,6 +507,112 @@ void __init at91_add_device_mci(short mmc_id, struct mci_platform_data *data)
+ void __init at91_add_device_mci(short mmc_id, struct mci_platform_data *data) {}
+ #endif
++/* --------------------------------------------------------------------
++ *  Compact Flash (PCMCIA or IDE)
++ * --------------------------------------------------------------------
++ */
++
++#if defined(CONFIG_AT91_CF) || defined(CONFIG_AT91_CF_MODULE) || \
++      defined(CONFIG_BLK_DEV_IDE_AT91) || defined(CONFIG_BLK_DEV_IDE_AT91_MODULE)
++
++static struct at91_cf_data cf0_data;
++
++static struct resource cf0_resources[] = {
++      [0] = {
++              .start  = AT91_CHIPSELECT_4,
++              .end    = AT91_CHIPSELECT_4 + SZ_256M - 1,
++              .flags  = IORESOURCE_MEM | IORESOURCE_MEM_8AND16BIT,
++      }
++};
++
++static struct platform_device cf0_device = {
++      .id             = 0,
++      .dev            = {
++                              .platform_data  = &cf0_data,
++      },
++      .resource       = cf0_resources,
++      .num_resources  = ARRAY_SIZE(cf0_resources),
++};
++
++static struct at91_cf_data cf1_data;
++
++static struct resource cf1_resources[] = {
++      [0] = {
++              .start  = AT91_CHIPSELECT_5,
++              .end    = AT91_CHIPSELECT_5 + SZ_256M - 1,
++              .flags  = IORESOURCE_MEM | IORESOURCE_MEM_8AND16BIT,
++      }
++};
++
++static struct platform_device cf1_device = {
++      .id             = 1,
++      .dev            = {
++                              .platform_data  = &cf1_data,
++      },
++      .resource       = cf1_resources,
++      .num_resources  = ARRAY_SIZE(cf1_resources),
++};
++
++void __init at91_add_device_cf(struct at91_cf_data *data)
++{
++      unsigned long csa;
++      struct platform_device *pdev;
++
++      if (!data)
++              return;
++
++      /*
++       * assign CS4 or CS5 to SMC with Compact Flash logic support,
++       * we assume SMC timings are configured by board code,
++       * except True IDE where timings are controlled by driver
++       */
++      csa = at91_sys_read(AT91_MATRIX_EBICSA);
++      switch (data->chipselect) {
++      case 4:
++              at91_set_A_periph(AT91_PIN_PC10, 0); /* EBI0_NCS4/CFCS0 */
++              csa |= AT91_MATRIX_EBI_CS4A_SMC_CF0;
++              cf0_data = *data;
++              pdev = &cf0_device;
++              break;
++      case 5:
++              at91_set_A_periph(AT91_PIN_PC11, 0); /* EBI0_NCS5/CFCS1 */
++              csa |= AT91_MATRIX_EBI_CS5A_SMC_CF1;
++              cf1_data = *data;
++              pdev = &cf1_device;
++              break;
++      default:
++              printk(KERN_ERR "AT91 CF: bad chip-select requested (%u)\n",
++                      data->chipselect);
++              return;
++      }
++      at91_sys_write(AT91_MATRIX_EBICSA, csa);
++
++      if (data->det_pin) {
++              at91_set_gpio_input(data->det_pin, 1);
++              at91_set_deglitch(data->det_pin, 1);
++      }
++
++      if (data->irq_pin) {
++              at91_set_gpio_input(data->irq_pin, 1);
++              at91_set_deglitch(data->irq_pin, 1);
++      }
++
++      if (data->vcc_pin)
++              /* initially off */
++              at91_set_gpio_output(data->vcc_pin, 0);
++
++      /* enable EBI controlled pins */
++      at91_set_A_periph(AT91_PIN_PC15, 0); /* NWAIT */
++      at91_set_A_periph(AT91_PIN_PC8, 0); /* CFCE1 */
++      at91_set_A_periph(AT91_PIN_PC9, 0); /* CFCE2 */
++      at91_set_A_periph(AT91_PIN_PC12, 0); /* CFNRW */
++
++      pdev->name = (data->flags & AT91_CF_TRUE_IDE) ? "at91_ide" : "at91_cf";
++      platform_device_register(pdev);
++}
++#else
++void __init at91_add_device_cf(struct at91_cf_data *data) {}
++#endif
+ /* --------------------------------------------------------------------
+  *  NAND / SmartMedia
+diff --git a/drivers/pcmcia/Kconfig b/drivers/pcmcia/Kconfig
+index e42d141..5790c67 100644
+--- a/drivers/pcmcia/Kconfig
++++ b/drivers/pcmcia/Kconfig
+@@ -270,7 +270,7 @@ config BFIN_CFPCMCIA
+ config AT91_CF
+       tristate "AT91 CompactFlash Controller"
+-      depends on PCMCIA && (ARCH_AT91RM9200 || ARCH_AT91SAM9260 || ARCH_AT91SAM9G20)
++      depends on PCMCIA && (ARCH_AT91RM9200 || ARCH_AT91SAM9260 || ARCH_AT91SAM9G20 || ARCH_AT91SAM9G45)
+       help
+         Say Y here to support the CompactFlash controller on AT91 chips.
+         Or choose M to compile the driver as a module named "at91_cf".
+-- 
+1.5.5.6
+
diff --git a/recipes/linux/linux-2.6.30/ronetix-pm9g45/0006-pm9g45-system-ram-can-be-on-CS1-or-CS6.patch b/recipes/linux/linux-2.6.30/ronetix-pm9g45/0006-pm9g45-system-ram-can-be-on-CS1-or-CS6.patch
new file mode 100644 (file)
index 0000000..164b6a9
--- /dev/null
@@ -0,0 +1,60 @@
+From 3a12beee72e77d6cc5657a1f448483e893b401d9 Mon Sep 17 00:00:00 2001
+From: Asen Dimov <dimov@ronetix.at>
+Date: Tue, 2 Mar 2010 01:54:36 +0200
+Subject: [PATCH] pm9g45 system ram can be on CS1 or CS6
+
+---
+ arch/arm/mach-at91/Makefile.boot              |   10 ++++++++++
+ arch/arm/mach-at91/include/mach/at91sam9g45.h |   17 +++++++++++++++++
+ 2 files changed, 27 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/mach-at91/Makefile.boot b/arch/arm/mach-at91/Makefile.boot
+index 3462b81..549c529 100644
+--- a/arch/arm/mach-at91/Makefile.boot
++++ b/arch/arm/mach-at91/Makefile.boot
+@@ -16,3 +16,13 @@ else
+ params_phys-y := 0x20000100
+ initrd_phys-y := 0x20410000
+ endif
++
++ifeq ($(CONFIG_PM9G45_SYSTEM_RAM_CS1),y)
++          zreladdr-y   := 0x20008000
++       params_phys-y   := 0x20000100
++       initrd_phys-y   := 0x20410000
++else ifeq ($(CONFIG_PM9G45_SYSTEM_RAM_CS6),y)
++          zreladdr-y   := 0x70008000
++       params_phys-y   := 0x70000100
++       initrd_phys-y   := 0x70410000
++endif
+diff --git a/arch/arm/mach-at91/include/mach/at91sam9g45.h b/arch/arm/mach-at91/include/mach/at91sam9g45.h
+index a526869..324d876 100644
+--- a/arch/arm/mach-at91/include/mach/at91sam9g45.h
++++ b/arch/arm/mach-at91/include/mach/at91sam9g45.h
+@@ -131,7 +131,24 @@
+ #define AT91SAM9G45_EHCI_BASE 0x00800000      /* USB Host controller (EHCI) */
+ #define AT91SAM9G45_VDEC_BASE 0x00900000      /* Video Decoder Controller */
++/*
++ * This one should have a better place, it is a board dependent.
++ */
++#if defined(CONFIG_MACH_AT91SAM9G45EKES)
++#define CONFIG_DRAM_BASE      AT91_CHIPSELECT_6
++#elif defined(CONFIG_MACH_PM9G45) && defined(CONFIG_PM9G45_SYSTEM_RAM_CS1)
++#define CONFIG_DRAM_BASE      AT91_CHIPSELECT_1
++#define CONFIG_DRAM_SIZE      SZ_128M
++#define CONFIG_VRAM_BASE      AT91_CHIPSELECT_6
++#define CONFIG_VRAM_SIZE      SZ_64M
++#elif defined(CONFIG_MACH_PM9G45) && defined(CONFIG_PM9G45_SYSTEM_RAM_CS6)
+ #define CONFIG_DRAM_BASE      AT91_CHIPSELECT_6
++#define CONFIG_DRAM_SIZE      SZ_64M
++#define CONFIG_VRAM_BASE      AT91_CHIPSELECT_1
++#define CONFIG_VRAM_SIZE_     SZ_128M
++#else
++#define CONFIG_DRAM_BASE      AT91_CHIPSELECT_6
++#endif
+ #define CONSISTENT_DMA_SIZE   SZ_4M
+-- 
+1.5.5.6
+
diff --git a/recipes/linux/linux-2.6.30/ronetix-pm9g45/0007-add-pm9g45-board.patch b/recipes/linux/linux-2.6.30/ronetix-pm9g45/0007-add-pm9g45-board.patch
new file mode 100644 (file)
index 0000000..5534b16
--- /dev/null
@@ -0,0 +1,1004 @@
+From 08b8ed8e5b8964c58daa5335831683f99228bf6a Mon Sep 17 00:00:00 2001
+From: Asen Dimov <dimov@ronetix.at>
+Date: Tue, 2 Mar 2010 01:55:54 +0200
+Subject: [PATCH] add pm9g45 board
+
+---
+ arch/arm/mach-at91/Kconfig        |   73 +++-
+ arch/arm/mach-at91/Makefile       |    1 +
+ arch/arm/mach-at91/board-pm9g45.c |  875 +++++++++++++++++++++++++++++++++++++
+ 3 files changed, 947 insertions(+), 2 deletions(-)
+ create mode 100644 arch/arm/mach-at91/board-pm9g45.c
+
+diff --git a/arch/arm/mach-at91/Kconfig b/arch/arm/mach-at91/Kconfig
+index 359b0bc..bebad5b 100644
+--- a/arch/arm/mach-at91/Kconfig
++++ b/arch/arm/mach-at91/Kconfig
+@@ -407,6 +407,75 @@ config MACH_AT91SAM9G45EKES
+         "ES" at the end of the name means that this board is an
+         Engineering Sample.
++config MACH_PM9G45
++       bool "Ronetix PM9G45 Evaluation Kit"
++       depends on ARCH_AT91SAM9G45
++       help
++         Select this if you are using Ronetix's PM9G45 board.
++         <http://ronetix.at/starter_kit_9g45.html>
++choice
++       prompt "System RAM base address"
++       depends on MACH_PM9G45
++       help
++         AT91SAM9G45 has two DDR2 controlers, one CS1 on 0x20000000
++         and CS6 on 0x70000000 memmory addresses. You can choose
++         the where th system RAM to be.
++
++config PM9G45_SYSTEM_RAM_CS1
++       bool "System RAM: CS1 on 0x20000000 with 128MB"
++       depends on MACH_PM9G45
++       help
++         CS1 will be used for system ram and CS6 for video memory.
++
++config PM9G45_SYSTEM_RAM_CS6
++       bool "System RAM: CS6 on 0x70000000"
++       depends on MACH_PM9G45
++       help
++         CS6 will be used for system ram and for video ram.
++
++endchoice
++
++config VRAM_SIZE
++       prompt "Video RAM size"
++       depends on (MACH_PM9G45 && PM9G45_SYSTEM_RAM_CS6)
++       hex
++       help
++         Determine the size of ram for video. It will be located at the end of CS6.
++       default 0x400000
++
++choice
++       prompt "LCD Display"
++
++config PM9G45_LCD_TX09D70
++       bool "3.5\", 320x240 Hitachi TX09D70"
++       depends on MACH_PM9G45
++
++config PM9G45_LCD_RA158
++       bool "4.3\", 800x480 Seiko RA158"
++       depends on MACH_PM9G45
++
++config PM9G45_LCD_TCG057VGLAC
++       bool "5.7\", 640x480 Kyocera TCG057VGLAC"
++       depends on MACH_PM9G45
++
++config PM9G45_LCD_GTTV57NN771E0
++       bool "5.7\", 640x480 Solomon GTTV57NN771E0"
++       depends on MACH_PM9G45
++
++config PM9G45_LCD_GLAA057VA01CW
++       bool "5.7\", 640x480 CPT CLAA057VA01CW"
++       depends on MACH_PM9G45
++
++config PM9G45_LCD_GATW70SN8H1E0
++       bool "7.0\", 800x480 Solomon GATW70SN8H1E0"
++       depends on MACH_PM9G45
++
++config PM9G45_LCD_CLAA080MB0ACW
++       bool "8.0\", 800x600 CPT CLAA080MB0ACW"
++       depends on MACH_PM9G45
++
++endchoice
++
+ endif
+ # ----------------------------------------------------------
+@@ -461,13 +530,13 @@ 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_AT91SAM9G10EK || MACH_AT91SAM9263EK || MACH_AT91SAM9G20EK || MACH_ECBAT91 || MACH_SAM9_L9260 || MACH_AT91CAP9ADK || MACH_AT572D940HFEB || MACH_TOTEMNOVA || MACH_NEOCORE926)
++      depends on (ARCH_AT91RM9200DK || MACH_AT91RM9200EK || MACH_AT91SAM9260EK || MACH_AT91SAM9261EK || MACH_AT91SAM9G10EK || MACH_AT91SAM9263EK || MACH_AT91SAM9G20EK || MACH_ECBAT91 || MACH_SAM9_L9260 || MACH_AT91CAP9ADK || MACH_AT572D940HFEB || MACH_TOTEMNOVA || MACH_NEOCORE926 || MACH_PM9G45)
+       help
+         Enable support for the DataFlash card.
+ config MTD_NAND_ATMEL_BUSWIDTH_16
+       bool "Enable 16-bit data bus interface to NAND flash"
+-      depends on (MACH_AT91SAM9260EK || MACH_AT91SAM9261EK || MACH_AT91SAM9G10EK || MACH_AT91SAM9263EK || MACH_AT91SAM9G20EK || MACH_AT91SAM9G20EK_2MMC || MACH_AT91SAM9G45EKES || MACH_AT91CAP9ADK || MACH_AT572D940HFEB)
++      depends on (MACH_AT91SAM9260EK || MACH_AT91SAM9261EK || MACH_AT91SAM9G10EK || MACH_AT91SAM9263EK || MACH_AT91SAM9G20EK || MACH_AT91SAM9G20EK_2MMC || MACH_AT91SAM9G45EKES || MACH_AT91CAP9ADK || MACH_AT572D940HFEB || MACH_PM9G45)
+       help
+         On AT91SAM926x boards both types of NAND flash can be present
+         (8 and 16 bit data bus width).
+diff --git a/arch/arm/mach-at91/Makefile b/arch/arm/mach-at91/Makefile
+index 761098e..ea24437 100644
+--- a/arch/arm/mach-at91/Makefile
++++ b/arch/arm/mach-at91/Makefile
+@@ -72,6 +72,7 @@ obj-$(CONFIG_MACH_SBC35_A9G20)        += board-sbc35-a9g20.o
+ # AT91SAM9G45 board-specific support
+ obj-$(CONFIG_MACH_AT91SAM9G45EKES) += board-sam9m10g45ek.o
++obj-$(CONFIG_MACH_PM9G45) += board-pm9g45.o
+ # AT91CAP9 board-specific support
+ obj-$(CONFIG_MACH_AT91CAP9ADK)        += board-cap9adk.o
+diff --git a/arch/arm/mach-at91/board-pm9g45.c b/arch/arm/mach-at91/board-pm9g45.c
+new file mode 100644
+index 0000000..63e5ee1
+--- /dev/null
++++ b/arch/arm/mach-at91/board-pm9g45.c
+@@ -0,0 +1,875 @@
++/*
++ *  Board-specific setup code for the AT91SAM9M10G45 Evaluation Kit family
++ *
++ *  Covers: * AT91SAM9G45-EKES  board
++ *          * AT91SAM9M10G45-EK board
++ *
++ *  Copyright (C) 2009 Atmel 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.
++ *
++ */
++/*
++ * Based on board-sam9m10g45ek.c 
++ * filename: board-pm9g45.c
++ * date: 05.02.2010
++ */
++
++#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/ads7846.h>
++#include <linux/fb.h>
++#include <linux/gpio_keys.h>
++#include <linux/input.h>
++#include <linux/leds.h>
++#include <linux/clk.h>
++#include <linux/w1-gpio.h>
++#include <linux/atmel-mci.h>
++
++#include <mach/hardware.h>
++#include <video/atmel_lcdc.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 <mach/at91sam9g45_matrix.h>
++
++#include <mach/hardware.h>
++#include <mach/board.h>
++#include <mach/gpio.h>
++#include <mach/at91sam9_smc.h>
++#include <mach/at91_shdwc.h>
++
++#include "sam9_smc.h"
++#include "generic.h"
++
++static void __init pm9g45_map_io(void)
++{
++      /* Initialize processor: 12.000 MHz crystal */
++      at91sam9g45_initialize(12000000);
++
++      /* DGBU on ttyS0. (Rx & Tx only) */
++      at91_register_uart(0, 0, 0);
++
++      /* USART0 not connected on the -EK board */
++      /* USART1 on ttyS2. (Rx, Tx, RTS, CTS) */
++      at91_register_uart(AT91SAM9G45_ID_US1, 2, ATMEL_UART_CTS | ATMEL_UART_RTS);
++
++      /* set serial console to ttyS0 (ie, DBGU) */
++      at91_set_serial_console(0);
++}
++
++static void __init pm9g45_init_irq(void)
++{
++      at91sam9g45_init_interrupts(NULL);
++}
++
++
++/*
++ * USB HS Host port (common to OHCI & EHCI)
++ */
++static struct at91_usbh_data __initdata pm9g45_usbh_hs_data = {
++      .ports          = 2, 
++      .vbus_pin       = { 0, 0},
++};
++
++
++/*
++ * USB HS Device port
++ */
++static struct usba_platform_data __initdata pm9g45_usba_udc_data = {
++      .vbus_pin       = AT91_PIN_PD1,
++};
++
++/*
++ * ADS7846 Touchscreen
++ */
++#if defined(CONFIG_TOUCHSCREEN_ADS7846) || defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE)
++static int ads7843_pendown_state(void)
++{
++      return !at91_get_gpio_value(AT91_PIN_PD18);     /* Touchscreen PENIRQ */
++}
++
++static struct ads7846_platform_data ads_info = {
++      .model                  = 7843,
++      .x_min                  = 150,
++      .x_max                  = 3830,
++      .y_min                  = 190,
++      .y_max                  = 3830,
++      .settle_delay_usecs = 2000,
++      .keep_vref_on   = 1,
++      .vref_delay_usecs       = 500,
++      .x_plate_ohms           = 607,
++      .y_plate_ohms           = 232,
++      .pressure_max           = 15000,
++      .debounce_max           = 1,
++      .debounce_rep           = 1, //0
++      .debounce_tol           = (50), //(~0)
++      .get_pendown_state      = ads7843_pendown_state,
++      .penirq_recheck_delay_usecs = 200,
++};
++
++static void __init pm9g45_add_device_ts(void)
++{
++      at91_set_gpio_input(AT91_PIN_PD18, 1);  /* External IRQ, with pullup */
++      at91_set_gpio_input(AT91_PIN_PE31, 1);  /* Touchscreen BUSY signal */
++}
++#else
++static void __init pm9g45_add_device_ts(void) {}
++#endif
++static struct at91_tsadcc_data pm9g45_tsadcc_data = {
++      .adc_clock              = 300000,
++      .pendet_debounce        = 0x0d,
++      .ts_sample_hold_time    = 0x0a,
++};
++
++/*
++ * SPI devices.
++ */
++static struct spi_board_info pm9g45_spi_devices[] = {
++#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
++#if defined(CONFIG_TOUCHSCREEN_ADS7846) || defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE)
++      {
++              .modalias       = "ads7846",
++              .chip_select    = 0,
++              .max_speed_hz   = 125000 * 16,  /* max sample rate * clocks per sample */
++              .bus_num        = 1,
++              .platform_data  = &ads_info,
++              .irq            = AT91_PIN_PD18, 
++      },
++#endif
++};
++
++/*
++ * MCI (SD/MMC)
++ */
++static struct mci_platform_data __initdata pm9g45_mci0_data = {
++      .slot[0] = {
++              .bus_width      = 4,
++              .detect_pin     = AT91_PIN_PD30,
++              .wp_pin         = AT91_PIN_PD29,
++              //      .vcc_pin        = ... not connected
++      }
++};
++
++/*
++ * MACB Ethernet device
++ */
++static struct at91_eth_data __initdata pm9g45_macb_data = {
++      .phy_irq_pin    = AT91_PIN_PD5,
++      .is_rmii        = 1,
++};
++
++
++/*
++ * NAND flash
++ */
++static struct mtd_partition __initdata pm9g45_nand_partition[] = {
++      {
++              .name   = "Partition 1",
++              .offset = 0,
++              .size   = MTDPART_SIZ_FULL,
++      },
++
++};
++
++static struct mtd_partition * __init nand_partitions(int size, int *num_partitions)
++{
++      *num_partitions = ARRAY_SIZE(pm9g45_nand_partition);
++      return pm9g45_nand_partition;
++}
++
++/* det_pin is not connected */
++static struct atmel_nand_data __initdata pm9g45_nand_data = {
++      .ale            = 21,
++      .cle            = 22,
++ //   .det_pin        = ... not connected
++      .rdy_pin        = AT91_PIN_PD3,
++//    .rdy_pin_active_low     = 0,
++      .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
++};
++
++static struct sam9_smc_config __initdata pm9g45_nand_smc_config = {
++      .ncs_read_setup         = 0,
++      .nrd_setup              = 1,
++      .ncs_write_setup        = 0,
++      .nwe_setup              = 1,
++
++      .ncs_read_pulse         = 2, /* 3*/
++      .nrd_pulse              = 3, /* 3 */
++      .ncs_write_pulse        = 3, /* 3 */
++      .nwe_pulse              = 4, /* 3*/
++
++      .read_cycle             = 4, /* 5*/
++      .write_cycle            = 7, /* 5*/
++
++      .mode                   = AT91_SMC_READMODE | AT91_SMC_WRITEMODE | AT91_SMC_EXNWMODE_DISABLE,
++      .tdf_cycles             = 3, /* 2*/
++};
++
++static void __init pm9g45_add_device_nand(void)
++{
++      /* setup bus-width (8 or 16) */
++      if (pm9g45_nand_data.bus_width_16)
++              pm9g45_nand_smc_config.mode |= AT91_SMC_DBW_16;
++      else
++              pm9g45_nand_smc_config.mode |= AT91_SMC_DBW_8;
++
++      /* configure chip-select 3 (NAND) */
++      sam9_smc_configure(3, &pm9g45_nand_smc_config);
++
++      at91_add_device_nand(&pm9g45_nand_data);
++}
++
++
++/*
++ * LCD Controller
++ */
++#if defined(CONFIG_FB_ATMEL) || defined(CONFIG_FB_ATMEL_MODULE)
++
++#define AT91SAM9G45_DEFAULT_LCDCON2   (ATMEL_LCDC_MEMOR_LITTLE \
++                                      | ATMEL_LCDC_DISTYPE_TFT \
++                                      | ATMEL_LCDC_CLKMOD_ALWAYSACTIVE)
++
++static void at91_lcdc_power_control(int on)
++{
++      at91_set_gpio_value(AT91_PIN_PE6, on);
++}
++
++static u64 lcdc_dmamask = 0xffffffffUL;
++static struct atmel_lcdfb_info lcdc_data;
++
++static struct resource lcdc_resources[] = {
++      [0] = {
++              .start  = AT91SAM9G45_LCDC_BASE,
++              .end    = AT91SAM9G45_LCDC_BASE + SZ_4K - 1,
++              .flags  = IORESOURCE_MEM,
++      },
++      [1] = {
++              .start  = CONFIG_VRAM_BASE,
++              .end    = CONFIG_VRAM_BASE + CONFIG_VRAM_SIZE - 1,
++              .flags  = IORESOURCE_MEM,
++      },
++      [2] = {
++              .start  = AT91SAM9G45_ID_LCDC,
++              .end    = AT91SAM9G45_ID_LCDC,
++              .flags  = IORESOURCE_IRQ,
++      },
++};
++
++static struct platform_device at91_lcdc_device = {
++      .name           = "atmel_lcdfb",
++      .id             = 0,
++      .dev            = {
++                              .dma_mask               = &lcdc_dmamask,
++                              .coherent_dma_mask      = 0xffffffffUL,
++                              .platform_data          = &lcdc_data,
++      },
++      .resource       = lcdc_resources,
++      .num_resources  = ARRAY_SIZE(lcdc_resources),
++};
++
++static void __init pm9g45_add_device_lcdc(struct atmel_lcdfb_info *data)
++{
++      if (!data)
++              return;
++
++      at91_set_A_periph(AT91_PIN_PE0, 0);     /* LCDDPWR */
++      at91_set_A_periph(AT91_PIN_PE3, 0);     /* LCDVSYNC */
++      at91_set_A_periph(AT91_PIN_PE4, 0);     /* LCDHSYNC */
++      at91_set_A_periph(AT91_PIN_PE5, 0);     /* LCDDOTCK */
++
++      at91_set_A_periph(AT91_PIN_PE2, 0);     /* LCDCC */
++      /* at91_set_A_periph(AT91_PIN_PE7, 0); Not used */      /* LCDD0/LCDD2 */
++      /* at91_set_A_periph(AT91_PIN_PE8, 0); Not used */      /* LCDD1/LCDD3 */
++      at91_set_A_periph(AT91_PIN_PE9, 0);     /* LCDD2_R0 */
++      at91_set_A_periph(AT91_PIN_PE10, 0);    /* LCDD3_R1 */
++      at91_set_A_periph(AT91_PIN_PE11, 0);    /* LCDD4_R2 */
++      at91_set_A_periph(AT91_PIN_PE12, 0);    /* LCDD5_R3 */
++      at91_set_A_periph(AT91_PIN_PE13, 0);    /* LCDD6_R4 */
++      at91_set_A_periph(AT91_PIN_PE14, 0);    /* LCDD7_R5 */
++      /* at91_set_A_periph(AT91_PIN_PE15, 0); Not used */     /* LCDD8/LCDD12 */
++      /* at91_set_A_periph(AT91_PIN_PE16, 0); Not used */     /* LCDD9/LCDD13 */
++      at91_set_A_periph(AT91_PIN_PE17, 0);    /* LCDD10_G0 */
++      at91_set_A_periph(AT91_PIN_PE18, 0);    /* LCDD11_G1 */
++      at91_set_A_periph(AT91_PIN_PE19, 0);    /* LCDD12_G2 */
++      at91_set_A_periph(AT91_PIN_PE20, 0);    /* LCDD13_G3 */
++      at91_set_A_periph(AT91_PIN_PE21, 0);    /* LCDD14_G4 */
++      at91_set_A_periph(AT91_PIN_PE22, 0);    /* LCDD15_G5 */
++      /* at91_set_A_periph(AT91_PIN_PE23, 0); Not used */     /* LCDD8/LCDD12 */
++      /* at91_set_A_periph(AT91_PIN_PE24, 0); Not used */     /* LCDD9/LCDD13 */
++      at91_set_A_periph(AT91_PIN_PE25, 0);    /* LCDD18_B0 */
++      at91_set_A_periph(AT91_PIN_PE26, 0);    /* LCDD19_B1 */
++      at91_set_A_periph(AT91_PIN_PE27, 0);    /* LCDD20_B2 */
++      at91_set_A_periph(AT91_PIN_PE28, 0);    /* LCDD21_B3 */
++      at91_set_A_periph(AT91_PIN_PE29, 0);    /* LCDD22_B4 */
++      at91_set_A_periph(AT91_PIN_PE30, 0);    /* LCDD23_B5 */
++
++      lcdc_data = *data;
++      platform_device_register(&at91_lcdc_device);
++}
++
++#if defined(CONFIG_PM9G45_LCD_TX09D70)
++/* Hitachi TX09D70VM1CCA - 3.5", 320x240 */
++static struct fb_videomode at91_tft_vga_modes[] = {
++      {
++              .name                   = "TX09D50VM1CCA @ 60",
++              .refresh                = 60,
++              .xres                   = 240,          
++              .yres                   = 320,
++              .pixclock               = KHZ2PICOS(4965),
++              .left_margin    = 1,            
++              .right_margin   = 33,
++              .upper_margin   = 1,            
++              .lower_margin   = 0,
++              .hsync_len              = 5,            
++              .vsync_len              = 1,
++              .sync                   = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
++              .vmode                  = FB_VMODE_NONINTERLACED,
++      },
++};
++
++static struct fb_monspecs at91fb_default_monspecs = {
++      .manufacturer   = "HIT",
++      .monitor        = "TX09D70VM1CCA",
++      .modedb         = at91_tft_vga_modes,
++      .modedb_len     = ARRAY_SIZE(at91_tft_vga_modes),
++      .hfmin          = 15000,
++      .hfmax          = 64000,
++      .vfmin          = 50,
++      .vfmax          = 150,
++};
++
++/* Driver datas */
++static struct atmel_lcdfb_info __initdata pm9g45_lcdc_data = {
++      .lcdcon_is_backlight    = true,
++      .default_bpp                    = 16,
++      .default_dmacon                 = ATMEL_LCDC_DMAEN,
++      .default_lcdcon2                = AT91SAM9G45_DEFAULT_LCDCON2,
++      .default_monspecs               = &at91fb_default_monspecs,
++      .atmel_lcdfb_power_control      = at91_lcdc_power_control,
++      .guard_time                     = 1,
++      .lcd_wiring_mode                = ATMEL_LCDC_WIRING_RGB,
++};
++
++#elif defined(CONFIG_PM9G45_LCD_RA158)
++/* Seiko RA158 - 4.3", 800x480, 350cd */
++static struct fb_videomode __initdata tft_modes[] = {
++      {
++              .name                   = "800x480 @ 60",
++              .refresh                = 60,
++              .xres                   = 800,          
++              .yres                   = 480,
++              .pixclock               = KHZ2PICOS(10000),
++              .left_margin    = 89,           
++              .right_margin   = 164,
++              .upper_margin   = 23,           
++              .lower_margin   = 10,
++              .hsync_len              = 10,           
++              .vsync_len              = 10,
++              .sync                   = 0,
++              .vmode                  = FB_VMODE_NONINTERLACED,
++      },
++};
++
++static struct fb_monspecs __initdata tft_default_monspecs = {
++      .manufacturer   = "SEI",
++      .monitor                = "RA158Z",
++      .modedb                 = tft_modes,
++      .modedb_len             = ARRAY_SIZE(tft_modes),
++      .hfmin                  = 10000,
++      .hfmax                  = 35000,
++      .vfmin                  = 40,
++      .vfmax                  = 90,
++      .dclkmax                = 35000000,
++};
++
++static struct atmel_lcdfb_info __initdata pm9g45_lcdc_data = {
++      .default_bpp            = 24,
++      .default_dmacon         = ATMEL_LCDC_DMAEN,
++      .default_lcdcon2        = AT91SAM9G45_DEFAULT_LCDCON2,
++      .default_monspecs       = &tft_default_monspecs,
++      .guard_time                     = 2,
++};
++
++
++#elif defined(CONFIG_PM9G45_LCD_TCG057VGLAC)
++/* Kyocera TCG057VGLAC - 5.7", 640x480 */
++static struct fb_videomode at91_tft_vga_modes[] = {
++      {
++              .name           = "TCG057VGLAC @ 60",
++              .refresh        = 60,
++              .xres           = 640,
++              .yres           = 480,
++              .pixclock       = KHZ2PICOS(25000),
++              .hsync_len      = 5,
++              .left_margin    = 1,
++              .right_margin   = 33,
++              .vsync_len      = 1,
++              .upper_margin   = 4,
++              .lower_margin   = 0,
++              .sync           = 0,
++              .vmode          = FB_VMODE_NONINTERLACED,
++      },
++};
++
++static struct fb_monspecs at91fb_default_monspecs = {
++      .manufacturer   = "KYO",
++      .monitor        = "TCG057VGLAC",
++      .modedb         = at91_tft_vga_modes,
++      .modedb_len     = ARRAY_SIZE(at91_tft_vga_modes),
++      .hfmin          = 15000,
++      .hfmax          = 64000,
++      .vfmin          = 50,
++      .vfmax          = 150,
++};
++
++/* Driver datas */
++static struct atmel_lcdfb_info __initdata pm9g45_lcdc_data = {
++      .lcdcon_is_backlight            = true,
++      .default_bpp                    = 16,
++      .default_dmacon                 = ATMEL_LCDC_DMAEN,
++      .default_lcdcon2                = AT91SAM9G45_DEFAULT_LCDCON2,
++      .default_monspecs               = &at91fb_default_monspecs,
++      .atmel_lcdfb_power_control      = at91_lcdc_power_control,
++      .guard_time                     = 1,
++};
++
++#elif defined(CONFIG_PM9G45_LCD_GTTV57NN771E0)
++/* Solomon GTTV57NN771E0 - 5.7", 640x480 */
++static struct fb_videomode at91_tft_vga_modes[] = {
++      {
++              .name                   = "GTTV57NN771E0 @ 60",
++              .refresh                = 60,
++              .xres                   = 640,
++              .yres                   = 480,
++              .pixclock               = KHZ2PICOS(50000),
++              .hsync_len              = 30,
++              .left_margin    = 114,
++              .right_margin   = 16,
++              .vsync_len              = 3,
++              .upper_margin   = 32,
++              .lower_margin   = 10,
++              .sync                   = 0,
++              .vmode                  = FB_VMODE_NONINTERLACED,
++      },
++};
++
++static struct fb_monspecs at91fb_default_monspecs = {
++      .manufacturer   = "SGD",
++      .monitor                = "GTTV57NN771E0",
++      .modedb                 = at91_tft_vga_modes,
++      .modedb_len             = ARRAY_SIZE(at91_tft_vga_modes),
++      .hfmin                  = 10000,
++      .hfmax                  = 40000,
++      .vfmin                  = 40,
++      .vfmax                  = 90,
++};
++
++/* Driver datas */
++static struct atmel_lcdfb_info __initdata pm9g45_lcdc_data = {
++      .lcdcon_is_backlight            = true,
++      .default_bpp                    = 16,
++      .default_dmacon                 = ATMEL_LCDC_DMAEN,
++      .default_lcdcon2                = AT91SAM9G45_DEFAULT_LCDCON2,
++      .default_monspecs               = &at91fb_default_monspecs,
++      .atmel_lcdfb_power_control      = at91_lcdc_power_control,
++      .guard_time                     = 1,
++      .lcd_wiring_mode                = ATMEL_LCDC_WIRING_RGB,
++};
++
++#elif defined(CONFIG_PM9G45_LCD_GLAA057VA01CW)
++/* CPT CLAA057VA01CW - 5.7", 640x480, 220cd */
++static struct fb_videomode __initdata tft_modes[] = {
++      {
++              .name           = "640x480 @ 60",
++              .refresh        = 60,
++              .xres           = 640,          
++              .yres           = 480,
++              .pixclock       = KHZ2PICOS(25000),
++              .left_margin    = 45,           
++              .right_margin   = 114,
++              .upper_margin   = 33,           
++              .lower_margin   = 11,
++              .hsync_len      = 1,            
++              .vsync_len      = 1,
++              .sync           = 0,
++              .vmode          = FB_VMODE_NONINTERLACED,
++      },
++};
++
++static struct fb_monspecs __initdata tft_default_monspecs = {
++      .manufacturer   = "CPT",
++      .monitor                = "CLAA057VA01CW",
++      .modedb                 = tft_modes,
++      .modedb_len             = ARRAY_SIZE(tft_modes),
++      .hfmin                  = 10000,
++      .hfmax                  = 22350,
++      .vfmin                  = 40,
++      .vfmax                  = 90,
++      .dclkmax                = 30000000,
++};
++
++static struct atmel_lcdfb_info __initdata pm9g45_lcdc_data = {
++      .default_bpp            = 16,
++      .default_dmacon         = ATMEL_LCDC_DMAEN | ATMEL_LCDC_DMA2DEN,
++      .default_lcdcon2        = AT91SAM9G45_DEFAULT_LCDCON2,
++      .default_monspecs       = &tft_default_monspecs,
++      .guard_time                     = 2,
++};
++
++
++#elif defined(CONFIG_PM9G45_LCD_GATW70SN8H1E0)
++/* Solomon GATW70 - 7.0", 800x480, 350cd */
++static struct fb_videomode __initdata tft_modes[] = {
++      {
++              .name                   = "800x480 @ 60",
++              .refresh                = 60,
++              .xres                   = 800,          
++              .yres                   = 480,
++              .pixclock               = KHZ2PICOS(25000),
++              .left_margin    = 40,           
++              .right_margin   = 40,
++              .upper_margin   = 29,           
++              .lower_margin   = 13,
++              .hsync_len              = 48,           
++              .vsync_len              = 3,
++              .sync                   = 0,
++              .vmode                  = FB_VMODE_NONINTERLACED,
++      },
++};
++
++static struct fb_monspecs __initdata tft_default_monspecs = {
++      .manufacturer   = "SGD",
++      .monitor                = "GATW70",
++      .modedb                 = tft_modes,
++      .modedb_len             = ARRAY_SIZE(tft_modes),
++      .hfmin                  = 10000,
++      .hfmax                  = 35000,
++      .vfmin                  = 40,
++      .vfmax                  = 90,
++      .dclkmax                = 35000000,
++};
++
++static struct atmel_lcdfb_info __initdata pm9g45_lcdc_data = {
++      .default_bpp            = 24,
++      .default_dmacon         = ATMEL_LCDC_DMAEN,
++      .default_lcdcon2        = AT91SAM9G45_DEFAULT_LCDCON2,
++      .default_monspecs       = &tft_default_monspecs,
++      .guard_time                     = 2,
++};
++
++#elif defined(CONFIG_PM9G45_LCD_CLAA080MB0ACW)
++/* CPT CLAA080 - 8.0", 800x600, 250cd */
++static struct fb_videomode __initdata tft_modes[] = {
++      {
++              .name                   = "800x600 @ 60",
++              .refresh                = 60,
++              .xres                   = 800,          
++              .yres                   = 600,
++              .pixclock               = KHZ2PICOS(25000),
++              .left_margin    = 0,            
++              .right_margin   = 216,
++              .upper_margin   = 0,            
++              .lower_margin   = 28,
++              .hsync_len              = 0,            
++              .vsync_len              = 0,
++              .sync                   = 0,
++              .vmode                  = FB_VMODE_NONINTERLACED,
++      },
++};
++
++static struct fb_monspecs __initdata tft_default_monspecs = {
++      .manufacturer   = "CPT",
++      .monitor                = "CLAA080",
++      .modedb                 = tft_modes,
++      .modedb_len             = ARRAY_SIZE(tft_modes),
++      .hfmin                  = 10000,
++      .hfmax                  = 40000,
++      .vfmin                  = 40,
++      .vfmax                  = 90,
++      .dclkmax                = 40000000,
++};
++
++static struct atmel_lcdfb_info __initdata pm9g45_lcdc_data = {
++      .default_bpp            = 24,
++      .default_dmacon         = ATMEL_LCDC_DMAEN | ATMEL_LCDC_DMA2DEN,
++      .default_lcdcon2        = AT91SAM9G45_DEFAULT_LCDCON2,
++      .default_monspecs       = &tft_default_monspecs,
++      .guard_time                     = 2,
++};
++
++#else
++#error "Undefined LCD display!"
++#endif
++
++#else
++static struct atmel_lcdfb_info __initdata pm9g45_lcdc_data;
++#endif
++
++/*
++ * GPIO Buttons
++ */
++#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
++static struct gpio_keys_button pm9g45_buttons[] = {
++      {       /* SW3 */
++              .code           = KEY_UP,
++              .gpio           = AT91_PIN_PE8,
++              .active_low     = 1,
++              .desc           = "SW3",
++              .wakeup         = 1,
++              .type           = EV_KEY,
++      },
++      {       /* SW4 */
++              .code           = KEY_RIGHT,
++              .gpio           = AT91_PIN_PE7,
++              .active_low     = 1,
++              .desc           = "SW4",
++              .wakeup         = 1,
++              .type           = EV_KEY,
++      }
++};
++
++static struct gpio_keys_platform_data pm9g45_button_data = {
++      .buttons        = pm9g45_buttons,
++      .nbuttons       = ARRAY_SIZE(pm9g45_buttons),
++};
++
++static struct platform_device pm9g45_button_device = {
++      .name           = "gpio-keys",
++      .id             = -1,
++      .num_resources  = 0,
++      .dev            = {
++      .platform_data  = &pm9g45_button_data,
++      }
++};
++
++static void __init pm9g45_add_device_buttons(void)
++{
++      int i;
++
++      printk("at91: pm9g45 registering GPIO buttons\n");
++      platform_device_register(&pm9g45_button_device);
++
++      for (i = 0; i < pm9g45_button_data.nbuttons; i ++) {
++      gpio_to_irq(pm9g45_buttons[i].gpio);
++              at91_set_gpio_input(pm9g45_buttons[i].gpio, 1);
++              at91_set_deglitch(pm9g45_buttons[i].gpio, 1);
++      }
++
++}
++#else
++static void __init pm9g45_add_device_buttons(void) {}
++#endif
++
++/*
++ * AC97
++ */
++static struct ac97c_platform_data pm9g45_ac97_data = {
++      .reset_pin      = 0,
++};
++
++
++/*
++ * LEDs ... these could all be PWM-driven, for variable brightness
++ */
++static struct gpio_led pm9g45_leds[] = {
++      {       /* "right" led, green, userled2 (could be driven by pwm2) */
++              .name                   = "led0",
++              .gpio                   = AT91_PIN_PD0,
++              .active_low             = 1,
++              .default_trigger        = "nand-disk",
++      },
++      {       /* "power" led, yellow (could be driven by pwm0) */
++              .name                   = "led1",
++              .gpio                   = AT91_PIN_PD31,
++              .active_low             = 1,
++              .default_trigger        = "heartbeat",
++      }
++};
++
++#if defined(CONFIG_W1_MASTER_GPIO) || defined(CONFIG_W1_MASTER_GPIO_MODULE)
++struct w1_gpio_platform_data pm9g45_w1_platdata = {
++      .pin            = AT91_PIN_PA31,
++      .is_open_drain  = 0,
++};
++
++static struct platform_device pm9g45_w1_device = {
++      .name           = "w1-gpio",
++      .id             = 0,
++      .dev            = {
++              .platform_data  = &pm9g45_w1_platdata,
++      },
++};
++#endif
++
++#if defined(CONFIG_AT91_CF) || defined(CONFIG_AT91_CF_MODULE) || \
++    defined(CONFIG_BLK_DEV_IDE_AT91) || defined(CONFIG_BLK_DEV_IDE_AT91_MODULE)
++static struct at91_cf_data pm9g45_cf_data = {
++      .det_pin        = AT91_PIN_PD13,
++      .rst_pin        = AT91_PIN_PD14,
++      .irq_pin        = AT91_PIN_PE1,
++      // .vcc_pin     = ... always powered
++      .chipselect     = 4,
++};
++
++static struct resource pm9g45_cf_resources[] = {
++      [0] = {
++              .start  = AT91_CHIPSELECT_4,
++              .end    = AT91_CHIPSELECT_4 + (0x10000000 - 1),
++              .flags  = IORESOURCE_MEM | IORESOURCE_MEM_8AND16BIT,
++      },
++};
++
++static struct platform_device pm9g45_cf_device = {
++      .name           = "at91_cf",
++      .id             = -1,
++      .dev            = {
++              .platform_data  = &pm9g45_cf_data,
++      },
++      .resource       = pm9g45_cf_resources,
++      .num_resources  = ARRAY_SIZE(pm9g45_cf_resources),
++};
++
++#define CF_NWE_SETUP  (9 << 0)
++#define CF_NCS_WR_SETUP       (2 << 8)
++#define CF_NRD_SETUP  (9 << 16)
++#define CF_NCS_RD_SETUP       (2 << 24)
++
++#define CF_NWE_PULSE  (17 << 0)
++#define CF_NCS_WR_PULSE       (27 << 8)
++#define CF_NRD_PULSE  (17 << 16)
++#define CF_NCS_RD_PULSE       (27 << 24)
++
++#define CF_NWE_CYCLE  (40 << 0)
++#define CF_NRD_CYCLE  (40 << 16)
++
++#define CF_TDF                (1 << 16)
++
++static void __init pm9g45_add_device_cf(void) {
++struct at91_cf_data *data = & pm9g45_cf_data;
++unsigned int csa;
++
++      // Setup Compact flash, first enable the address range of
++      // CS4 in HMATRIX user interface
++      csa = at91_sys_read(AT91_MATRIX_EBICSA);
++      at91_sys_write(AT91_MATRIX_EBICSA, csa | AT91_MATRIX_EBI_CS4A_SMC_CF0);
++
++      /* Configure SMC CS4 */
++      at91_sys_write(AT91_SMC_SETUP(4),
++                              (CF_NWE_SETUP |
++                              CF_NCS_WR_SETUP |
++                              CF_NRD_SETUP |
++                              CF_NCS_RD_SETUP));
++
++      at91_sys_write(AT91_SMC_PULSE(4), (CF_NWE_PULSE |
++                                      CF_NCS_WR_PULSE |
++                                      CF_NRD_PULSE |
++                                      CF_NCS_RD_PULSE));
++      at91_sys_write(AT91_SMC_CYCLE(4), (CF_NWE_CYCLE | CF_NRD_CYCLE));
++      // 16 bit
++      at91_sys_write (AT91_SMC_MODE(4), (AT91_SMC_READMODE |
++                                      AT91_SMC_WRITEMODE |
++                                      AT91_SMC_EXNWMODE_DISABLE |
++                                      AT91_SMC_DBW_16 |
++                                      CF_TDF));
++
++      /* input/irq */
++      if (data->irq_pin) {
++              at91_set_gpio_input(data->irq_pin, 0);
++              at91_set_deglitch(data->irq_pin, 1);
++      }
++      at91_set_gpio_input(data->det_pin, 0);
++      at91_set_deglitch(data->det_pin, 1);
++
++      /* outputs, initially off */
++      if (data->vcc_pin)
++              at91_set_gpio_output(data->vcc_pin, 0);
++      if (data->rst_pin)
++              at91_set_gpio_output(data->rst_pin, 0);
++
++      /* force poweron defaults for these pins ... */
++      at91_set_A_periph(AT91_PIN_PC15, 0);    /* */
++      at91_set_A_periph(AT91_PIN_PC12, 0);    /* */
++      at91_set_A_periph(AT91_PIN_PC10, 0);    /* */
++      at91_set_A_periph(AT91_PIN_PC8, 0);     /* */
++      at91_set_A_periph(AT91_PIN_PC9, 0);     /* */
++
++      platform_device_register(&pm9g45_cf_device);
++}
++#else
++void __init pm9g45_add_device_cf(void) {}
++#endif
++
++static void __init pm9g45_board_init(void)
++{
++      /* Serial */
++      at91_add_device_serial();
++      /* USB HS Host */
++      at91_add_device_usbh_ohci(&pm9g45_usbh_hs_data);
++      at91_add_device_usbh_ehci(&pm9g45_usbh_hs_data);
++      /* USB HS Device */
++      //at91_add_device_usba(&pm9g45_usba_udc_data);
++      /* SPI */
++      at91_add_device_spi(pm9g45_spi_devices, ARRAY_SIZE(pm9g45_spi_devices));
++      /* Touchscreen */
++      pm9g45_add_device_ts();
++      /* at91_add_device_tsadcc(&pm9g45_tsadcc_data); Not used for now */
++      /* MMC */
++      at91_add_device_mci(0, &pm9g45_mci0_data);
++      /* Ethernet */
++      at91_add_device_eth(&pm9g45_macb_data);
++      /* NAND */
++      pm9g45_add_device_nand();
++      /* I2C */
++      /* No I2C used in pm9g45 */     
++      /* LCD Controller */
++      pm9g45_add_device_lcdc(&pm9g45_lcdc_data);
++      /* Push Buttons */
++      pm9g45_add_device_buttons();
++      /* AC97 */
++      at91_add_device_ac97(&pm9g45_ac97_data);
++#if defined(CONFIG_W1_MASTER_GPIO) || defined(CONFIG_W1_MASTER_GPIO_MODULE)
++      platform_device_register(&pm9g45_w1_device);
++#endif
++      /* Compact flash */
++      pm9g45_add_device_cf();
++      /* LEDs */
++      at91_gpio_leds(pm9g45_leds, ARRAY_SIZE(pm9g45_leds));
++}
++
++MACHINE_START(PM9G45, "Ronetix PM9G45")
++      /* Maintainer: Atmel */
++      .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         = pm9g45_map_io,
++      .init_irq       = pm9g45_init_irq,
++      .init_machine   = pm9g45_board_init,
++MACHINE_END
+-- 
+1.5.5.6
+
diff --git a/recipes/linux/linux-2.6.30/ronetix-pm9g45/0008-pm9g45-default-configuration-files.patch b/recipes/linux/linux-2.6.30/ronetix-pm9g45/0008-pm9g45-default-configuration-files.patch
new file mode 100644 (file)
index 0000000..d78fac0
--- /dev/null
@@ -0,0 +1,3358 @@
+From 9b8372b14153874ca6d22c21cbd0e9e6ae1c6c72 Mon Sep 17 00:00:00 2001
+From: Asen Dimov <dimov@ronetix.at>
+Date: Tue, 2 Mar 2010 01:56:44 +0200
+Subject: [PATCH] pm9g45: default configuration files
+
+---
+ arch/arm/configs/pm9g45_defconfig    | 1674 ++++++++++++++++++++++++++++++++++
+ arch/arm/configs/pm9g45cs6_defconfig | 1657 +++++++++++++++++++++++++++++++++
+ 2 files changed, 3331 insertions(+), 0 deletions(-)
+ create mode 100644 arch/arm/configs/pm9g45_defconfig
+ create mode 100644 arch/arm/configs/pm9g45cs6_defconfig
+
+diff --git a/arch/arm/configs/pm9g45_defconfig b/arch/arm/configs/pm9g45_defconfig
+new file mode 100644
+index 0000000..a57f0f5
+--- /dev/null
++++ b/arch/arm/configs/pm9g45_defconfig
+@@ -0,0 +1,1674 @@
++#
++# Automatically generated make config: don't edit
++# Linux kernel version: 2.6.30.10
++# Fri Feb 19 20:39:36 2010
++#
++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_HAVE_LATENCYTOP_SUPPORT=y
++CONFIG_LOCKDEP_SUPPORT=y
++CONFIG_TRACE_IRQFLAGS_SUPPORT=y
++CONFIG_HARDIRQS_SW_RESEND=y
++CONFIG_GENERIC_IRQ_PROBE=y
++CONFIG_RWSEM_GENERIC_SPINLOCK=y
++# CONFIG_ARCH_HAS_ILOG2_U32 is not set
++# CONFIG_ARCH_HAS_ILOG2_U64 is not set
++CONFIG_GENERIC_HWEIGHT=y
++CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=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_AUDIT is not set
++
++#
++# RCU Subsystem
++#
++# CONFIG_CLASSIC_RCU is not set
++CONFIG_TREE_RCU=y
++# CONFIG_PREEMPT_RCU is not set
++# CONFIG_RCU_TRACE is not set
++CONFIG_RCU_FANOUT=32
++# CONFIG_RCU_FANOUT_EXACT is not set
++# CONFIG_TREE_RCU_TRACE is not set
++# CONFIG_PREEMPT_RCU_TRACE is not set
++# CONFIG_IKCONFIG is not set
++CONFIG_LOG_BUF_SHIFT=14
++# CONFIG_GROUP_SCHED is not set
++# CONFIG_CGROUPS is not set
++CONFIG_SYSFS_DEPRECATED=y
++CONFIG_SYSFS_DEPRECATED_V2=y
++# CONFIG_RELAY is not set
++CONFIG_NAMESPACES=y
++# CONFIG_UTS_NS is not set
++# CONFIG_IPC_NS is not set
++# CONFIG_USER_NS is not set
++# CONFIG_PID_NS is not set
++# CONFIG_NET_NS is not set
++# CONFIG_BLK_DEV_INITRD is not set
++# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
++CONFIG_SYSCTL=y
++CONFIG_ANON_INODES=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_STRIP_ASM_SYMS=y
++CONFIG_HOTPLUG=y
++CONFIG_PRINTK=y
++CONFIG_BUG=y
++CONFIG_ELF_CORE=y
++CONFIG_BASE_FULL=y
++CONFIG_FUTEX=y
++CONFIG_EPOLL=y
++CONFIG_SIGNALFD=y
++CONFIG_TIMERFD=y
++CONFIG_EVENTFD=y
++CONFIG_SHMEM=y
++CONFIG_AIO=y
++CONFIG_VM_EVENT_COUNTERS=y
++CONFIG_COMPAT_BRK=y
++CONFIG_SLAB=y
++# CONFIG_SLUB is not set
++# CONFIG_SLOB is not set
++# CONFIG_PROFILING is not set
++# CONFIG_MARKERS is not set
++CONFIG_HAVE_OPROFILE=y
++# CONFIG_KPROBES is not set
++CONFIG_HAVE_KPROBES=y
++CONFIG_HAVE_KRETPROBES=y
++CONFIG_HAVE_CLK=y
++# CONFIG_SLOW_WORK is not set
++CONFIG_HAVE_GENERIC_DMA_COHERENT=y
++CONFIG_SLABINFO=y
++CONFIG_RT_MUTEXES=y
++CONFIG_BASE_SMALL=0
++CONFIG_MODULES=y
++# CONFIG_MODULE_FORCE_LOAD is not set
++CONFIG_MODULE_UNLOAD=y
++# CONFIG_MODULE_FORCE_UNLOAD is not set
++# CONFIG_MODVERSIONS is not set
++# CONFIG_MODULE_SRCVERSION_ALL is not set
++CONFIG_BLOCK=y
++# CONFIG_LBD is not set
++# CONFIG_BLK_DEV_BSG is not set
++# CONFIG_BLK_DEV_INTEGRITY 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"
++# CONFIG_FREEZER is not set
++
++#
++# 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_CLPS711X is not set
++# CONFIG_ARCH_EBSA110 is not set
++# CONFIG_ARCH_EP93XX is not set
++# CONFIG_ARCH_GEMINI 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_KIRKWOOD is not set
++# CONFIG_ARCH_KS8695 is not set
++# CONFIG_ARCH_NS9XXX is not set
++# CONFIG_ARCH_LOKI is not set
++# CONFIG_ARCH_MV78XX0 is not set
++# CONFIG_ARCH_MXC is not set
++# CONFIG_ARCH_ORION5X is not set
++# CONFIG_ARCH_PNX4008 is not set
++# CONFIG_ARCH_PXA is not set
++# CONFIG_ARCH_MMP is not set
++# CONFIG_ARCH_RPC is not set
++# CONFIG_ARCH_SA1100 is not set
++# CONFIG_ARCH_S3C2410 is not set
++# CONFIG_ARCH_S3C64XX is not set
++# CONFIG_ARCH_SHARK is not set
++# CONFIG_ARCH_LH7A40X is not set
++# CONFIG_ARCH_DAVINCI is not set
++# CONFIG_ARCH_OMAP is not set
++# CONFIG_ARCH_MSM is not set
++# CONFIG_ARCH_W90X900 is not set
++
++#
++# Atmel AT91 System-on-Chip
++#
++# CONFIG_ARCH_AT91RM9200 is not set
++# CONFIG_ARCH_AT91SAM9260 is not set
++# CONFIG_ARCH_AT91SAM9261 is not set
++# CONFIG_ARCH_AT91SAM9G10 is not set
++# CONFIG_ARCH_AT91SAM9263 is not set
++# CONFIG_ARCH_AT91SAM9RL is not set
++# CONFIG_ARCH_AT91SAM9G20 is not set
++CONFIG_ARCH_AT91SAM9G45=y
++# CONFIG_ARCH_AT91CAP9 is not set
++# CONFIG_ARCH_AT572D940HF is not set
++# CONFIG_ARCH_AT91X40 is not set
++CONFIG_AT91_PMC_UNIT=y
++
++#
++# AT91SAM9G45 Board Type
++#
++# CONFIG_MACH_AT91SAM9G45EKES is not set
++CONFIG_MACH_PM9G45=y
++CONFIG_PM9G45_SYSTEM_RAM_CS1=y
++# CONFIG_PM9G45_SYSTEM_RAM_CS6 is not set
++CONFIG_PM9G45_LCD_TX09D70=y
++# CONFIG_PM9G45_LCD_RA158 is not set
++# CONFIG_PM9G45_LCD_TCG057VGLAC is not set
++# CONFIG_PM9G45_LCD_GTTV57NN771E0 is not set
++# CONFIG_PM9G45_LCD_GLAA057VA01CW is not set
++# CONFIG_PM9G45_LCD_GATW70SN8H1E0 is not set
++# CONFIG_PM9G45_LCD_CLAA080MB0ACW is not set
++
++#
++# AT91 Board Options
++#
++CONFIG_MTD_AT91_DATAFLASH_CARD=y
++# CONFIG_MTD_NAND_ATMEL_BUSWIDTH_16 is not set
++
++#
++# AT91 Feature Selections
++#
++CONFIG_AT91_PROGRAMMABLE_CLOCKS=y
++CONFIG_AT91_TIMER_HZ=100
++CONFIG_AT91_EARLY_DBGU=y
++# CONFIG_AT91_EARLY_USART0 is not set
++# CONFIG_AT91_EARLY_USART1 is not set
++# CONFIG_AT91_EARLY_USART2 is not set
++# CONFIG_AT91_EARLY_USART3 is not set
++# CONFIG_AT91_EARLY_USART4 is not set
++# CONFIG_AT91_EARLY_USART5 is not set
++
++#
++# Processor Type
++#
++CONFIG_CPU_32=y
++CONFIG_CPU_ARM926T=y
++CONFIG_CPU_32v5=y
++CONFIG_CPU_ABRT_EV5TJ=y
++CONFIG_CPU_PABRT_NOIFAR=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
++CONFIG_PCCARD=y
++CONFIG_PCMCIA_DEBUG=y
++CONFIG_PCMCIA=y
++# CONFIG_PCMCIA_LOAD_CIS is not set
++# CONFIG_PCMCIA_IOCTL is not set
++
++#
++# PC-card bridges
++#
++CONFIG_AT91_CF=y
++
++#
++# Kernel Features
++#
++# CONFIG_NO_HZ is not set
++# CONFIG_HIGH_RES_TIMERS is not set
++CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
++CONFIG_VMSPLIT_3G=y
++# CONFIG_VMSPLIT_2G is not set
++# CONFIG_VMSPLIT_1G is not set
++CONFIG_PAGE_OFFSET=0xC0000000
++# CONFIG_PREEMPT is not set
++CONFIG_HZ=100
++CONFIG_AEABI=y
++CONFIG_OABI_COMPAT=y
++# CONFIG_ARCH_HAS_HOLES_MEMORYMODEL is not set
++# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
++# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
++# CONFIG_HIGHMEM is not set
++CONFIG_SELECT_MEMORY_MODEL=y
++CONFIG_FLATMEM_MANUAL=y
++# CONFIG_DISCONTIGMEM_MANUAL is not set
++# CONFIG_SPARSEMEM_MANUAL is not set
++CONFIG_FLATMEM=y
++CONFIG_FLAT_NODE_MEM_MAP=y
++CONFIG_PAGEFLAGS_EXTENDED=y
++CONFIG_SPLIT_PTLOCK_CPUS=4096
++# CONFIG_PHYS_ADDR_T_64BIT is not set
++CONFIG_ZONE_DMA_FLAG=0
++CONFIG_VIRT_TO_BUS=y
++CONFIG_UNEVICTABLE_LRU=y
++CONFIG_HAVE_MLOCK=y
++CONFIG_HAVE_MLOCKED_PAGE_BIT=y
++CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
++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=""
++# CONFIG_XIP_KERNEL is not set
++# CONFIG_KEXEC is not set
++
++#
++# CPU Power Management
++#
++# CONFIG_CPU_IDLE is not set
++
++#
++# Floating point emulation
++#
++
++#
++# At least one emulation must be selected
++#
++CONFIG_FPE_NWFPE=y
++# CONFIG_FPE_NWFPE_XP is not set
++# CONFIG_FPE_FASTFPE is not set
++# CONFIG_VFP is not set
++
++#
++# Userspace binary formats
++#
++CONFIG_BINFMT_ELF=y
++# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
++CONFIG_HAVE_AOUT=y
++# CONFIG_BINFMT_AOUT is not set
++# CONFIG_BINFMT_MISC is not set
++
++#
++# Power management options
++#
++# CONFIG_PM is not set
++CONFIG_ARCH_SUSPEND_POSSIBLE=y
++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 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_IPV6 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_NET_DSA is not set
++# CONFIG_VLAN_8021Q is not set
++# CONFIG_DECNET is not set
++# CONFIG_LLC2 is not set
++# CONFIG_IPX is not set
++# CONFIG_ATALK is not set
++# CONFIG_X25 is not set
++# CONFIG_LAPB is not set
++# CONFIG_ECONET is not set
++# CONFIG_WAN_ROUTER is not set
++# CONFIG_PHONET is not set
++# CONFIG_NET_SCHED is not set
++# CONFIG_DCB is not set
++
++#
++# Network testing
++#
++# CONFIG_NET_PKTGEN is not set
++# CONFIG_HAMRADIO is not set
++# CONFIG_CAN is not set
++# CONFIG_IRDA is not set
++# CONFIG_BT is not set
++# CONFIG_AF_RXRPC is not set
++# CONFIG_WIRELESS is not set
++# CONFIG_WIMAX 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_FIRMWARE_IN_KERNEL=y
++CONFIG_EXTRA_FIRMWARE=""
++# CONFIG_DEBUG_DRIVER is not set
++# CONFIG_DEBUG_DEVRES is not set
++# CONFIG_SYS_HYPERVISOR is not set
++# CONFIG_CONNECTOR is not set
++CONFIG_MTD=y
++# CONFIG_MTD_DEBUG is not set
++# CONFIG_MTD_CONCAT is not set
++CONFIG_MTD_PARTITIONS=y
++# CONFIG_MTD_TESTS is not set
++# CONFIG_MTD_REDBOOT_PARTS is not set
++CONFIG_MTD_CMDLINE_PARTS=y
++# CONFIG_MTD_AFS_PARTS is not set
++# CONFIG_MTD_AR7_PARTS is not set
++
++#
++# User Modules And Translation Layers
++#
++CONFIG_MTD_CHAR=y
++CONFIG_MTD_BLKDEVS=y
++CONFIG_MTD_BLOCK=y
++# CONFIG_FTL is not set
++# CONFIG_NFTL is not set
++# CONFIG_INFTL is not set
++# CONFIG_RFD_FTL is not set
++# CONFIG_SSFDC is not set
++# CONFIG_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=y
++CONFIG_MTD_DATAFLASH_WRITE_VERIFY=y
++# CONFIG_MTD_DATAFLASH_OTP 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_GPIO is not set
++CONFIG_MTD_NAND_IDS=y
++# CONFIG_MTD_NAND_DISKONCHIP is not set
++CONFIG_MTD_NAND_ATMEL=y
++CONFIG_MTD_NAND_ATMEL_ECC_SOFT=y
++# CONFIG_MTD_NAND_ATMEL_ECC_HW is not set
++# CONFIG_MTD_NAND_ATMEL_ECC_NONE is not set
++# CONFIG_MTD_NAND_NANDSIM is not set
++# CONFIG_MTD_NAND_PLATFORM is not set
++# CONFIG_MTD_ALAUDA is not set
++# CONFIG_MTD_ONENAND is not set
++
++#
++# LPDDR flash memory drivers
++#
++# CONFIG_MTD_LPDDR is not set
++
++#
++# UBI - Unsorted block images
++#
++CONFIG_MTD_UBI=y
++CONFIG_MTD_UBI_WL_THRESHOLD=4096
++CONFIG_MTD_UBI_BEB_RESERVE=1
++# CONFIG_MTD_UBI_GLUEBI is not set
++
++#
++# UBI debugging options
++#
++# CONFIG_MTD_UBI_DEBUG is not set
++# CONFIG_PARPORT is not set
++CONFIG_BLK_DEV=y
++# CONFIG_BLK_DEV_COW_COMMON is not set
++CONFIG_BLK_DEV_LOOP=y
++# CONFIG_BLK_DEV_CRYPTOLOOP 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=4
++CONFIG_BLK_DEV_RAM_SIZE=8192
++# CONFIG_BLK_DEV_XIP is not set
++# CONFIG_CDROM_PKTCDVD is not set
++# CONFIG_ATA_OVER_ETH is not set
++CONFIG_MISC_DEVICES=y
++# CONFIG_ATMEL_PWM is not set
++CONFIG_ATMEL_TCLIB=y
++CONFIG_ATMEL_TCB_CLKSRC=y
++CONFIG_ATMEL_TCB_CLKSRC_BLOCK=0
++CONFIG_ATMEL_SSC=y
++# CONFIG_ENCLOSURE_SERVICES is not set
++# CONFIG_C2PORT is not set
++
++#
++# EEPROM support
++#
++# CONFIG_EEPROM_AT25 is not set
++# CONFIG_EEPROM_93CX6 is not set
++CONFIG_HAVE_IDE=y
++CONFIG_IDE=y
++
++#
++# Please see Documentation/ide/ide.txt for help/info on IDE drives
++#
++CONFIG_IDE_XFER_MODE=y
++CONFIG_IDE_TIMINGS=y
++# CONFIG_BLK_DEV_IDE_SATA is not set
++CONFIG_IDE_GD=y
++CONFIG_IDE_GD_ATA=y
++# CONFIG_IDE_GD_ATAPI is not set
++CONFIG_BLK_DEV_IDECS=y
++# CONFIG_BLK_DEV_IDECD is not set
++# CONFIG_BLK_DEV_IDETAPE is not set
++# CONFIG_IDE_TASK_IOCTL is not set
++CONFIG_IDE_PROC_FS=y
++
++#
++# IDE chipset support/bugfixes
++#
++# CONFIG_BLK_DEV_PLATFORM is not set
++CONFIG_BLK_DEV_IDE_AT91=y
++# CONFIG_BLK_DEV_IDEDMA 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 is not set
++# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
++# CONFIG_SCSI_DH is not set
++# CONFIG_SCSI_OSD_INITIATOR is not set
++# CONFIG_ATA is not set
++# CONFIG_MD is not set
++CONFIG_NETDEVICES=y
++CONFIG_COMPAT_NET_DEV_OPS=y
++# CONFIG_DUMMY is not set
++# CONFIG_BONDING is not set
++# CONFIG_MACVLAN is not set
++# CONFIG_EQUALIZER is not set
++# CONFIG_TUN is not set
++# CONFIG_VETH is not set
++CONFIG_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_REALTEK_PHY is not set
++CONFIG_NATIONAL_PHY=y
++# CONFIG_STE10XP is not set
++# CONFIG_LSI_ET1011C_PHY is not set
++# CONFIG_FIXED_PHY is not set
++# CONFIG_MDIO_BITBANG is not set
++CONFIG_NET_ETHERNET=y
++# CONFIG_MII is not set
++CONFIG_MACB=y
++# CONFIG_AX88796 is not set
++# CONFIG_SMC91X is not set
++# CONFIG_DM9000 is not set
++# CONFIG_ENC28J60 is not set
++# CONFIG_ETHOC is not set
++# CONFIG_SMC911X is not set
++# CONFIG_SMSC911X is not set
++# CONFIG_DNET is not set
++# CONFIG_IBM_NEW_EMAC_ZMII is not set
++# CONFIG_IBM_NEW_EMAC_RGMII is not set
++# CONFIG_IBM_NEW_EMAC_TAH is not set
++# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
++# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
++# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
++# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
++# CONFIG_B44 is not set
++# CONFIG_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
++
++#
++# Enable WiMAX (Networking options) to see the WiMAX drivers
++#
++
++#
++# USB Network Adapters
++#
++# CONFIG_USB_CATC is not set
++# CONFIG_USB_KAWETH is not set
++# CONFIG_USB_PEGASUS is not set
++# CONFIG_USB_RTL8150 is not set
++# CONFIG_USB_USBNET is not set
++# CONFIG_NET_PCMCIA is not set
++# CONFIG_WAN is not set
++# CONFIG_PPP is not set
++# CONFIG_SLIP is not set
++# CONFIG_NETCONSOLE is not set
++# CONFIG_NETPOLL is not set
++# CONFIG_NET_POLL_CONTROLLER is not set
++# CONFIG_ISDN is not set
++
++#
++# 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=272
++CONFIG_INPUT_JOYDEV=y
++CONFIG_INPUT_EVDEV=y
++CONFIG_INPUT_EVBUG=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=y
++CONFIG_MOUSE_PS2=y
++CONFIG_MOUSE_PS2_ALPS=y
++CONFIG_MOUSE_PS2_LOGIPS2PP=y
++CONFIG_MOUSE_PS2_SYNAPTICS=y
++CONFIG_MOUSE_PS2_TRACKPOINT=y
++# CONFIG_MOUSE_PS2_ELANTECH is not set
++# CONFIG_MOUSE_PS2_TOUCHKIT is not set
++# CONFIG_MOUSE_SERIAL is not set
++# CONFIG_MOUSE_APPLETOUCH is not set
++# CONFIG_MOUSE_BCM5974 is not set
++# CONFIG_MOUSE_VSXXXAA is not set
++# CONFIG_MOUSE_GPIO is not set
++# CONFIG_INPUT_JOYSTICK is not set
++# CONFIG_INPUT_TABLET is not set
++CONFIG_INPUT_TOUCHSCREEN=y
++CONFIG_TOUCHSCREEN_ADS7846=y
++# CONFIG_TOUCHSCREEN_AD7877 is not set
++# CONFIG_TOUCHSCREEN_AD7879_SPI is not set
++# CONFIG_TOUCHSCREEN_AD7879 is not set
++# CONFIG_TOUCHSCREEN_FUJITSU is not set
++# CONFIG_TOUCHSCREEN_GUNZE is not set
++# CONFIG_TOUCHSCREEN_ELO is not set
++# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
++# CONFIG_TOUCHSCREEN_MTOUCH is not set
++# CONFIG_TOUCHSCREEN_INEXIO 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_ATMEL_TSADCC is not set
++# CONFIG_TOUCHSCREEN_WM97XX is not set
++# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
++# CONFIG_TOUCHSCREEN_TOUCHIT213 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_CONSOLE_TRANSLATIONS=y
++CONFIG_VT_CONSOLE=y
++CONFIG_HW_CONSOLE=y
++# CONFIG_VT_HW_CONSOLE_BINDING is not set
++CONFIG_DEVKMEM=y
++# 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_PDC=y
++# CONFIG_SERIAL_ATMEL_TTYAT is not set
++# CONFIG_SERIAL_MAX3100 is not set
++CONFIG_SERIAL_CORE=y
++CONFIG_SERIAL_CORE_CONSOLE=y
++CONFIG_UNIX98_PTYS=y
++# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
++CONFIG_LEGACY_PTYS=y
++CONFIG_LEGACY_PTY_COUNT=4
++# CONFIG_IPMI_HANDLER is not set
++CONFIG_HW_RANDOM=y
++# CONFIG_HW_RANDOM_TIMERIOMEM 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_IPWIRELESS is not set
++# CONFIG_RAW_DRIVER is not set
++# CONFIG_TCG_TPM is not set
++# CONFIG_I2C is not set
++CONFIG_SPI=y
++CONFIG_SPI_DEBUG=y
++CONFIG_SPI_MASTER=y
++
++#
++# SPI Master Controller Drivers
++#
++CONFIG_SPI_ATMEL=y
++# CONFIG_SPI_BITBANG is not set
++# CONFIG_SPI_GPIO is not set
++
++#
++# SPI Protocol Masters
++#
++CONFIG_SPI_SPIDEV=y
++# CONFIG_SPI_TLE62X0 is not set
++CONFIG_ARCH_REQUIRE_GPIOLIB=y
++CONFIG_GPIOLIB=y
++# CONFIG_DEBUG_GPIO is not set
++# CONFIG_GPIO_SYSFS is not set
++
++#
++# Memory mapped GPIO expanders:
++#
++
++#
++# I2C GPIO expanders:
++#
++
++#
++# PCI GPIO expanders:
++#
++
++#
++# SPI GPIO expanders:
++#
++# CONFIG_GPIO_MAX7301 is not set
++# CONFIG_GPIO_MCP23S08 is not set
++CONFIG_W1=y
++
++#
++# 1-wire Bus Masters
++#
++# CONFIG_W1_MASTER_DS2490 is not set
++# CONFIG_W1_MASTER_DS1WM is not set
++CONFIG_W1_MASTER_GPIO=y
++
++#
++# 1-wire Slaves
++#
++# CONFIG_W1_SLAVE_THERM is not set
++# CONFIG_W1_SLAVE_SMEM is not set
++# CONFIG_W1_SLAVE_DS2431 is not set
++# CONFIG_W1_SLAVE_DS2433 is not set
++# CONFIG_W1_SLAVE_DS2760 is not set
++# CONFIG_W1_SLAVE_BQ27000 is not set
++# CONFIG_POWER_SUPPLY is not set
++# CONFIG_HWMON is not set
++# CONFIG_THERMAL is not set
++# CONFIG_THERMAL_HWMON is not set
++# CONFIG_WATCHDOG is not set
++CONFIG_SSB_POSSIBLE=y
++
++#
++# Sonics Silicon Backplane
++#
++# CONFIG_SSB is not set
++
++#
++# Multifunction device drivers
++#
++# CONFIG_MFD_CORE is not set
++# CONFIG_MFD_SM501 is not set
++# CONFIG_MFD_ASIC3 is not set
++# CONFIG_HTC_EGPIO is not set
++# CONFIG_HTC_PASIC3 is not set
++# CONFIG_UCB1400_CORE is not set
++# CONFIG_MFD_TMIO is not set
++# CONFIG_MFD_T7L66XB is not set
++# CONFIG_MFD_TC6387XB is not set
++# CONFIG_MFD_TC6393XB is not set
++
++#
++# Multimedia devices
++#
++
++#
++# Multimedia core support
++#
++# CONFIG_VIDEO_DEV is not set
++# CONFIG_DVB_CORE is not set
++# CONFIG_VIDEO_MEDIA is not set
++
++#
++# Multimedia drivers
++#
++# CONFIG_DAB is not set
++
++#
++# Graphics support
++#
++# 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_BOOT_VESA_SUPPORT is not set
++CONFIG_FB_CFB_FILLRECT=y
++CONFIG_FB_CFB_COPYAREA=y
++CONFIG_FB_CFB_IMAGEBLIT=y
++# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
++# CONFIG_FB_SYS_FILLRECT is not set
++# CONFIG_FB_SYS_COPYAREA is not set
++# CONFIG_FB_SYS_IMAGEBLIT is not set
++# CONFIG_FB_FOREIGN_ENDIAN is not set
++# CONFIG_FB_SYS_FOPS is not set
++# CONFIG_FB_SVGALIB is not set
++# CONFIG_FB_MACMODES is not set
++# CONFIG_FB_BACKLIGHT is not set
++# CONFIG_FB_MODE_HELPERS is not set
++# CONFIG_FB_TILEBLITTING is not set
++
++#
++# Frame buffer hardware drivers
++#
++# CONFIG_FB_S1D15605 is not set
++# CONFIG_FB_S1D13XXX is not set
++CONFIG_FB_ATMEL=y
++# CONFIG_FB_VIRTUAL is not set
++# CONFIG_FB_METRONOME is not set
++# CONFIG_FB_MB862XX is not set
++# CONFIG_FB_BROADSHEET is not set
++CONFIG_BACKLIGHT_LCD_SUPPORT=y
++CONFIG_LCD_CLASS_DEVICE=y
++# CONFIG_LCD_LTV350QV is not set
++# CONFIG_LCD_ILI9320 is not set
++# CONFIG_LCD_TDO24M is not set
++# CONFIG_LCD_VGG2432A4 is not set
++CONFIG_LCD_PLATFORM=y
++CONFIG_BACKLIGHT_CLASS_DEVICE=y
++CONFIG_BACKLIGHT_ATMEL_LCDC=y
++# CONFIG_BACKLIGHT_GENERIC is not set
++
++#
++# Display device support
++#
++CONFIG_DISPLAY_SUPPORT=y
++
++#
++# Display hardware drivers
++#
++
++#
++# Console display driver support
++#
++# CONFIG_VGA_CONSOLE is not set
++CONFIG_DUMMY_CONSOLE=y
++CONFIG_FRAMEBUFFER_CONSOLE=y
++CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
++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 is not set
++# CONFIG_LOGO_LINUX_VGA16 is not set
++CONFIG_LOGO_LINUX_CLUT224=y
++CONFIG_SOUND=y
++# CONFIG_SOUND_OSS_CORE is not set
++CONFIG_SND=y
++CONFIG_SND_TIMER=y
++CONFIG_SND_PCM=y
++# CONFIG_SND_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
++CONFIG_SND_VMASTER=y
++CONFIG_SND_AC97_CODEC=y
++# CONFIG_SND_DRIVERS is not set
++# CONFIG_SND_ARM is not set
++
++#
++# Atmel devices (AVR32 and AT91)
++#
++CONFIG_SND_ATMEL_AC97C=y
++# CONFIG_SND_SPI is not set
++# CONFIG_SND_USB is not set
++# CONFIG_SND_PCMCIA is not set
++# CONFIG_SND_SOC is not set
++# CONFIG_SOUND_PRIME is not set
++CONFIG_AC97_BUS=y
++CONFIG_HID_SUPPORT=y
++CONFIG_HID=y
++CONFIG_HID_DEBUG=y
++# CONFIG_HIDRAW is not set
++
++#
++# USB Input Devices
++#
++CONFIG_USB_HID=y
++# CONFIG_HID_PID is not set
++# CONFIG_USB_HIDDEV is not set
++
++#
++# Special HID drivers
++#
++CONFIG_HID_A4TECH=y
++CONFIG_HID_APPLE=y
++CONFIG_HID_BELKIN=y
++CONFIG_HID_CHERRY=y
++CONFIG_HID_CHICONY=y
++CONFIG_HID_CYPRESS=y
++# CONFIG_DRAGONRISE_FF is not set
++CONFIG_HID_EZKEY=y
++CONFIG_HID_KYE=y
++CONFIG_HID_GYRATION=y
++CONFIG_HID_KENSINGTON=y
++CONFIG_HID_LOGITECH=y
++# CONFIG_LOGITECH_FF is not set
++# CONFIG_LOGIRUMBLEPAD2_FF is not set
++CONFIG_HID_MICROSOFT=y
++CONFIG_HID_MONTEREY=y
++CONFIG_HID_NTRIG=y
++CONFIG_HID_PANTHERLORD=y
++# CONFIG_PANTHERLORD_FF is not set
++CONFIG_HID_PETALYNX=y
++CONFIG_HID_SAMSUNG=y
++CONFIG_HID_SONY=y
++CONFIG_HID_SUNPLUS=y
++# CONFIG_GREENASIA_FF is not set
++CONFIG_HID_TOPSEED=y
++# CONFIG_THRUSTMASTER_FF is not set
++# CONFIG_ZEROPLUS_FF is not set
++CONFIG_USB_SUPPORT=y
++CONFIG_USB_ARCH_HAS_HCD=y
++CONFIG_USB_ARCH_HAS_OHCI=y
++CONFIG_USB_ARCH_HAS_EHCI=y
++CONFIG_USB=y
++# CONFIG_USB_DEBUG is not set
++CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
++
++#
++# Miscellaneous USB options
++#
++CONFIG_USB_DEVICEFS=y
++# CONFIG_USB_DEVICE_CLASS is not set
++# CONFIG_USB_DYNAMIC_MINORS is not set
++# CONFIG_USB_OTG is not set
++# CONFIG_USB_MON is not set
++# CONFIG_USB_WUSB is not set
++# CONFIG_USB_WUSB_CBAF is not set
++
++#
++# USB Host Controller Drivers
++#
++# CONFIG_USB_C67X00_HCD is not set
++CONFIG_USB_EHCI_HCD=y
++# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
++# CONFIG_USB_EHCI_TT_NEWSCHED is not set
++# CONFIG_USB_OXU210HP_HCD is not set
++# CONFIG_USB_ISP116X_HCD is not set
++# CONFIG_USB_ISP1760_HCD is not set
++CONFIG_USB_OHCI_HCD=y
++# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
++# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
++CONFIG_USB_OHCI_LITTLE_ENDIAN=y
++# CONFIG_USB_SL811_HCD is not set
++# CONFIG_USB_R8A66597_HCD is not set
++# CONFIG_USB_HWA_HCD is not set
++# CONFIG_USB_MUSB_HDRC is not set
++# CONFIG_USB_GADGET_MUSB_HDRC is not set
++
++#
++# USB Device Class drivers
++#
++# CONFIG_USB_ACM is not set
++# CONFIG_USB_PRINTER is not set
++# CONFIG_USB_WDM is not set
++# CONFIG_USB_TMC is not set
++
++#
++# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
++#
++
++#
++# also be needed; see USB_STORAGE Help for more info
++#
++CONFIG_USB_STORAGE=y
++# CONFIG_USB_STORAGE_DEBUG is not set
++# CONFIG_USB_STORAGE_DATAFAB is not set
++# CONFIG_USB_STORAGE_FREECOM is not set
++# CONFIG_USB_STORAGE_ISD200 is not set
++# CONFIG_USB_STORAGE_USBAT is not set
++# CONFIG_USB_STORAGE_SDDR09 is not set
++# CONFIG_USB_STORAGE_SDDR55 is not set
++# CONFIG_USB_STORAGE_JUMPSHOT is not set
++# CONFIG_USB_STORAGE_ALAUDA is not set
++# CONFIG_USB_STORAGE_ONETOUCH is not set
++# CONFIG_USB_STORAGE_KARMA is not set
++# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
++# CONFIG_USB_LIBUSUAL is not set
++
++#
++# USB Imaging devices
++#
++# CONFIG_USB_MDC800 is not set
++# CONFIG_USB_MICROTEK is not set
++
++#
++# USB port drivers
++#
++# CONFIG_USB_SERIAL is not set
++
++#
++# USB Miscellaneous drivers
++#
++# CONFIG_USB_EMI62 is not set
++# CONFIG_USB_EMI26 is not set
++# CONFIG_USB_ADUTUX is not set
++# CONFIG_USB_SEVSEG is not set
++# CONFIG_USB_RIO500 is not set
++# CONFIG_USB_LEGOTOWER is not set
++# CONFIG_USB_LCD is not set
++# CONFIG_USB_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_IDMOUSE is not set
++# CONFIG_USB_FTDI_ELAN is not set
++# CONFIG_USB_APPLEDISPLAY is not set
++# CONFIG_USB_SISUSBVGA is not set
++# CONFIG_USB_LD is not set
++# CONFIG_USB_TRANCEVIBRATOR is not set
++# CONFIG_USB_IOWARRIOR is not set
++# CONFIG_USB_TEST is not set
++# CONFIG_USB_ISIGHTFW is not set
++# CONFIG_USB_VST is not set
++CONFIG_USB_GADGET=y
++# CONFIG_USB_GADGET_DEBUG is not set
++# CONFIG_USB_GADGET_DEBUG_FILES is not set
++# CONFIG_USB_GADGET_DEBUG_FS is not set
++CONFIG_USB_GADGET_VBUS_DRAW=2
++CONFIG_USB_GADGET_SELECTED=y
++# CONFIG_USB_GADGET_AT91 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_LH7A40X is not set
++# CONFIG_USB_GADGET_OMAP is not set
++# CONFIG_USB_GADGET_PXA25X is not set
++# CONFIG_USB_GADGET_PXA27X is not set
++# CONFIG_USB_GADGET_S3C2410 is not set
++# CONFIG_USB_GADGET_IMX is not set
++# CONFIG_USB_GADGET_M66592 is not set
++# CONFIG_USB_GADGET_AMD5536UDC is not set
++# CONFIG_USB_GADGET_FSL_QE is not set
++# CONFIG_USB_GADGET_CI13XXX is not set
++# CONFIG_USB_GADGET_NET2280 is not set
++# CONFIG_USB_GADGET_GOKU 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 is not set
++CONFIG_USB_G_SERIAL=y
++# CONFIG_USB_MIDI_GADGET is not set
++# CONFIG_USB_G_PRINTER is not set
++# CONFIG_USB_CDC_COMPOSITE is not set
++
++#
++# OTG and related infrastructure
++#
++# CONFIG_USB_GPIO_VBUS is not set
++# CONFIG_NOP_USB_XCEIV is not set
++CONFIG_MMC=y
++# CONFIG_MMC_DEBUG is not set
++# CONFIG_MMC_UNSAFE_RESUME is not set
++
++#
++# MMC/SD/SDIO Card Drivers
++#
++CONFIG_MMC_BLOCK=y
++CONFIG_MMC_BLOCK_BOUNCE=y
++# CONFIG_SDIO_UART is not set
++# CONFIG_MMC_TEST is not set
++
++#
++# MMC/SD/SDIO Host Controller Drivers
++#
++# CONFIG_MMC_SDHCI is not set
++# CONFIG_MMC_AT91 is not set
++CONFIG_MMC_ATMELMCI=y
++CONFIG_MMC_ATMELMCI_DMA=y
++# CONFIG_MMC_SPI is not set
++# CONFIG_MEMSTICK is not set
++# CONFIG_ACCESSIBILITY is not set
++CONFIG_NEW_LEDS=y
++CONFIG_LEDS_CLASS=y
++
++#
++# LED drivers
++#
++CONFIG_LEDS_GPIO=y
++CONFIG_LEDS_GPIO_PLATFORM=y
++# CONFIG_LEDS_DAC124S085 is not set
++
++#
++# LED Triggers
++#
++CONFIG_LEDS_TRIGGERS=y
++CONFIG_LEDS_TRIGGER_TIMER=y
++# CONFIG_LEDS_TRIGGER_IDE_DISK is not set
++CONFIG_LEDS_TRIGGER_HEARTBEAT=y
++# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
++CONFIG_LEDS_TRIGGER_GPIO=y
++# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set
++
++#
++# iptables trigger is under Netfilter config (LED target)
++#
++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
++#
++# CONFIG_RTC_DRV_M41T94 is not set
++# CONFIG_RTC_DRV_DS1305 is not set
++# CONFIG_RTC_DRV_DS1390 is not set
++# CONFIG_RTC_DRV_MAX6902 is not set
++# CONFIG_RTC_DRV_R9701 is not set
++# CONFIG_RTC_DRV_RS5C348 is not set
++# CONFIG_RTC_DRV_DS3234 is not set
++
++#
++# Platform RTC drivers
++#
++# CONFIG_RTC_DRV_CMOS is not set
++# CONFIG_RTC_DRV_DS1286 is not set
++# CONFIG_RTC_DRV_DS1511 is not set
++# CONFIG_RTC_DRV_DS1553 is not set
++# CONFIG_RTC_DRV_DS1742 is not set
++# CONFIG_RTC_DRV_STK17TA8 is not set
++# CONFIG_RTC_DRV_M48T86 is not set
++# CONFIG_RTC_DRV_M48T35 is not set
++# CONFIG_RTC_DRV_M48T59 is not set
++# CONFIG_RTC_DRV_BQ4802 is not set
++# CONFIG_RTC_DRV_V3020 is not set
++
++#
++# on-CPU RTC drivers
++#
++CONFIG_RTC_DRV_AT91SAM9=y
++CONFIG_RTC_DRV_AT91SAM9_RTT=0
++CONFIG_RTC_DRV_AT91SAM9_GPBR=0
++CONFIG_DMADEVICES=y
++
++#
++# DMA Devices
++#
++CONFIG_AT_HDMAC=y
++CONFIG_DMA_ENGINE=y
++
++#
++# DMA Clients
++#
++# CONFIG_NET_DMA is not set
++# CONFIG_ASYNC_TX_DMA is not set
++# CONFIG_DMATEST is not set
++# CONFIG_AUXDISPLAY is not set
++# CONFIG_REGULATOR is not set
++# CONFIG_UIO is not set
++# CONFIG_STAGING is not set
++
++#
++# File systems
++#
++# CONFIG_EXT2_FS is not set
++# CONFIG_EXT3_FS is not set
++# CONFIG_EXT4_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_BTRFS_FS is not set
++CONFIG_FILE_LOCKING=y
++CONFIG_DNOTIFY=y
++CONFIG_INOTIFY=y
++CONFIG_INOTIFY_USER=y
++# CONFIG_QUOTA is not set
++# CONFIG_AUTOFS_FS is not set
++# CONFIG_AUTOFS4_FS is not set
++# CONFIG_FUSE_FS is not set
++
++#
++# Caches
++#
++# CONFIG_FSCACHE is not set
++
++#
++# CD-ROM/DVD Filesystems
++#
++# CONFIG_ISO9660_FS is not set
++# CONFIG_UDF_FS is not set
++
++#
++# DOS/FAT/NT Filesystems
++#
++CONFIG_FAT_FS=y
++# CONFIG_MSDOS_FS 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_PROC_PAGE_MONITOR=y
++CONFIG_SYSFS=y
++CONFIG_TMPFS=y
++# CONFIG_TMPFS_POSIX_ACL is not set
++# CONFIG_HUGETLB_PAGE is not set
++# CONFIG_CONFIGFS_FS is not set
++CONFIG_MISC_FILESYSTEMS=y
++# CONFIG_ADFS_FS is not set
++# CONFIG_AFFS_FS is not set
++# CONFIG_HFS_FS is not set
++# CONFIG_HFSPLUS_FS is not set
++# CONFIG_BEFS_FS is not set
++# CONFIG_BFS_FS is not set
++# CONFIG_EFS_FS is not set
++CONFIG_JFFS2_FS=y
++CONFIG_JFFS2_FS_DEBUG=0
++CONFIG_JFFS2_FS_WRITEBUFFER=y
++# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
++CONFIG_JFFS2_SUMMARY=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 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_UBIFS_FS is not set
++# CONFIG_CRAMFS is not set
++# CONFIG_SQUASHFS is not set
++# CONFIG_VXFS_FS is not set
++# CONFIG_MINIX_FS is not set
++# CONFIG_OMFS_FS is not set
++# CONFIG_HPFS_FS is not set
++# CONFIG_QNX4FS_FS is not set
++# CONFIG_ROMFS_FS is not set
++# CONFIG_SYSV_FS is not set
++# CONFIG_UFS_FS is not set
++# CONFIG_NILFS2_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_NFSD is not set
++CONFIG_LOCKD=y
++CONFIG_LOCKD_V4=y
++CONFIG_NFS_COMMON=y
++CONFIG_SUNRPC=y
++# CONFIG_RPCSEC_GSS_KRB5 is not set
++# CONFIG_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
++
++#
++# Kernel hacking
++#
++CONFIG_PRINTK_TIME=y
++CONFIG_ENABLE_WARN_DEPRECATED=y
++CONFIG_ENABLE_MUST_CHECK=y
++CONFIG_FRAME_WARN=1024
++# 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=y
++# CONFIG_DEBUG_SHIRQ is not set
++CONFIG_DETECT_SOFTLOCKUP=y
++# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
++CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
++CONFIG_DETECT_HUNG_TASK=y
++# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
++CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0
++CONFIG_SCHED_DEBUG=y
++# CONFIG_SCHEDSTATS is not set
++CONFIG_TIMER_STATS=y
++# CONFIG_DEBUG_OBJECTS 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_WRITECOUNT is not set
++CONFIG_DEBUG_MEMORY_INIT=y
++# CONFIG_DEBUG_LIST is not set
++# CONFIG_DEBUG_SG is not set
++# CONFIG_DEBUG_NOTIFIERS is not set
++# CONFIG_BOOT_PRINTK_DELAY is not set
++# CONFIG_RCU_TORTURE_TEST is not set
++# CONFIG_RCU_CPU_STALL_DETECTOR is not set
++# CONFIG_BACKTRACE_SELF_TEST is not set
++# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
++# CONFIG_FAULT_INJECTION is not set
++# CONFIG_LATENCYTOP is not set
++# CONFIG_SYSCTL_SYSCALL_CHECK is not set
++# CONFIG_PAGE_POISONING is not set
++CONFIG_HAVE_FUNCTION_TRACER=y
++CONFIG_TRACING_SUPPORT=y
++
++#
++# Tracers
++#
++# CONFIG_FUNCTION_TRACER is not set
++# CONFIG_IRQSOFF_TRACER is not set
++# CONFIG_SCHED_TRACER is not set
++# CONFIG_CONTEXT_SWITCH_TRACER is not set
++# CONFIG_EVENT_TRACER is not set
++# CONFIG_BOOT_TRACER is not set
++# CONFIG_TRACE_BRANCH_PROFILING is not set
++# CONFIG_STACK_TRACER is not set
++# CONFIG_KMEMTRACE is not set
++# CONFIG_WORKQUEUE_TRACER is not set
++# CONFIG_BLK_DEV_IO_TRACE is not set
++# CONFIG_DYNAMIC_DEBUG is not set
++# CONFIG_SAMPLES is not set
++CONFIG_HAVE_ARCH_KGDB=y
++# CONFIG_KGDB is not set
++CONFIG_ARM_UNWIND=y
++CONFIG_DEBUG_USER=y
++# CONFIG_DEBUG_ERRORS is not set
++# CONFIG_DEBUG_STACK_USAGE is not set
++# CONFIG_DEBUG_LL is not set
++
++#
++# Security options
++#
++# CONFIG_KEYS is not set
++# CONFIG_SECURITY is not set
++# CONFIG_SECURITYFS is not set
++# CONFIG_SECURITY_FILE_CAPABILITIES is not set
++CONFIG_CRYPTO=y
++
++#
++# Crypto core or helper
++#
++# CONFIG_CRYPTO_FIPS is not set
++CONFIG_CRYPTO_ALGAPI=y
++CONFIG_CRYPTO_ALGAPI2=y
++CONFIG_CRYPTO_AEAD2=y
++CONFIG_CRYPTO_BLKCIPHER=y
++CONFIG_CRYPTO_BLKCIPHER2=y
++CONFIG_CRYPTO_HASH2=y
++CONFIG_CRYPTO_RNG2=y
++CONFIG_CRYPTO_PCOMP=y
++CONFIG_CRYPTO_MANAGER=y
++CONFIG_CRYPTO_MANAGER2=y
++# CONFIG_CRYPTO_GF128MUL is not set
++# CONFIG_CRYPTO_NULL is not set
++CONFIG_CRYPTO_WORKQUEUE=y
++# CONFIG_CRYPTO_CRYPTD is not set
++# CONFIG_CRYPTO_AUTHENC is not set
++# CONFIG_CRYPTO_TEST is not set
++
++#
++# Authenticated Encryption with Associated Data
++#
++# CONFIG_CRYPTO_CCM is not set
++# CONFIG_CRYPTO_GCM is not set
++# CONFIG_CRYPTO_SEQIV is not set
++
++#
++# Block modes
++#
++# CONFIG_CRYPTO_CBC is not set
++# CONFIG_CRYPTO_CTR is not set
++# CONFIG_CRYPTO_CTS is not set
++CONFIG_CRYPTO_ECB=y
++# CONFIG_CRYPTO_LRW is not set
++# CONFIG_CRYPTO_PCBC is not set
++# CONFIG_CRYPTO_XTS is not set
++
++#
++# Hash modes
++#
++# CONFIG_CRYPTO_HMAC is not set
++# CONFIG_CRYPTO_XCBC is not set
++
++#
++# Digest
++#
++# CONFIG_CRYPTO_CRC32C is not set
++# CONFIG_CRYPTO_MD4 is not set
++# CONFIG_CRYPTO_MD5 is not set
++# CONFIG_CRYPTO_MICHAEL_MIC is not set
++# CONFIG_CRYPTO_RMD128 is not set
++# CONFIG_CRYPTO_RMD160 is not set
++# CONFIG_CRYPTO_RMD256 is not set
++# CONFIG_CRYPTO_RMD320 is not set
++# CONFIG_CRYPTO_SHA1 is not set
++# CONFIG_CRYPTO_SHA256 is not set
++# CONFIG_CRYPTO_SHA512 is not set
++# CONFIG_CRYPTO_TGR192 is not set
++# CONFIG_CRYPTO_WP512 is not set
++
++#
++# Ciphers
++#
++CONFIG_CRYPTO_AES=y
++# CONFIG_CRYPTO_ANUBIS is not set
++CONFIG_CRYPTO_ARC4=y
++# CONFIG_CRYPTO_BLOWFISH is not set
++# CONFIG_CRYPTO_CAMELLIA is not set
++# CONFIG_CRYPTO_CAST5 is not set
++# CONFIG_CRYPTO_CAST6 is not set
++# CONFIG_CRYPTO_DES is not set
++# CONFIG_CRYPTO_FCRYPT is not set
++# CONFIG_CRYPTO_KHAZAD is not set
++# CONFIG_CRYPTO_SALSA20 is not set
++# CONFIG_CRYPTO_SEED is not set
++# CONFIG_CRYPTO_SERPENT is not set
++# CONFIG_CRYPTO_TEA is not set
++# CONFIG_CRYPTO_TWOFISH is not set
++
++#
++# Compression
++#
++CONFIG_CRYPTO_DEFLATE=y
++CONFIG_CRYPTO_ZLIB=y
++CONFIG_CRYPTO_LZO=y
++
++#
++# Random Number Generation
++#
++# CONFIG_CRYPTO_ANSI_CPRNG is not set
++# CONFIG_CRYPTO_HW is not set
++# CONFIG_BINARY_PRINTF is not set
++
++#
++# Library routines
++#
++CONFIG_BITREVERSE=y
++CONFIG_GENERIC_FIND_LAST_BIT=y
++# CONFIG_CRC_CCITT is not set
++CONFIG_CRC16=y
++# CONFIG_CRC_T10DIF is not set
++# CONFIG_CRC_ITU_T is not set
++CONFIG_CRC32=y
++# CONFIG_CRC7 is not set
++# CONFIG_LIBCRC32C is not set
++CONFIG_ZLIB_INFLATE=y
++CONFIG_ZLIB_DEFLATE=y
++CONFIG_LZO_COMPRESS=y
++CONFIG_LZO_DECOMPRESS=y
++CONFIG_HAS_IOMEM=y
++CONFIG_HAS_IOPORT=y
++CONFIG_HAS_DMA=y
++CONFIG_NLATTR=y
+diff --git a/arch/arm/configs/pm9g45cs6_defconfig b/arch/arm/configs/pm9g45cs6_defconfig
+new file mode 100644
+index 0000000..724bd99
+--- /dev/null
++++ b/arch/arm/configs/pm9g45cs6_defconfig
+@@ -0,0 +1,1657 @@
++#
++# Automatically generated make config: don't edit
++# Linux kernel version: 2.6.30.10
++# Sun Feb 28 13:56:37 2010
++#
++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_HAVE_LATENCYTOP_SUPPORT=y
++CONFIG_LOCKDEP_SUPPORT=y
++CONFIG_TRACE_IRQFLAGS_SUPPORT=y
++CONFIG_HARDIRQS_SW_RESEND=y
++CONFIG_GENERIC_IRQ_PROBE=y
++CONFIG_RWSEM_GENERIC_SPINLOCK=y
++# CONFIG_ARCH_HAS_ILOG2_U32 is not set
++# CONFIG_ARCH_HAS_ILOG2_U64 is not set
++CONFIG_GENERIC_HWEIGHT=y
++CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=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_AUDIT is not set
++
++#
++# RCU Subsystem
++#
++# CONFIG_CLASSIC_RCU is not set
++CONFIG_TREE_RCU=y
++# CONFIG_PREEMPT_RCU is not set
++# CONFIG_RCU_TRACE is not set
++CONFIG_RCU_FANOUT=32
++# CONFIG_RCU_FANOUT_EXACT is not set
++# CONFIG_TREE_RCU_TRACE is not set
++# CONFIG_PREEMPT_RCU_TRACE is not set
++# CONFIG_IKCONFIG is not set
++CONFIG_LOG_BUF_SHIFT=14
++# CONFIG_GROUP_SCHED is not set
++# CONFIG_CGROUPS is not set
++CONFIG_SYSFS_DEPRECATED=y
++CONFIG_SYSFS_DEPRECATED_V2=y
++# CONFIG_RELAY is not set
++CONFIG_NAMESPACES=y
++# CONFIG_UTS_NS is not set
++# CONFIG_IPC_NS is not set
++# CONFIG_USER_NS is not set
++# CONFIG_PID_NS is not set
++# CONFIG_NET_NS is not set
++# CONFIG_BLK_DEV_INITRD is not set
++# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
++CONFIG_SYSCTL=y
++CONFIG_ANON_INODES=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_STRIP_ASM_SYMS=y
++CONFIG_HOTPLUG=y
++CONFIG_PRINTK=y
++CONFIG_BUG=y
++CONFIG_ELF_CORE=y
++CONFIG_BASE_FULL=y
++CONFIG_FUTEX=y
++CONFIG_EPOLL=y
++CONFIG_SIGNALFD=y
++CONFIG_TIMERFD=y
++CONFIG_EVENTFD=y
++CONFIG_SHMEM=y
++CONFIG_AIO=y
++CONFIG_VM_EVENT_COUNTERS=y
++CONFIG_COMPAT_BRK=y
++CONFIG_SLAB=y
++# CONFIG_SLUB is not set
++# CONFIG_SLOB is not set
++# CONFIG_PROFILING is not set
++# CONFIG_MARKERS is not set
++CONFIG_HAVE_OPROFILE=y
++# CONFIG_KPROBES is not set
++CONFIG_HAVE_KPROBES=y
++CONFIG_HAVE_KRETPROBES=y
++CONFIG_HAVE_CLK=y
++# CONFIG_SLOW_WORK is not set
++CONFIG_HAVE_GENERIC_DMA_COHERENT=y
++CONFIG_SLABINFO=y
++CONFIG_RT_MUTEXES=y
++CONFIG_BASE_SMALL=0
++CONFIG_MODULES=y
++# CONFIG_MODULE_FORCE_LOAD is not set
++CONFIG_MODULE_UNLOAD=y
++# CONFIG_MODULE_FORCE_UNLOAD is not set
++# CONFIG_MODVERSIONS is not set
++# CONFIG_MODULE_SRCVERSION_ALL is not set
++CONFIG_BLOCK=y
++# CONFIG_LBD is not set
++# CONFIG_BLK_DEV_BSG is not set
++# CONFIG_BLK_DEV_INTEGRITY 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"
++# CONFIG_FREEZER is not set
++
++#
++# 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_CLPS711X is not set
++# CONFIG_ARCH_EBSA110 is not set
++# CONFIG_ARCH_EP93XX is not set
++# CONFIG_ARCH_GEMINI 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_KIRKWOOD is not set
++# CONFIG_ARCH_KS8695 is not set
++# CONFIG_ARCH_NS9XXX is not set
++# CONFIG_ARCH_LOKI is not set
++# CONFIG_ARCH_MV78XX0 is not set
++# CONFIG_ARCH_MXC is not set
++# CONFIG_ARCH_ORION5X is not set
++# CONFIG_ARCH_PNX4008 is not set
++# CONFIG_ARCH_PXA is not set
++# CONFIG_ARCH_MMP is not set
++# CONFIG_ARCH_RPC is not set
++# CONFIG_ARCH_SA1100 is not set
++# CONFIG_ARCH_S3C2410 is not set
++# CONFIG_ARCH_S3C64XX is not set
++# CONFIG_ARCH_SHARK is not set
++# CONFIG_ARCH_LH7A40X is not set
++# CONFIG_ARCH_DAVINCI is not set
++# CONFIG_ARCH_OMAP is not set
++# CONFIG_ARCH_MSM is not set
++# CONFIG_ARCH_W90X900 is not set
++
++#
++# Atmel AT91 System-on-Chip
++#
++# CONFIG_ARCH_AT91RM9200 is not set
++# CONFIG_ARCH_AT91SAM9260 is not set
++# CONFIG_ARCH_AT91SAM9261 is not set
++# CONFIG_ARCH_AT91SAM9G10 is not set
++# CONFIG_ARCH_AT91SAM9263 is not set
++# CONFIG_ARCH_AT91SAM9RL is not set
++# CONFIG_ARCH_AT91SAM9G20 is not set
++CONFIG_ARCH_AT91SAM9G45=y
++# CONFIG_ARCH_AT91CAP9 is not set
++# CONFIG_ARCH_AT572D940HF is not set
++# CONFIG_ARCH_AT91X40 is not set
++CONFIG_AT91_PMC_UNIT=y
++
++#
++# AT91SAM9G45 Board Type
++#
++# CONFIG_MACH_AT91SAM9G45EKES is not set
++CONFIG_MACH_PM9G45=y
++# CONFIG_PM9G45_SYSTEM_RAM_CS1 is not set
++CONFIG_PM9G45_SYSTEM_RAM_CS6=y
++CONFIG_VRAM_SIZE=0x8000000
++CONFIG_PM9G45_LCD_TX09D70=y
++# CONFIG_PM9G45_LCD_RA158 is not set
++# CONFIG_PM9G45_LCD_TCG057VGLAC is not set
++# CONFIG_PM9G45_LCD_GTTV57NN771E0 is not set
++# CONFIG_PM9G45_LCD_GLAA057VA01CW is not set
++# CONFIG_PM9G45_LCD_GATW70SN8H1E0 is not set
++# CONFIG_PM9G45_LCD_CLAA080MB0ACW is not set
++
++#
++# AT91 Board Options
++#
++CONFIG_MTD_AT91_DATAFLASH_CARD=y
++# CONFIG_MTD_NAND_ATMEL_BUSWIDTH_16 is not set
++
++#
++# AT91 Feature Selections
++#
++CONFIG_AT91_PROGRAMMABLE_CLOCKS=y
++CONFIG_AT91_TIMER_HZ=100
++CONFIG_AT91_EARLY_DBGU=y
++# CONFIG_AT91_EARLY_USART0 is not set
++# CONFIG_AT91_EARLY_USART1 is not set
++# CONFIG_AT91_EARLY_USART2 is not set
++# CONFIG_AT91_EARLY_USART3 is not set
++# CONFIG_AT91_EARLY_USART4 is not set
++# CONFIG_AT91_EARLY_USART5 is not set
++
++#
++# Processor Type
++#
++CONFIG_CPU_32=y
++CONFIG_CPU_ARM926T=y
++CONFIG_CPU_32v5=y
++CONFIG_CPU_ABRT_EV5TJ=y
++CONFIG_CPU_PABRT_NOIFAR=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
++CONFIG_PCCARD=y
++CONFIG_PCMCIA_DEBUG=y
++CONFIG_PCMCIA=y
++# CONFIG_PCMCIA_LOAD_CIS is not set
++# CONFIG_PCMCIA_IOCTL is not set
++
++#
++# PC-card bridges
++#
++CONFIG_AT91_CF=y
++
++#
++# Kernel Features
++#
++# CONFIG_NO_HZ is not set
++# CONFIG_HIGH_RES_TIMERS is not set
++CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
++CONFIG_VMSPLIT_3G=y
++# CONFIG_VMSPLIT_2G is not set
++# CONFIG_VMSPLIT_1G is not set
++CONFIG_PAGE_OFFSET=0xC0000000
++# CONFIG_PREEMPT is not set
++CONFIG_HZ=100
++CONFIG_AEABI=y
++CONFIG_OABI_COMPAT=y
++# CONFIG_ARCH_HAS_HOLES_MEMORYMODEL is not set
++# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
++# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
++# CONFIG_HIGHMEM is not set
++CONFIG_SELECT_MEMORY_MODEL=y
++CONFIG_FLATMEM_MANUAL=y
++# CONFIG_DISCONTIGMEM_MANUAL is not set
++# CONFIG_SPARSEMEM_MANUAL is not set
++CONFIG_FLATMEM=y
++CONFIG_FLAT_NODE_MEM_MAP=y
++CONFIG_PAGEFLAGS_EXTENDED=y
++CONFIG_SPLIT_PTLOCK_CPUS=4096
++# CONFIG_PHYS_ADDR_T_64BIT is not set
++CONFIG_ZONE_DMA_FLAG=0
++CONFIG_VIRT_TO_BUS=y
++CONFIG_UNEVICTABLE_LRU=y
++CONFIG_HAVE_MLOCK=y
++CONFIG_HAVE_MLOCKED_PAGE_BIT=y
++CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
++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="mem=64M fbcon=rotate:3 root=/dev/mtdblock4 rw mtdparts=atmel_nand:128k(bootstrap)ro,256k(uboot)ro,1664k(env),2M(linux),-(root) rootfstype=jffs2"
++# CONFIG_XIP_KERNEL is not set
++# CONFIG_KEXEC is not set
++
++#
++# CPU Power Management
++#
++# CONFIG_CPU_IDLE is not set
++
++#
++# Floating point emulation
++#
++
++#
++# At least one emulation must be selected
++#
++CONFIG_FPE_NWFPE=y
++# CONFIG_FPE_NWFPE_XP is not set
++# CONFIG_FPE_FASTFPE is not set
++# CONFIG_VFP is not set
++
++#
++# Userspace binary formats
++#
++CONFIG_BINFMT_ELF=y
++# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
++CONFIG_HAVE_AOUT=y
++# CONFIG_BINFMT_AOUT is not set
++# CONFIG_BINFMT_MISC is not set
++
++#
++# Power management options
++#
++# CONFIG_PM is not set
++CONFIG_ARCH_SUSPEND_POSSIBLE=y
++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 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_IPV6 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_NET_DSA is not set
++# CONFIG_VLAN_8021Q is not set
++# CONFIG_DECNET is not set
++# CONFIG_LLC2 is not set
++# CONFIG_IPX is not set
++# CONFIG_ATALK is not set
++# CONFIG_X25 is not set
++# CONFIG_LAPB is not set
++# CONFIG_ECONET is not set
++# CONFIG_WAN_ROUTER is not set
++# CONFIG_PHONET is not set
++# CONFIG_NET_SCHED is not set
++# CONFIG_DCB is not set
++
++#
++# Network testing
++#
++# CONFIG_NET_PKTGEN is not set
++# CONFIG_HAMRADIO is not set
++# CONFIG_CAN is not set
++# CONFIG_IRDA is not set
++# CONFIG_BT is not set
++# CONFIG_AF_RXRPC is not set
++# CONFIG_WIRELESS is not set
++# CONFIG_WIMAX 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_FIRMWARE_IN_KERNEL=y
++CONFIG_EXTRA_FIRMWARE=""
++# CONFIG_DEBUG_DRIVER is not set
++# CONFIG_DEBUG_DEVRES is not set
++# CONFIG_SYS_HYPERVISOR is not set
++# CONFIG_CONNECTOR is not set
++CONFIG_MTD=y
++# CONFIG_MTD_DEBUG is not set
++# CONFIG_MTD_CONCAT is not set
++CONFIG_MTD_PARTITIONS=y
++# CONFIG_MTD_TESTS is not set
++# CONFIG_MTD_REDBOOT_PARTS is not set
++CONFIG_MTD_CMDLINE_PARTS=y
++# CONFIG_MTD_AFS_PARTS is not set
++# CONFIG_MTD_AR7_PARTS is not set
++
++#
++# User Modules And Translation Layers
++#
++CONFIG_MTD_CHAR=y
++CONFIG_MTD_BLKDEVS=y
++CONFIG_MTD_BLOCK=y
++# CONFIG_FTL is not set
++# CONFIG_NFTL is not set
++# CONFIG_INFTL is not set
++# CONFIG_RFD_FTL is not set
++# CONFIG_SSFDC is not set
++# CONFIG_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=y
++CONFIG_MTD_DATAFLASH_WRITE_VERIFY=y
++# CONFIG_MTD_DATAFLASH_OTP 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_GPIO is not set
++CONFIG_MTD_NAND_IDS=y
++# CONFIG_MTD_NAND_DISKONCHIP is not set
++CONFIG_MTD_NAND_ATMEL=y
++CONFIG_MTD_NAND_ATMEL_ECC_SOFT=y
++# CONFIG_MTD_NAND_ATMEL_ECC_HW is not set
++# CONFIG_MTD_NAND_ATMEL_ECC_NONE is not set
++# CONFIG_MTD_NAND_NANDSIM is not set
++# CONFIG_MTD_NAND_PLATFORM is not set
++# CONFIG_MTD_ALAUDA is not set
++# CONFIG_MTD_ONENAND is not set
++
++#
++# LPDDR flash memory drivers
++#
++# CONFIG_MTD_LPDDR is not set
++
++#
++# UBI - Unsorted block images
++#
++CONFIG_MTD_UBI=y
++CONFIG_MTD_UBI_WL_THRESHOLD=4096
++CONFIG_MTD_UBI_BEB_RESERVE=1
++# CONFIG_MTD_UBI_GLUEBI is not set
++
++#
++# UBI debugging options
++#
++# CONFIG_MTD_UBI_DEBUG is not set
++# CONFIG_PARPORT is not set
++CONFIG_BLK_DEV=y
++# CONFIG_BLK_DEV_COW_COMMON is not set
++CONFIG_BLK_DEV_LOOP=y
++# CONFIG_BLK_DEV_CRYPTOLOOP 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_ATMEL_PWM is not set
++CONFIG_ATMEL_TCLIB=y
++CONFIG_ATMEL_TCB_CLKSRC=y
++CONFIG_ATMEL_TCB_CLKSRC_BLOCK=0
++CONFIG_ATMEL_SSC=y
++# CONFIG_ENCLOSURE_SERVICES is not set
++# CONFIG_C2PORT is not set
++
++#
++# EEPROM support
++#
++# CONFIG_EEPROM_AT25 is not set
++# CONFIG_EEPROM_93CX6 is not set
++CONFIG_HAVE_IDE=y
++CONFIG_IDE=y
++
++#
++# Please see Documentation/ide/ide.txt for help/info on IDE drives
++#
++CONFIG_IDE_XFER_MODE=y
++CONFIG_IDE_TIMINGS=y
++# CONFIG_BLK_DEV_IDE_SATA is not set
++CONFIG_IDE_GD=y
++CONFIG_IDE_GD_ATA=y
++# CONFIG_IDE_GD_ATAPI is not set
++CONFIG_BLK_DEV_IDECS=y
++# CONFIG_BLK_DEV_IDECD is not set
++# CONFIG_BLK_DEV_IDETAPE is not set
++# CONFIG_IDE_TASK_IOCTL is not set
++CONFIG_IDE_PROC_FS=y
++
++#
++# IDE chipset support/bugfixes
++#
++# CONFIG_BLK_DEV_PLATFORM is not set
++CONFIG_BLK_DEV_IDE_AT91=y
++# CONFIG_BLK_DEV_IDEDMA 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 is not set
++# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
++# CONFIG_SCSI_DH is not set
++# CONFIG_SCSI_OSD_INITIATOR is not set
++# CONFIG_ATA is not set
++# CONFIG_MD is not set
++CONFIG_NETDEVICES=y
++CONFIG_COMPAT_NET_DEV_OPS=y
++# CONFIG_DUMMY is not set
++# CONFIG_BONDING is not set
++# CONFIG_MACVLAN is not set
++# CONFIG_EQUALIZER is not set
++# CONFIG_TUN is not set
++# CONFIG_VETH is not set
++CONFIG_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_REALTEK_PHY is not set
++CONFIG_NATIONAL_PHY=y
++# CONFIG_STE10XP is not set
++# CONFIG_LSI_ET1011C_PHY is not set
++# CONFIG_FIXED_PHY is not set
++# CONFIG_MDIO_BITBANG is not set
++CONFIG_NET_ETHERNET=y
++# CONFIG_MII is not set
++CONFIG_MACB=y
++# CONFIG_AX88796 is not set
++# CONFIG_SMC91X is not set
++# CONFIG_DM9000 is not set
++# CONFIG_ENC28J60 is not set
++# CONFIG_ETHOC is not set
++# CONFIG_SMC911X is not set
++# CONFIG_SMSC911X is not set
++# CONFIG_DNET is not set
++# CONFIG_IBM_NEW_EMAC_ZMII is not set
++# CONFIG_IBM_NEW_EMAC_RGMII is not set
++# CONFIG_IBM_NEW_EMAC_TAH is not set
++# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
++# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
++# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
++# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
++# CONFIG_B44 is not set
++# CONFIG_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
++
++#
++# Enable WiMAX (Networking options) to see the WiMAX drivers
++#
++
++#
++# USB Network Adapters
++#
++# CONFIG_USB_CATC is not set
++# CONFIG_USB_KAWETH is not set
++# CONFIG_USB_PEGASUS is not set
++# CONFIG_USB_RTL8150 is not set
++# CONFIG_USB_USBNET is not set
++# CONFIG_NET_PCMCIA is not set
++# CONFIG_WAN is not set
++# CONFIG_PPP is not set
++# CONFIG_SLIP is not set
++# CONFIG_NETCONSOLE is not set
++# CONFIG_NETPOLL is not set
++# CONFIG_NET_POLL_CONTROLLER is not set
++# CONFIG_ISDN is not set
++
++#
++# 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=272
++CONFIG_INPUT_JOYDEV=y
++CONFIG_INPUT_EVDEV=y
++CONFIG_INPUT_EVBUG=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=y
++CONFIG_MOUSE_PS2=y
++CONFIG_MOUSE_PS2_ALPS=y
++CONFIG_MOUSE_PS2_LOGIPS2PP=y
++CONFIG_MOUSE_PS2_SYNAPTICS=y
++CONFIG_MOUSE_PS2_TRACKPOINT=y
++# CONFIG_MOUSE_PS2_ELANTECH is not set
++# CONFIG_MOUSE_PS2_TOUCHKIT is not set
++# CONFIG_MOUSE_SERIAL is not set
++# CONFIG_MOUSE_APPLETOUCH is not set
++# CONFIG_MOUSE_BCM5974 is not set
++# CONFIG_MOUSE_VSXXXAA is not set
++# CONFIG_MOUSE_GPIO is not set
++# CONFIG_INPUT_JOYSTICK is not set
++# CONFIG_INPUT_TABLET is not set
++CONFIG_INPUT_TOUCHSCREEN=y
++CONFIG_TOUCHSCREEN_ADS7846=y
++# CONFIG_TOUCHSCREEN_AD7877 is not set
++# CONFIG_TOUCHSCREEN_AD7879_SPI is not set
++# CONFIG_TOUCHSCREEN_AD7879 is not set
++# CONFIG_TOUCHSCREEN_FUJITSU is not set
++# CONFIG_TOUCHSCREEN_GUNZE is not set
++# CONFIG_TOUCHSCREEN_ELO is not set
++# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
++# CONFIG_TOUCHSCREEN_MTOUCH is not set
++# CONFIG_TOUCHSCREEN_INEXIO 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_ATMEL_TSADCC is not set
++# CONFIG_TOUCHSCREEN_WM97XX is not set
++# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
++# CONFIG_TOUCHSCREEN_TOUCHIT213 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_CONSOLE_TRANSLATIONS=y
++CONFIG_VT_CONSOLE=y
++CONFIG_HW_CONSOLE=y
++# CONFIG_VT_HW_CONSOLE_BINDING is not set
++CONFIG_DEVKMEM=y
++# 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_PDC=y
++# CONFIG_SERIAL_ATMEL_TTYAT is not set
++# CONFIG_SERIAL_MAX3100 is not set
++CONFIG_SERIAL_CORE=y
++CONFIG_SERIAL_CORE_CONSOLE=y
++CONFIG_UNIX98_PTYS=y
++# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
++CONFIG_LEGACY_PTYS=y
++CONFIG_LEGACY_PTY_COUNT=4
++# CONFIG_IPMI_HANDLER is not set
++CONFIG_HW_RANDOM=y
++# CONFIG_HW_RANDOM_TIMERIOMEM 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_IPWIRELESS is not set
++# CONFIG_RAW_DRIVER is not set
++# CONFIG_TCG_TPM is not set
++# CONFIG_I2C is not set
++CONFIG_SPI=y
++CONFIG_SPI_DEBUG=y
++CONFIG_SPI_MASTER=y
++
++#
++# SPI Master Controller Drivers
++#
++CONFIG_SPI_ATMEL=y
++# CONFIG_SPI_BITBANG is not set
++# CONFIG_SPI_GPIO is not set
++
++#
++# SPI Protocol Masters
++#
++CONFIG_SPI_SPIDEV=y
++# CONFIG_SPI_TLE62X0 is not set
++CONFIG_ARCH_REQUIRE_GPIOLIB=y
++CONFIG_GPIOLIB=y
++# CONFIG_DEBUG_GPIO is not set
++# CONFIG_GPIO_SYSFS is not set
++
++#
++# Memory mapped GPIO expanders:
++#
++
++#
++# I2C GPIO expanders:
++#
++
++#
++# PCI GPIO expanders:
++#
++
++#
++# SPI GPIO expanders:
++#
++# CONFIG_GPIO_MAX7301 is not set
++# CONFIG_GPIO_MCP23S08 is not set
++CONFIG_W1=y
++
++#
++# 1-wire Bus Masters
++#
++# CONFIG_W1_MASTER_DS2490 is not set
++# CONFIG_W1_MASTER_DS1WM is not set
++CONFIG_W1_MASTER_GPIO=y
++
++#
++# 1-wire Slaves
++#
++# CONFIG_W1_SLAVE_THERM is not set
++# CONFIG_W1_SLAVE_SMEM is not set
++# CONFIG_W1_SLAVE_DS2431 is not set
++# CONFIG_W1_SLAVE_DS2433 is not set
++# CONFIG_W1_SLAVE_DS2760 is not set
++# CONFIG_W1_SLAVE_BQ27000 is not set
++# CONFIG_POWER_SUPPLY is not set
++# CONFIG_HWMON is not set
++# CONFIG_THERMAL is not set
++# CONFIG_THERMAL_HWMON is not set
++# CONFIG_WATCHDOG is not set
++CONFIG_SSB_POSSIBLE=y
++
++#
++# Sonics Silicon Backplane
++#
++# CONFIG_SSB is not set
++
++#
++# Multifunction device drivers
++#
++# CONFIG_MFD_CORE is not set
++# CONFIG_MFD_SM501 is not set
++# CONFIG_MFD_ASIC3 is not set
++# CONFIG_HTC_EGPIO is not set
++# CONFIG_HTC_PASIC3 is not set
++# CONFIG_UCB1400_CORE is not set
++# CONFIG_MFD_TMIO is not set
++# CONFIG_MFD_T7L66XB is not set
++# CONFIG_MFD_TC6387XB is not set
++# CONFIG_MFD_TC6393XB is not set
++
++#
++# Multimedia devices
++#
++
++#
++# Multimedia core support
++#
++# CONFIG_VIDEO_DEV is not set
++# CONFIG_DVB_CORE is not set
++# CONFIG_VIDEO_MEDIA is not set
++
++#
++# Multimedia drivers
++#
++# CONFIG_DAB is not set
++
++#
++# Graphics support
++#
++# 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_BOOT_VESA_SUPPORT is not set
++CONFIG_FB_CFB_FILLRECT=y
++CONFIG_FB_CFB_COPYAREA=y
++CONFIG_FB_CFB_IMAGEBLIT=y
++# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
++# CONFIG_FB_SYS_FILLRECT is not set
++# CONFIG_FB_SYS_COPYAREA is not set
++# CONFIG_FB_SYS_IMAGEBLIT is not set
++# CONFIG_FB_FOREIGN_ENDIAN is not set
++# CONFIG_FB_SYS_FOPS is not set
++# CONFIG_FB_SVGALIB is not set
++# CONFIG_FB_MACMODES is not set
++# CONFIG_FB_BACKLIGHT is not set
++# CONFIG_FB_MODE_HELPERS is not set
++# CONFIG_FB_TILEBLITTING is not set
++
++#
++# Frame buffer hardware drivers
++#
++# CONFIG_FB_S1D15605 is not set
++# CONFIG_FB_S1D13XXX is not set
++CONFIG_FB_ATMEL=y
++# CONFIG_FB_VIRTUAL is not set
++# CONFIG_FB_METRONOME is not set
++# CONFIG_FB_MB862XX is not set
++# CONFIG_FB_BROADSHEET is not set
++CONFIG_BACKLIGHT_LCD_SUPPORT=y
++CONFIG_LCD_CLASS_DEVICE=y
++# CONFIG_LCD_LTV350QV is not set
++# CONFIG_LCD_ILI9320 is not set
++# CONFIG_LCD_TDO24M is not set
++# CONFIG_LCD_VGG2432A4 is not set
++CONFIG_LCD_PLATFORM=y
++CONFIG_BACKLIGHT_CLASS_DEVICE=y
++CONFIG_BACKLIGHT_ATMEL_LCDC=y
++# CONFIG_BACKLIGHT_GENERIC 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 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_SOUND=y
++CONFIG_SOUND_OSS_CORE=y
++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
++CONFIG_SND_VMASTER=y
++CONFIG_SND_AC97_CODEC=y
++# CONFIG_SND_DRIVERS is not set
++# CONFIG_SND_ARM is not set
++
++#
++# Atmel devices (AVR32 and AT91)
++#
++CONFIG_SND_ATMEL_AC97C=y
++# CONFIG_SND_SPI is not set
++# CONFIG_SND_USB is not set
++# CONFIG_SND_PCMCIA is not set
++# CONFIG_SND_SOC is not set
++# CONFIG_SOUND_PRIME is not set
++CONFIG_AC97_BUS=y
++CONFIG_HID_SUPPORT=y
++CONFIG_HID=y
++CONFIG_HID_DEBUG=y
++# CONFIG_HIDRAW is not set
++
++#
++# USB Input Devices
++#
++CONFIG_USB_HID=y
++# CONFIG_HID_PID is not set
++# CONFIG_USB_HIDDEV is not set
++
++#
++# Special HID drivers
++#
++CONFIG_HID_A4TECH=y
++CONFIG_HID_APPLE=y
++CONFIG_HID_BELKIN=y
++CONFIG_HID_CHERRY=y
++CONFIG_HID_CHICONY=y
++CONFIG_HID_CYPRESS=y
++# CONFIG_DRAGONRISE_FF is not set
++CONFIG_HID_EZKEY=y
++CONFIG_HID_KYE=y
++CONFIG_HID_GYRATION=y
++CONFIG_HID_KENSINGTON=y
++CONFIG_HID_LOGITECH=y
++# CONFIG_LOGITECH_FF is not set
++# CONFIG_LOGIRUMBLEPAD2_FF is not set
++CONFIG_HID_MICROSOFT=y
++CONFIG_HID_MONTEREY=y
++CONFIG_HID_NTRIG=y
++CONFIG_HID_PANTHERLORD=y
++# CONFIG_PANTHERLORD_FF is not set
++CONFIG_HID_PETALYNX=y
++CONFIG_HID_SAMSUNG=y
++CONFIG_HID_SONY=y
++CONFIG_HID_SUNPLUS=y
++# CONFIG_GREENASIA_FF is not set
++CONFIG_HID_TOPSEED=y
++# CONFIG_THRUSTMASTER_FF is not set
++# CONFIG_ZEROPLUS_FF is not set
++CONFIG_USB_SUPPORT=y
++CONFIG_USB_ARCH_HAS_HCD=y
++CONFIG_USB_ARCH_HAS_OHCI=y
++CONFIG_USB_ARCH_HAS_EHCI=y
++CONFIG_USB=y
++# CONFIG_USB_DEBUG is not set
++CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
++
++#
++# Miscellaneous USB options
++#
++CONFIG_USB_DEVICEFS=y
++# CONFIG_USB_DEVICE_CLASS is not set
++# CONFIG_USB_DYNAMIC_MINORS is not set
++# CONFIG_USB_OTG is not set
++# CONFIG_USB_MON is not set
++# CONFIG_USB_WUSB is not set
++# CONFIG_USB_WUSB_CBAF is not set
++
++#
++# USB Host Controller Drivers
++#
++# CONFIG_USB_C67X00_HCD is not set
++CONFIG_USB_EHCI_HCD=y
++# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
++# CONFIG_USB_EHCI_TT_NEWSCHED is not set
++# CONFIG_USB_OXU210HP_HCD is not set
++# CONFIG_USB_ISP116X_HCD is not set
++# CONFIG_USB_ISP1760_HCD is not set
++CONFIG_USB_OHCI_HCD=y
++# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
++# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
++CONFIG_USB_OHCI_LITTLE_ENDIAN=y
++# CONFIG_USB_SL811_HCD is not set
++# CONFIG_USB_R8A66597_HCD is not set
++# CONFIG_USB_HWA_HCD is not set
++# CONFIG_USB_MUSB_HDRC is not set
++# CONFIG_USB_GADGET_MUSB_HDRC is not set
++
++#
++# USB Device Class drivers
++#
++# CONFIG_USB_ACM is not set
++# CONFIG_USB_PRINTER is not set
++# CONFIG_USB_WDM is not set
++# CONFIG_USB_TMC is not set
++
++#
++# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
++#
++
++#
++# also be needed; see USB_STORAGE Help for more info
++#
++CONFIG_USB_STORAGE=y
++# CONFIG_USB_STORAGE_DEBUG is not set
++# CONFIG_USB_STORAGE_DATAFAB is not set
++# CONFIG_USB_STORAGE_FREECOM is not set
++# CONFIG_USB_STORAGE_ISD200 is not set
++# CONFIG_USB_STORAGE_USBAT is not set
++# CONFIG_USB_STORAGE_SDDR09 is not set
++# CONFIG_USB_STORAGE_SDDR55 is not set
++# CONFIG_USB_STORAGE_JUMPSHOT is not set
++# CONFIG_USB_STORAGE_ALAUDA is not set
++# CONFIG_USB_STORAGE_ONETOUCH is not set
++# CONFIG_USB_STORAGE_KARMA is not set
++# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
++# CONFIG_USB_LIBUSUAL is not set
++
++#
++# USB Imaging devices
++#
++# CONFIG_USB_MDC800 is not set
++# CONFIG_USB_MICROTEK is not set
++
++#
++# USB port drivers
++#
++# CONFIG_USB_SERIAL is not set
++
++#
++# USB Miscellaneous drivers
++#
++# CONFIG_USB_EMI62 is not set
++# CONFIG_USB_EMI26 is not set
++# CONFIG_USB_ADUTUX is not set
++# CONFIG_USB_SEVSEG is not set
++# CONFIG_USB_RIO500 is not set
++# CONFIG_USB_LEGOTOWER is not set
++# CONFIG_USB_LCD is not set
++# CONFIG_USB_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_IDMOUSE is not set
++# CONFIG_USB_FTDI_ELAN is not set
++# CONFIG_USB_APPLEDISPLAY is not set
++# CONFIG_USB_SISUSBVGA is not set
++# CONFIG_USB_LD is not set
++# CONFIG_USB_TRANCEVIBRATOR is not set
++# CONFIG_USB_IOWARRIOR is not set
++# CONFIG_USB_TEST is not set
++# CONFIG_USB_ISIGHTFW is not set
++# CONFIG_USB_VST is not set
++CONFIG_USB_GADGET=y
++# CONFIG_USB_GADGET_DEBUG is not set
++# CONFIG_USB_GADGET_DEBUG_FILES is not set
++# CONFIG_USB_GADGET_DEBUG_FS is not set
++CONFIG_USB_GADGET_VBUS_DRAW=2
++CONFIG_USB_GADGET_SELECTED=y
++# CONFIG_USB_GADGET_AT91 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_LH7A40X is not set
++# CONFIG_USB_GADGET_OMAP is not set
++# CONFIG_USB_GADGET_PXA25X is not set
++# CONFIG_USB_GADGET_PXA27X is not set
++# CONFIG_USB_GADGET_S3C2410 is not set
++# CONFIG_USB_GADGET_IMX is not set
++# CONFIG_USB_GADGET_M66592 is not set
++# CONFIG_USB_GADGET_AMD5536UDC is not set
++# CONFIG_USB_GADGET_FSL_QE is not set
++# CONFIG_USB_GADGET_CI13XXX is not set
++# CONFIG_USB_GADGET_NET2280 is not set
++# CONFIG_USB_GADGET_GOKU 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 is not set
++CONFIG_USB_G_SERIAL=y
++# CONFIG_USB_MIDI_GADGET is not set
++# CONFIG_USB_G_PRINTER is not set
++# CONFIG_USB_CDC_COMPOSITE is not set
++
++#
++# OTG and related infrastructure
++#
++# CONFIG_USB_GPIO_VBUS is not set
++# CONFIG_NOP_USB_XCEIV is not set
++CONFIG_MMC=y
++# CONFIG_MMC_DEBUG is not set
++# CONFIG_MMC_UNSAFE_RESUME is not set
++
++#
++# MMC/SD/SDIO Card Drivers
++#
++CONFIG_MMC_BLOCK=y
++CONFIG_MMC_BLOCK_BOUNCE=y
++# CONFIG_SDIO_UART is not set
++# CONFIG_MMC_TEST is not set
++
++#
++# MMC/SD/SDIO Host Controller Drivers
++#
++# CONFIG_MMC_SDHCI is not set
++# CONFIG_MMC_AT91 is not set
++CONFIG_MMC_ATMELMCI=y
++CONFIG_MMC_ATMELMCI_DMA=y
++# CONFIG_MMC_SPI is not set
++# CONFIG_MEMSTICK is not set
++# CONFIG_ACCESSIBILITY is not set
++CONFIG_NEW_LEDS=y
++CONFIG_LEDS_CLASS=y
++
++#
++# LED drivers
++#
++CONFIG_LEDS_GPIO=y
++CONFIG_LEDS_GPIO_PLATFORM=y
++# CONFIG_LEDS_DAC124S085 is not set
++
++#
++# LED Triggers
++#
++CONFIG_LEDS_TRIGGERS=y
++CONFIG_LEDS_TRIGGER_TIMER=y
++# CONFIG_LEDS_TRIGGER_IDE_DISK is not set
++CONFIG_LEDS_TRIGGER_HEARTBEAT=y
++# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
++CONFIG_LEDS_TRIGGER_GPIO=y
++# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set
++
++#
++# iptables trigger is under Netfilter config (LED target)
++#
++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
++#
++# CONFIG_RTC_DRV_M41T94 is not set
++# CONFIG_RTC_DRV_DS1305 is not set
++# CONFIG_RTC_DRV_DS1390 is not set
++# CONFIG_RTC_DRV_MAX6902 is not set
++# CONFIG_RTC_DRV_R9701 is not set
++# CONFIG_RTC_DRV_RS5C348 is not set
++# CONFIG_RTC_DRV_DS3234 is not set
++
++#
++# Platform RTC drivers
++#
++# CONFIG_RTC_DRV_CMOS is not set
++# CONFIG_RTC_DRV_DS1286 is not set
++# CONFIG_RTC_DRV_DS1511 is not set
++# CONFIG_RTC_DRV_DS1553 is not set
++# CONFIG_RTC_DRV_DS1742 is not set
++# CONFIG_RTC_DRV_STK17TA8 is not set
++# CONFIG_RTC_DRV_M48T86 is not set
++# CONFIG_RTC_DRV_M48T35 is not set
++# CONFIG_RTC_DRV_M48T59 is not set
++# CONFIG_RTC_DRV_BQ4802 is not set
++# CONFIG_RTC_DRV_V3020 is not set
++
++#
++# on-CPU RTC drivers
++#
++CONFIG_RTC_DRV_AT91SAM9=y
++CONFIG_RTC_DRV_AT91SAM9_RTT=0
++CONFIG_RTC_DRV_AT91SAM9_GPBR=0
++CONFIG_DMADEVICES=y
++
++#
++# DMA Devices
++#
++CONFIG_AT_HDMAC=y
++CONFIG_DMA_ENGINE=y
++
++#
++# DMA Clients
++#
++# CONFIG_NET_DMA is not set
++# CONFIG_ASYNC_TX_DMA is not set
++# CONFIG_DMATEST is not set
++# CONFIG_AUXDISPLAY is not set
++# CONFIG_REGULATOR is not set
++# CONFIG_UIO is not set
++# CONFIG_STAGING is not set
++
++#
++# File systems
++#
++# CONFIG_EXT2_FS is not set
++# CONFIG_EXT3_FS is not set
++# CONFIG_EXT4_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_BTRFS_FS is not set
++CONFIG_FILE_LOCKING=y
++CONFIG_DNOTIFY=y
++CONFIG_INOTIFY=y
++CONFIG_INOTIFY_USER=y
++# CONFIG_QUOTA is not set
++# CONFIG_AUTOFS_FS is not set
++# CONFIG_AUTOFS4_FS is not set
++# CONFIG_FUSE_FS is not set
++
++#
++# Caches
++#
++# CONFIG_FSCACHE is not set
++
++#
++# CD-ROM/DVD Filesystems
++#
++# CONFIG_ISO9660_FS is not set
++# CONFIG_UDF_FS is not set
++
++#
++# DOS/FAT/NT Filesystems
++#
++CONFIG_FAT_FS=y
++# CONFIG_MSDOS_FS 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_PROC_PAGE_MONITOR=y
++CONFIG_SYSFS=y
++CONFIG_TMPFS=y
++# CONFIG_TMPFS_POSIX_ACL is not set
++# CONFIG_HUGETLB_PAGE is not set
++# CONFIG_CONFIGFS_FS is not set
++CONFIG_MISC_FILESYSTEMS=y
++# CONFIG_ADFS_FS is not set
++# CONFIG_AFFS_FS is not set
++# CONFIG_HFS_FS is not set
++# CONFIG_HFSPLUS_FS is not set
++# CONFIG_BEFS_FS is not set
++# CONFIG_BFS_FS is not set
++# CONFIG_EFS_FS is not set
++CONFIG_JFFS2_FS=y
++CONFIG_JFFS2_FS_DEBUG=0
++CONFIG_JFFS2_FS_WRITEBUFFER=y
++# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
++CONFIG_JFFS2_SUMMARY=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 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_UBIFS_FS is not set
++# CONFIG_CRAMFS is not set
++# CONFIG_SQUASHFS is not set
++# CONFIG_VXFS_FS is not set
++# CONFIG_MINIX_FS is not set
++# CONFIG_OMFS_FS is not set
++# CONFIG_HPFS_FS is not set
++# CONFIG_QNX4FS_FS is not set
++# CONFIG_ROMFS_FS is not set
++# CONFIG_SYSV_FS is not set
++# CONFIG_UFS_FS is not set
++# CONFIG_NILFS2_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_NFSD is not set
++CONFIG_LOCKD=y
++CONFIG_LOCKD_V4=y
++CONFIG_NFS_COMMON=y
++CONFIG_SUNRPC=y
++# CONFIG_RPCSEC_GSS_KRB5 is not set
++# CONFIG_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
++
++#
++# Kernel hacking
++#
++CONFIG_PRINTK_TIME=y
++CONFIG_ENABLE_WARN_DEPRECATED=y
++CONFIG_ENABLE_MUST_CHECK=y
++CONFIG_FRAME_WARN=1024
++# 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=y
++# CONFIG_DEBUG_SHIRQ is not set
++CONFIG_DETECT_SOFTLOCKUP=y
++# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
++CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
++CONFIG_DETECT_HUNG_TASK=y
++# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
++CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0
++CONFIG_SCHED_DEBUG=y
++# CONFIG_SCHEDSTATS is not set
++CONFIG_TIMER_STATS=y
++# CONFIG_DEBUG_OBJECTS 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_WRITECOUNT is not set
++CONFIG_DEBUG_MEMORY_INIT=y
++# CONFIG_DEBUG_LIST is not set
++# CONFIG_DEBUG_SG is not set
++# CONFIG_DEBUG_NOTIFIERS is not set
++# CONFIG_BOOT_PRINTK_DELAY is not set
++# CONFIG_RCU_TORTURE_TEST is not set
++# CONFIG_RCU_CPU_STALL_DETECTOR is not set
++# CONFIG_BACKTRACE_SELF_TEST is not set
++# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
++# CONFIG_FAULT_INJECTION is not set
++# CONFIG_LATENCYTOP is not set
++# CONFIG_SYSCTL_SYSCALL_CHECK is not set
++# CONFIG_PAGE_POISONING is not set
++CONFIG_HAVE_FUNCTION_TRACER=y
++CONFIG_TRACING_SUPPORT=y
++
++#
++# Tracers
++#
++# CONFIG_FUNCTION_TRACER is not set
++# CONFIG_IRQSOFF_TRACER is not set
++# CONFIG_SCHED_TRACER is not set
++# CONFIG_CONTEXT_SWITCH_TRACER is not set
++# CONFIG_EVENT_TRACER is not set
++# CONFIG_BOOT_TRACER is not set
++# CONFIG_TRACE_BRANCH_PROFILING is not set
++# CONFIG_STACK_TRACER is not set
++# CONFIG_KMEMTRACE is not set
++# CONFIG_WORKQUEUE_TRACER is not set
++# CONFIG_BLK_DEV_IO_TRACE is not set
++# CONFIG_DYNAMIC_DEBUG is not set
++# CONFIG_SAMPLES is not set
++CONFIG_HAVE_ARCH_KGDB=y
++# CONFIG_KGDB is not set
++CONFIG_ARM_UNWIND=y
++CONFIG_DEBUG_USER=y
++# CONFIG_DEBUG_ERRORS is not set
++# CONFIG_DEBUG_STACK_USAGE is not set
++# CONFIG_DEBUG_LL is not set
++
++#
++# Security options
++#
++# CONFIG_KEYS is not set
++# CONFIG_SECURITY is not set
++# CONFIG_SECURITYFS is not set
++# CONFIG_SECURITY_FILE_CAPABILITIES is not set
++CONFIG_CRYPTO=y
++
++#
++# Crypto core or helper
++#
++# CONFIG_CRYPTO_FIPS is not set
++CONFIG_CRYPTO_ALGAPI=y
++CONFIG_CRYPTO_ALGAPI2=y
++CONFIG_CRYPTO_AEAD2=y
++CONFIG_CRYPTO_BLKCIPHER=y
++CONFIG_CRYPTO_BLKCIPHER2=y
++CONFIG_CRYPTO_HASH2=y
++CONFIG_CRYPTO_RNG2=y
++CONFIG_CRYPTO_PCOMP=y
++CONFIG_CRYPTO_MANAGER=y
++CONFIG_CRYPTO_MANAGER2=y
++# CONFIG_CRYPTO_GF128MUL is not set
++# CONFIG_CRYPTO_NULL is not set
++CONFIG_CRYPTO_WORKQUEUE=y
++# CONFIG_CRYPTO_CRYPTD is not set
++# CONFIG_CRYPTO_AUTHENC is not set
++# CONFIG_CRYPTO_TEST is not set
++
++#
++# Authenticated Encryption with Associated Data
++#
++# CONFIG_CRYPTO_CCM is not set
++# CONFIG_CRYPTO_GCM is not set
++# CONFIG_CRYPTO_SEQIV is not set
++
++#
++# Block modes
++#
++# CONFIG_CRYPTO_CBC is not set
++# CONFIG_CRYPTO_CTR is not set
++# CONFIG_CRYPTO_CTS is not set
++CONFIG_CRYPTO_ECB=y
++# CONFIG_CRYPTO_LRW is not set
++# CONFIG_CRYPTO_PCBC is not set
++# CONFIG_CRYPTO_XTS is not set
++
++#
++# Hash modes
++#
++# CONFIG_CRYPTO_HMAC is not set
++# CONFIG_CRYPTO_XCBC is not set
++
++#
++# Digest
++#
++# CONFIG_CRYPTO_CRC32C is not set
++# CONFIG_CRYPTO_MD4 is not set
++# CONFIG_CRYPTO_MD5 is not set
++# CONFIG_CRYPTO_MICHAEL_MIC is not set
++# CONFIG_CRYPTO_RMD128 is not set
++# CONFIG_CRYPTO_RMD160 is not set
++# CONFIG_CRYPTO_RMD256 is not set
++# CONFIG_CRYPTO_RMD320 is not set
++# CONFIG_CRYPTO_SHA1 is not set
++# CONFIG_CRYPTO_SHA256 is not set
++# CONFIG_CRYPTO_SHA512 is not set
++# CONFIG_CRYPTO_TGR192 is not set
++# CONFIG_CRYPTO_WP512 is not set
++
++#
++# Ciphers
++#
++CONFIG_CRYPTO_AES=y
++# CONFIG_CRYPTO_ANUBIS is not set
++CONFIG_CRYPTO_ARC4=y
++# CONFIG_CRYPTO_BLOWFISH is not set
++# CONFIG_CRYPTO_CAMELLIA is not set
++# CONFIG_CRYPTO_CAST5 is not set
++# CONFIG_CRYPTO_CAST6 is not set
++# CONFIG_CRYPTO_DES is not set
++# CONFIG_CRYPTO_FCRYPT is not set
++# CONFIG_CRYPTO_KHAZAD is not set
++# CONFIG_CRYPTO_SALSA20 is not set
++# CONFIG_CRYPTO_SEED is not set
++# CONFIG_CRYPTO_SERPENT is not set
++# CONFIG_CRYPTO_TEA is not set
++# CONFIG_CRYPTO_TWOFISH is not set
++
++#
++# Compression
++#
++CONFIG_CRYPTO_DEFLATE=y
++CONFIG_CRYPTO_ZLIB=y
++CONFIG_CRYPTO_LZO=y
++
++#
++# Random Number Generation
++#
++# CONFIG_CRYPTO_ANSI_CPRNG is not set
++# CONFIG_CRYPTO_HW is not set
++# CONFIG_BINARY_PRINTF is not set
++
++#
++# Library routines
++#
++CONFIG_BITREVERSE=y
++CONFIG_GENERIC_FIND_LAST_BIT=y
++# CONFIG_CRC_CCITT is not set
++CONFIG_CRC16=y
++# CONFIG_CRC_T10DIF is not set
++# CONFIG_CRC_ITU_T is not set
++CONFIG_CRC32=y
++# CONFIG_CRC7 is not set
++# CONFIG_LIBCRC32C is not set
++CONFIG_ZLIB_INFLATE=y
++CONFIG_ZLIB_DEFLATE=y
++CONFIG_LZO_COMPRESS=y
++CONFIG_LZO_DECOMPRESS=y
++CONFIG_HAS_IOMEM=y
++CONFIG_HAS_IOPORT=y
++CONFIG_HAS_DMA=y
++CONFIG_NLATTR=y
+-- 
+1.5.5.6
+
diff --git a/recipes/linux/linux-2.6.30/ronetix-pm9g45/0009-add-float-flags-in-Makefile.patch b/recipes/linux/linux-2.6.30/ronetix-pm9g45/0009-add-float-flags-in-Makefile.patch
new file mode 100644 (file)
index 0000000..8ed9be3
--- /dev/null
@@ -0,0 +1,27 @@
+From 2c11c12dcc449228a9996b194220c51bf0bd4156 Mon Sep 17 00:00:00 2001
+From: Asen Dimov <dimov@ronetix.at>
+Date: Tue, 20 Apr 2010 16:06:20 +0300
+Subject: [PATCH] add float flags in Makefile
+
+---
+ Makefile |    4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index b92ad41..171e1d1 100644
+--- a/Makefile
++++ b/Makefile
+@@ -336,8 +336,8 @@ MODFLAGS   = -DMODULE
+ CFLAGS_MODULE   = $(MODFLAGS)
+ AFLAGS_MODULE   = $(MODFLAGS)
+ LDFLAGS_MODULE  =
+-CFLAGS_KERNEL =
+-AFLAGS_KERNEL =
++CFLAGS_KERNEL = -mfloat-abi=soft -mfpu=vfp
++AFLAGS_KERNEL = -mfloat-abi=soft -mfpu=vfp
+ # Use LINUXINCLUDE when you must reference the include/ directory.
+-- 
+1.5.5.6
+
diff --git a/recipes/linux/linux-2.6.30/ronetix-pm9g45/0010-conditional-compile-if-DEDICATED_VRAM.patch b/recipes/linux/linux-2.6.30/ronetix-pm9g45/0010-conditional-compile-if-DEDICATED_VRAM.patch
new file mode 100644 (file)
index 0000000..d398436
--- /dev/null
@@ -0,0 +1,70 @@
+From 4b46d47b680a721057519c68f0ab8f291d39858e Mon Sep 17 00:00:00 2001
+From: Asen Dimov <dimov@ronetix.at>
+Date: Wed, 12 May 2010 23:48:59 +0300
+Subject: [PATCH] conditional compile if DEDICATED_VRAM
+
+---
+ arch/arm/mach-at91/board-pm9g45.c             |   13 +++++++++++++
+ arch/arm/mach-at91/include/mach/at91sam9g45.h |    8 +++++---
+ 2 files changed, 18 insertions(+), 3 deletions(-)
+
+diff --git a/arch/arm/mach-at91/board-pm9g45.c b/arch/arm/mach-at91/board-pm9g45.c
+index 63e5ee1..fa142cf 100644
+--- a/arch/arm/mach-at91/board-pm9g45.c
++++ b/arch/arm/mach-at91/board-pm9g45.c
+@@ -270,12 +270,22 @@ static struct resource lcdc_resources[] = {
+               .end    = AT91SAM9G45_LCDC_BASE + SZ_4K - 1,
+               .flags  = IORESOURCE_MEM,
+       },
++#if CONFIG_PM9G45_DEDICATED_VRAM
++/*
++ * atmel_lcdfb_probe() checks if record 1 is IORESOURCE_MEM
++ * if not then allocates spave in system ram
++ */
+       [1] = {
+               .start  = CONFIG_VRAM_BASE,
+               .end    = CONFIG_VRAM_BASE + CONFIG_VRAM_SIZE - 1,
+               .flags  = IORESOURCE_MEM,
+       },
++#endif
++#if CONFIG_PM9G45_DEDICATED_VRAM
+       [2] = {
++#else
++      [1] = {
++#endif                
+               .start  = AT91SAM9G45_ID_LCDC,
+               .end    = AT91SAM9G45_ID_LCDC,
+               .flags  = IORESOURCE_IRQ,
+@@ -349,7 +359,10 @@ static struct fb_videomode at91_tft_vga_modes[] = {
+               .lower_margin   = 0,
+               .hsync_len              = 5,            
+               .vsync_len              = 1,
++              /*
+               .sync                   = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
++              */
++              .sync                   = 0,
+               .vmode                  = FB_VMODE_NONINTERLACED,
+       },
+ };
+diff --git a/arch/arm/mach-at91/include/mach/at91sam9g45.h b/arch/arm/mach-at91/include/mach/at91sam9g45.h
+index 324d876..826c764 100644
+--- a/arch/arm/mach-at91/include/mach/at91sam9g45.h
++++ b/arch/arm/mach-at91/include/mach/at91sam9g45.h
+@@ -143,9 +143,11 @@
+ #define CONFIG_VRAM_SIZE      SZ_64M
+ #elif defined(CONFIG_MACH_PM9G45) && defined(CONFIG_PM9G45_SYSTEM_RAM_CS6)
+ #define CONFIG_DRAM_BASE      AT91_CHIPSELECT_6
+-#define CONFIG_DRAM_SIZE      SZ_64M
+-#define CONFIG_VRAM_BASE      AT91_CHIPSELECT_1
+-#define CONFIG_VRAM_SIZE_     SZ_128M
++/*
++#if CONFIG_PM9G45_DEDICATED_VRAM
++#define CONFIG_DRAM_SIZE      SZ_64M - CONFIG_VRAM_SIZE
++#define CONFIG_VRAM_BASE      AT91_CHIPSELECT_6 + CONFIG_DRAM_SIZE
++*/
+ #else
+ #define CONFIG_DRAM_BASE      AT91_CHIPSELECT_6
+ #endif
+-- 
+1.5.5.6
+
diff --git a/recipes/linux/linux-2.6.30/ronetix-pm9g45/0011-add-pm9g45-board-version-1.2-and-adjust-memory-sele.patch b/recipes/linux/linux-2.6.30/ronetix-pm9g45/0011-add-pm9g45-board-version-1.2-and-adjust-memory-sele.patch
new file mode 100644 (file)
index 0000000..6de675e
--- /dev/null
@@ -0,0 +1,138 @@
+From 7abad9133c1bf66732a339126003f191926a202c Mon Sep 17 00:00:00 2001
+From: Asen Dimov <dimov@ronetix.at>
+Date: Fri, 27 Aug 2010 13:46:28 +0300
+Subject: [PATCH] add pm9g45 board version 1.2, and adjust memory selection
+
+
+Signed-off-by: Asen Dimov <dimov@ronetix.at>
+---
+ arch/arm/mach-at91/Kconfig                    |   36 ++++++++++++++++++++++---
+ arch/arm/mach-at91/board-pm9g45.c             |    4 +--
+ arch/arm/mach-at91/include/mach/at91sam9g45.h |   15 +++++++---
+ 3 files changed, 43 insertions(+), 12 deletions(-)
+
+diff --git a/arch/arm/mach-at91/Kconfig b/arch/arm/mach-at91/Kconfig
+index bebad5b..25e6c6b 100644
+--- a/arch/arm/mach-at91/Kconfig
++++ b/arch/arm/mach-at91/Kconfig
+@@ -414,8 +414,30 @@ config MACH_PM9G45
+          Select this if you are using Ronetix's PM9G45 board.
+          <http://ronetix.at/starter_kit_9g45.html>
+ choice
+-       prompt "System RAM base address"
++       prompt "PM9G45 board version"
+        depends on MACH_PM9G45
++       default MACH_PM9G45_V1_2
++       help
++         The version is writted out on the board.
++
++config MACH_PM9G45_V1_1
++       bool "v1.1"
++       depends on MACH_PM9G45
++       help
++         Has two RAM memories on CS1 and CS6.
++
++config MACH_PM9G45_V1_2
++       bool "v1.2"
++       depends on MACH_PM9G45
++       select AUTO_VRAM_SIZE
++       help
++         Has one RAM memory on CS6.
++
++endchoice
++
++choice
++       prompt "System RAM base address"
++       depends on (MACH_PM9G45 && MACH_PM9G45_V1_1)
+        help
+          AT91SAM9G45 has two DDR2 controlers, one CS1 on 0x20000000
+          and CS6 on 0x70000000 memmory addresses. You can choose
+@@ -423,21 +445,27 @@ choice
+ config PM9G45_SYSTEM_RAM_CS1
+        bool "System RAM: CS1 on 0x20000000 with 128MB"
+-       depends on MACH_PM9G45
+        help
+          CS1 will be used for system ram and CS6 for video memory.
+ config PM9G45_SYSTEM_RAM_CS6
+        bool "System RAM: CS6 on 0x70000000"
+-       depends on MACH_PM9G45
+        help
+          CS6 will be used for system ram and for video ram.
+ endchoice
++config AUTO_VRAM_SIZE
++       bool "Reserve video memory automatic"
++       depends on PM9G45_SYSTEM_RAM_CS6
++       default n if PM9G45_SYSTEM_RAM_CS1
++       help
++         The automatic reservasion is based on the screen resolution
++         and bits per pixel. Manualy reserver memory VRAM_SIZE for video.
++
+ config VRAM_SIZE
+        prompt "Video RAM size"
+-       depends on (MACH_PM9G45 && PM9G45_SYSTEM_RAM_CS6)
++       depends on (MACH_PM9G45_V1_1 && PM9G45_SYSTEM_RAM_CS6 && AUTO_VRAM_SIZE=n)
+        hex
+        help
+          Determine the size of ram for video. It will be located at the end of CS6.
+diff --git a/arch/arm/mach-at91/board-pm9g45.c b/arch/arm/mach-at91/board-pm9g45.c
+index fa142cf..2671445 100644
+--- a/arch/arm/mach-at91/board-pm9g45.c
++++ b/arch/arm/mach-at91/board-pm9g45.c
+@@ -270,7 +270,7 @@ static struct resource lcdc_resources[] = {
+               .end    = AT91SAM9G45_LCDC_BASE + SZ_4K - 1,
+               .flags  = IORESOURCE_MEM,
+       },
+-#if CONFIG_PM9G45_DEDICATED_VRAM
++#ifndef CONFIG_AUTO_VRAM_SIZE
+ /*
+  * atmel_lcdfb_probe() checks if record 1 is IORESOURCE_MEM
+  * if not then allocates spave in system ram
+@@ -280,8 +280,6 @@ static struct resource lcdc_resources[] = {
+               .end    = CONFIG_VRAM_BASE + CONFIG_VRAM_SIZE - 1,
+               .flags  = IORESOURCE_MEM,
+       },
+-#endif
+-#if CONFIG_PM9G45_DEDICATED_VRAM
+       [2] = {
+ #else
+       [1] = {
+diff --git a/arch/arm/mach-at91/include/mach/at91sam9g45.h b/arch/arm/mach-at91/include/mach/at91sam9g45.h
+index 826c764..446e6d9 100644
+--- a/arch/arm/mach-at91/include/mach/at91sam9g45.h
++++ b/arch/arm/mach-at91/include/mach/at91sam9g45.h
+@@ -136,18 +136,23 @@
+  */
+ #if defined(CONFIG_MACH_AT91SAM9G45EKES)
+ #define CONFIG_DRAM_BASE      AT91_CHIPSELECT_6
+-#elif defined(CONFIG_MACH_PM9G45) && defined(CONFIG_PM9G45_SYSTEM_RAM_CS1)
++#elif defined(CONFIG_MACH_PM9G45_V1_1) && defined(CONFIG_PM9G45_SYSTEM_RAM_CS1)
+ #define CONFIG_DRAM_BASE      AT91_CHIPSELECT_1
+ #define CONFIG_DRAM_SIZE      SZ_128M
+ #define CONFIG_VRAM_BASE      AT91_CHIPSELECT_6
+ #define CONFIG_VRAM_SIZE      SZ_64M
+-#elif defined(CONFIG_MACH_PM9G45) && defined(CONFIG_PM9G45_SYSTEM_RAM_CS6)
++#elif         defined(CONFIG_MACH_PM9G45_V1_1) && \
++      defined(CONFIG_PM9G45_SYSTEM_RAM_CS6) && \
++      defined(CONFIG_AUTO_VRAM_SIZE) 
++#define CONFIG_DRAM_BASE      AT91_CHIPSELECT_6
++#elif         defined(CONFIG_MACH_PM9G45_V1_1) && \
++      defined(CONFIG_PM9G45_SYSTEM_RAM_CS6) && \
++      CONFIG_AUTO_VRAM_SIZE == y 
+ #define CONFIG_DRAM_BASE      AT91_CHIPSELECT_6
+-/*
+-#if CONFIG_PM9G45_DEDICATED_VRAM
+ #define CONFIG_DRAM_SIZE      SZ_64M - CONFIG_VRAM_SIZE
+ #define CONFIG_VRAM_BASE      AT91_CHIPSELECT_6 + CONFIG_DRAM_SIZE
+-*/
++#elif         defined(CONFIG_MACH_PM9G45_V1_2) 
++#define CONFIG_DRAM_BASE      AT91_CHIPSELECT_6
+ #else
+ #define CONFIG_DRAM_BASE      AT91_CHIPSELECT_6
+ #endif
+-- 
+1.5.5.6
+
diff --git a/recipes/linux/linux-2.6.30/ronetix-pm9g45/2.6.30-at91-exp.patch b/recipes/linux/linux-2.6.30/ronetix-pm9g45/2.6.30-at91-exp.patch
new file mode 100644 (file)
index 0000000..8f6b9f5
--- /dev/null
@@ -0,0 +1,33460 @@
+From 460964e13607480ec141bd72fc76c5af52989175 Mon Sep 17 00:00:00 2001
+From: nferre <nferre@50fbe906-d41e-0410-8a96-31537896a350>
+Date: Wed, 14 Oct 2009 13:31:17 +0000
+Subject: [PATCH] at91: dm9000 initialization update
+
+Add information in dm9000 mac/phy chip initialization:
+- irq resource details
+- platform data details
+
+Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com>
+
+git-svn-id: svn://rfolxts01.rfo.atmel.com/at91_sandbox/linux-2.6.x/branches/linux-2.6.30-at91@11572 50fbe906-d41e-0410-8a96-31537896a350
+---
+ arch/arm/mach-at91/board-sam9261ek.c |    3 ++-
+ 1 files changed, 2 insertions(+), 1 deletions(-)
+
+Index: linux-2.6.30/arch/arm/mach-at91/board-sam9261ek.c
+===================================================================
+--- linux-2.6.30.orig/arch/arm/mach-at91/board-sam9261ek.c     2011-02-01 16:40:18.000000000 +0100
++++ linux-2.6.30/arch/arm/mach-at91/board-sam9261ek.c  2011-02-01 16:40:30.145073648 +0100
+@@ -93,11 +93,12 @@
+               .start  = AT91_PIN_PC11,
+               .end    = AT91_PIN_PC11,
+               .flags  = IORESOURCE_IRQ
++                      | IORESOURCE_IRQ_LOWEDGE | IORESOURCE_IRQ_HIGHEDGE,
+       }
+ };
+ static struct dm9000_plat_data dm9000_platdata = {
+-      .flags          = DM9000_PLATF_16BITONLY,
++      .flags          = DM9000_PLATF_16BITONLY | DM9000_PLATF_NO_EEPROM,
+ };
+ static struct platform_device dm9000_device = {
+@@ -287,7 +288,11 @@
+  */
+ static struct at73c213_board_info at73c213_data = {
+       .ssc_id         = 1,
++#if defined(CONFIG_MACH_AT91SAM9261EK)
+       .shortname      = "AT91SAM9261-EK external DAC",
++#else
++      .shortname      = "AT91SAM9G10-EK external DAC",
++#endif
+ };
+ #if defined(CONFIG_SND_AT73C213) || defined(CONFIG_SND_AT73C213_MODULE)
+@@ -414,6 +419,9 @@
+       .default_monspecs               = &at91fb_default_stn_monspecs,
+       .atmel_lcdfb_power_control      = at91_lcdc_stn_power_control,
+       .guard_time                     = 1,
++#if defined(CONFIG_MACH_AT91SAM9G10EK)
++      .lcd_wiring_mode                = ATMEL_LCDC_WIRING_RGB,
++#endif
+ };
+ #else
+@@ -467,6 +475,9 @@
+       .default_monspecs               = &at91fb_default_tft_monspecs,
+       .atmel_lcdfb_power_control      = at91_lcdc_tft_power_control,
+       .guard_time                     = 1,
++#if defined(CONFIG_MACH_AT91SAM9G10EK)
++      .lcd_wiring_mode                = ATMEL_LCDC_WIRING_RGB,
++#endif
+ };
+ #endif
+@@ -603,7 +614,11 @@
+                               | AT91_SHDW_RTTWKEN);
+ }
++#if defined(CONFIG_MACH_AT91SAM9261EK)
+ MACHINE_START(AT91SAM9261EK, "Atmel AT91SAM9261-EK")
++#else
++MACHINE_START(AT91SAM9G10EK, "Atmel AT91SAM9G10-EK")
++#endif
+       /* Maintainer: Atmel */
+       .phys_io        = AT91_BASE_SYS,
+       .io_pg_offst    = (AT91_VA_BASE_SYS >> 18) & 0xfffc,
+Index: linux-2.6.30/arch/arm/mach-at91/board-sam9g20ek.c
+===================================================================
+--- linux-2.6.30.orig/arch/arm/mach-at91/board-sam9g20ek.c     2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/arch/arm/mach-at91/board-sam9g20ek.c  2011-02-01 16:40:30.193007582 +0100
+@@ -37,6 +37,8 @@
+ #include <mach/board.h>
+ #include <mach/gpio.h>
++#include <linux/gpio_keys.h>
++#include <linux/input.h>
+ #include <mach/at91sam9_smc.h>
+ #include "sam9_smc.h"
+@@ -193,11 +195,12 @@
+ /*
+  * MCI (SD/MMC)
+- * det_pin, wp_pin and vcc_pin are not connected
++ * wp_pin and vcc_pin are not connected
+  */
+ static struct at91_mmc_data __initdata ek_mmc_data = {
+       .slot_b         = 1,
+       .wire4          = 1,
++      .det_pin        = AT91_PIN_PC9,
+ };
+@@ -218,6 +221,65 @@
+       }
+ };
++/*
++ * GPIO Buttons
++ */
++#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
++static struct gpio_keys_button ek_buttons[] = {
++      {
++              .gpio           = AT91_PIN_PA30,
++              .code           = BTN_3,
++              .desc           = "Button 3",
++              .active_low     = 1,
++              .wakeup         = 1,
++      },
++      {
++              .gpio           = AT91_PIN_PA31,
++              .code           = BTN_4,
++              .desc           = "Button 4",
++              .active_low     = 1,
++              .wakeup         = 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_PA30, 1);  /* btn3 */
++      at91_set_deglitch(AT91_PIN_PA30, 1);
++      at91_set_gpio_input(AT91_PIN_PA31, 1);  /* btn4 */
++      at91_set_deglitch(AT91_PIN_PA31, 1);
++
++      platform_device_register(&ek_button_device);
++}
++#else
++static void __init ek_add_device_buttons(void) {}
++#endif
++
++/*
++ * I2C
++ */
++static struct i2c_board_info __initdata ek_i2c_devices[] = {
++      {
++              I2C_BOARD_INFO("24c512", 0x50),
++              I2C_BOARD_INFO("wm8731", 0x1b),
++      },
++};
++
++
+ static void __init ek_board_init(void)
+ {
+       /* Serial */
+@@ -235,9 +297,11 @@
+       /* MMC */
+       at91_add_device_mmc(0, &ek_mmc_data);
+       /* I2C */
+-      at91_add_device_i2c(NULL, 0);
++      at91_add_device_i2c(ek_i2c_devices, ARRAY_SIZE(ek_i2c_devices));
+       /* LEDs */
+       at91_gpio_leds(ek_leds, ARRAY_SIZE(ek_leds));
++      /* Push Buttons */
++      ek_add_device_buttons();
+       /* PCK0 provides MCLK to the WM8731 */
+       at91_set_B_periph(AT91_PIN_PC1, 0);
+       /* SSC (for WM8731) */
+Index: linux-2.6.30/arch/arm/mach-at91/board-sam9rlek.c
+===================================================================
+--- linux-2.6.30.orig/arch/arm/mach-at91/board-sam9rlek.c      2011-02-01 16:40:18.000000000 +0100
++++ linux-2.6.30/arch/arm/mach-at91/board-sam9rlek.c   2011-02-01 16:40:30.165043750 +0100
+@@ -15,6 +15,8 @@
+ #include <linux/spi/spi.h>
+ #include <linux/fb.h>
+ #include <linux/clk.h>
++#include <linux/input.h>
++#include <linux/gpio_keys.h>
+ #include <video/atmel_lcdc.h>
+@@ -186,19 +188,21 @@
+ static void at91_lcdc_power_control(int on)
+ {
+       if (on)
+-              at91_set_gpio_value(AT91_PIN_PA30, 0);  /* power up */
++              at91_set_gpio_value(AT91_PIN_PC1, 0);   /* power up */
+       else
+-              at91_set_gpio_value(AT91_PIN_PA30, 1);  /* power down */
++              at91_set_gpio_value(AT91_PIN_PC1, 1);   /* power down */
+ }
+ /* Driver datas */
+ static struct atmel_lcdfb_info __initdata ek_lcdc_data = {
++      .lcdcon_is_backlight            = true,
+       .default_bpp                    = 16,
+       .default_dmacon                 = ATMEL_LCDC_DMAEN,
+       .default_lcdcon2                = AT91SAM9RL_DEFAULT_LCDCON2,
+       .default_monspecs               = &at91fb_default_monspecs,
+       .atmel_lcdfb_power_control      = at91_lcdc_power_control,
+       .guard_time                     = 1,
++      .lcd_wiring_mode                = ATMEL_LCDC_WIRING_RGB,
+ };
+ #else
+@@ -206,6 +210,97 @@
+ #endif
++/*
++ * AC97
++ * reset_pin is not connected: NRST
++ */
++static struct ac97c_platform_data ek_ac97_data = {
++};
++
++
++/*
++ * LEDs
++ */
++static struct gpio_led ek_leds[] = {
++      {       /* "bottom" led, green, userled1 to be defined */
++              .name                   = "ds1",
++              .gpio                   = AT91_PIN_PD15,
++              .active_low             = 1,
++              .default_trigger        = "none",
++      },
++      {       /* "bottom" led, green, userled2 to be defined */
++              .name                   = "ds2",
++              .gpio                   = AT91_PIN_PD16,
++              .active_low             = 1,
++              .default_trigger        = "none",
++      },
++      {       /* "power" led, yellow */
++              .name                   = "ds3",
++              .gpio                   = AT91_PIN_PD14,
++              .default_trigger        = "heartbeat",
++      }
++};
++
++
++/*
++ * Touchscreen
++ */
++static struct at91_tsadcc_data ek_tsadcc_data = {
++      .adc_clock              = 1000000,
++      .pendet_debounce        = 0x0f,
++      .ts_sample_hold_time    = 0x03,
++};
++
++
++/*
++ * GPIO Buttons
++ */
++#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
++static struct gpio_keys_button ek_buttons[] = {
++      {
++              .gpio           = AT91_PIN_PB0,
++              .code           = BTN_2,
++              .desc           = "Right Click",
++              .active_low     = 1,
++              .wakeup         = 1,
++      },
++      {
++              .gpio           = AT91_PIN_PB1,
++              .code           = BTN_1,
++              .desc           = "Left Click",
++              .active_low     = 1,
++              .wakeup         = 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_PB1, 1);   /* btn1 */
++      at91_set_deglitch(AT91_PIN_PB1, 1);
++      at91_set_gpio_input(AT91_PIN_PB0, 1);   /* btn2 */
++      at91_set_deglitch(AT91_PIN_PB0, 1);
++
++      platform_device_register(&ek_button_device);
++}
++#else
++static void __init ek_add_device_buttons(void) {}
++#endif
++
++
+ static void __init ek_board_init(void)
+ {
+       /* Serial */
+@@ -222,8 +317,14 @@
+       at91_add_device_mmc(0, &ek_mmc_data);
+       /* LCD Controller */
+       at91_add_device_lcdc(&ek_lcdc_data);
++      /* AC97 */
++      at91_add_device_ac97(&ek_ac97_data);
+       /* Touch Screen Controller */
+-      at91_add_device_tsadcc();
++      at91_add_device_tsadcc(&ek_tsadcc_data);
++      /* LEDs */
++      at91_gpio_leds(ek_leds, ARRAY_SIZE(ek_leds));
++      /* Push Buttons */
++      ek_add_device_buttons();
+       /* shutdown controller, wakeup button (5 msec low) */
+       at91_sys_write(AT91_SHDW_MR, AT91_SHDW_CPTWK0_(10) | AT91_SHDW_WKMODE0_LOW
+                               | AT91_SHDW_RTTWKEN);
+Index: linux-2.6.30/arch/avr32/mach-at32ap/include/mach/cpu.h
+===================================================================
+--- linux-2.6.30.orig/arch/avr32/mach-at32ap/include/mach/cpu.h        2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/arch/avr32/mach-at32ap/include/mach/cpu.h     2011-02-01 16:40:30.165043750 +0100
+@@ -31,5 +31,8 @@
+ #define cpu_is_at91sam9263()  (0)
+ #define cpu_is_at91sam9rl()   (0)
+ #define cpu_is_at91cap9()     (0)
++#define cpu_is_at91sam9g10()  (0)
++#define cpu_is_at91sam9g45()  (0)
++#define cpu_is_at91sam9g45es()        (0)
+ #endif /* __ASM_ARCH_CPU_H */
+Index: linux-2.6.30/arch/arm/mach-at91/clock.c
+===================================================================
+--- linux-2.6.30.orig/arch/arm/mach-at91/clock.c       2011-02-01 16:40:18.000000000 +0100
++++ linux-2.6.30/arch/arm/mach-at91/clock.c    2011-02-01 16:40:30.141043034 +0100
+@@ -44,6 +44,30 @@
+ #define clk_is_sys(x)         ((x)->type & CLK_TYPE_SYSTEM)
++/*
++ * Chips have some kind of clocks : group them by functionality
++ */
++#define cpu_has_utmi()                (  cpu_is_at91cap9() \
++                              || cpu_is_at91sam9rl() \
++                              || cpu_is_at91sam9g45())
++
++#define cpu_has_800M_plla()   (  cpu_is_at91sam9g20() \
++                              || cpu_is_at91sam9g45())
++
++#define cpu_has_300M_plla()   (cpu_is_at91sam9g10())
++
++#define cpu_has_pllb()                (!(cpu_is_at91sam9rl() \
++                              || cpu_is_at91sam9g45()))
++
++#define cpu_has_upll()                (cpu_is_at91sam9g45())
++
++/* USB host HS & FS */
++#define cpu_has_uhp()         (!cpu_is_at91sam9rl())
++
++/* USB device FS only */
++#define cpu_has_udpfs()               (!(cpu_is_at91sam9rl() \
++                              || cpu_is_at91sam9g45()))
++
+ static LIST_HEAD(clocks);
+ static DEFINE_SPINLOCK(clk_lock);
+@@ -115,6 +139,13 @@
+ {
+       unsigned int uckr = at91_sys_read(AT91_CKGR_UCKR);
++      if (cpu_is_at91sam9g45()) {
++              if (is_on)
++                      uckr |= AT91_PMC_BIASEN;
++              else
++                      uckr &= ~AT91_PMC_BIASEN;
++      }
++
+       if (is_on) {
+               is_on = AT91_PMC_LOCKU;
+               at91_sys_write(AT91_CKGR_UCKR, uckr | clk->pmc_mask);
+@@ -141,7 +172,7 @@
+ };
+ static struct clk uhpck = {
+       .name           = "uhpck",
+-      .parent         = &pllb,
++      /*.parent               = ... we choose parent at runtime */
+       .mode           = pmc_sys_mode,
+ };
+@@ -174,7 +205,11 @@
+               case AT91_PMC_CSS_PLLA:
+                       return &plla;
+               case AT91_PMC_CSS_PLLB:
+-                      return &pllb;
++                      if (cpu_has_upll())
++                              /* CSS_PLLB == CSS_UPLL */
++                              return &utmi_clk;
++                      else if (cpu_has_pllb())
++                              return &pllb;
+       }
+       return NULL;
+@@ -305,6 +340,7 @@
+       unsigned long   flags;
+       unsigned        prescale;
+       unsigned long   actual;
++      unsigned long   prev = ULONG_MAX;
+       if (!clk_is_programmable(clk))
+               return -EINVAL;
+@@ -312,8 +348,16 @@
+       actual = clk->parent->rate_hz;
+       for (prescale = 0; prescale < 7; prescale++) {
+-              if (actual && actual <= rate)
++              if (actual > rate)
++                      prev = actual;
++
++              if (actual && actual <= rate) {
++                      if ((prev - rate) < (rate - actual)) {
++                              actual = prev;
++                              prescale--;
++                      }
+                       break;
++              }
+               actual >>= 1;
+       }
+@@ -340,7 +384,7 @@
+                       u32     pckr;
+                       pckr = at91_sys_read(AT91_PMC_PCKR(clk->id));
+-                      pckr &= AT91_PMC_CSS_PLLB;      /* clock selection */
++                      pckr &= AT91_PMC_CSS;   /* clock selection */
+                       pckr |= prescale << 2;
+                       at91_sys_write(AT91_PMC_PCKR(clk->id), pckr);
+                       clk->rate_hz = actual;
+@@ -368,6 +412,10 @@
+               return -EBUSY;
+       if (!clk_is_primary(parent) || !clk_is_programmable(clk))
+               return -EINVAL;
++
++      if (cpu_is_at91sam9rl() && parent->id == AT91_PMC_CSS_PLLB)
++              return -EINVAL;
++
+       spin_lock_irqsave(&clk_lock, flags);
+       clk->rate_hz = parent->rate_hz;
+@@ -379,7 +427,7 @@
+ }
+ EXPORT_SYMBOL(clk_set_parent);
+-/* establish PCK0..PCK4 parentage and rate */
++/* establish PCK0..PCKN parentage and rate */
+ static void __init init_programmable_clock(struct clk *clk)
+ {
+       struct clk      *parent;
+@@ -407,11 +455,13 @@
+       seq_printf(s, "MOR  = %8x\n", at91_sys_read(AT91_CKGR_MOR));
+       seq_printf(s, "MCFR = %8x\n", at91_sys_read(AT91_CKGR_MCFR));
+       seq_printf(s, "PLLA = %8x\n", at91_sys_read(AT91_CKGR_PLLAR));
+-      if (!cpu_is_at91sam9rl())
++      if (cpu_has_pllb())
+               seq_printf(s, "PLLB = %8x\n", at91_sys_read(AT91_CKGR_PLLBR));
+-      if (cpu_is_at91cap9() || cpu_is_at91sam9rl())
++      if (cpu_has_utmi())
+               seq_printf(s, "UCKR = %8x\n", uckr = at91_sys_read(AT91_CKGR_UCKR));
+       seq_printf(s, "MCKR = %8x\n", at91_sys_read(AT91_PMC_MCKR));
++      if (cpu_has_upll())
++              seq_printf(s, "USB  = %8x\n", at91_sys_read(AT91_PMC_USB));
+       seq_printf(s, "SR   = %8x\n", sr = at91_sys_read(AT91_PMC_SR));
+       seq_printf(s, "\n");
+@@ -572,20 +622,67 @@
+       &clk32k,
+       &main_clk,
+       &plla,
+-      &pllb,
+-
+-      /* PLLB children (USB) */
+-      &udpck,
+-      &uhpck,
+       /* MCK */
+       &mck
+ };
++/* PLLB generated USB full speed clock init */
++static void __init at91_pllb_usbfs_clock_init(unsigned long main_clock)
++{
++      /*
++       * USB clock init:  choose 48 MHz PLLB value,
++       * disable 48MHz clock during usb peripheral suspend.
++       *
++       * REVISIT:  assumes MCK doesn't derive from PLLB!
++       */
++      uhpck.parent = &pllb;
++
++      at91_pllb_usb_init = at91_pll_calc(main_clock, 48000000 * 2) | AT91_PMC_USB96M;
++      pllb.rate_hz = at91_pll_rate(&pllb, main_clock, at91_pllb_usb_init);
++      if (cpu_is_at91rm9200()) {
++              uhpck.pmc_mask = AT91RM9200_PMC_UHP;
++              udpck.pmc_mask = AT91RM9200_PMC_UDP;
++              at91_sys_write(AT91_PMC_SCER, AT91RM9200_PMC_MCKUDP);
++      } else if (cpu_is_at91sam9260() || cpu_is_at91sam9261() ||
++                 cpu_is_at91sam9263() || cpu_is_at91sam9g20() ||
++                 cpu_is_at572d940hf() || cpu_is_at91sam9g10()) {
++              uhpck.pmc_mask = AT91SAM926x_PMC_UHP;
++              udpck.pmc_mask = AT91SAM926x_PMC_UDP;
++      } else if (cpu_is_at91cap9()) {
++              uhpck.pmc_mask = AT91CAP9_PMC_UHP;
++      }
++      at91_sys_write(AT91_CKGR_PLLBR, 0);
++
++      udpck.rate_hz = at91_usb_rate(&pllb, pllb.rate_hz, at91_pllb_usb_init);
++      uhpck.rate_hz = at91_usb_rate(&pllb, pllb.rate_hz, at91_pllb_usb_init);
++}
++
++/* UPLL generated USB full speed clock init */
++static void __init at91_upll_usbfs_clock_init(unsigned long main_clock)
++{
++      /*
++       * USB clock init: choose 480 MHz from UPLL,
++       */
++      unsigned int usbr = AT91_PMC_USBS_UPLL;
++
++      /* Setup divider by 10 to reach 48 MHz */
++      usbr |= ((10 - 1) << 8) & AT91_PMC_OHCIUSBDIV;
++
++      at91_sys_write(AT91_PMC_USB, usbr);
++
++      /* Now set uhpck values */
++      uhpck.parent = &utmi_clk;
++      uhpck.pmc_mask = AT91SAM926x_PMC_UHP;
++      uhpck.rate_hz = utmi_clk.parent->rate_hz;
++      uhpck.rate_hz /= 1 + ((at91_sys_read(AT91_PMC_USB) & AT91_PMC_OHCIUSBDIV) >> 8);
++}
++
+ int __init at91_clock_init(unsigned long main_clock)
+ {
+       unsigned tmp, freq, mckr;
+       int i;
++      int pll_overclock = false;
+       /*
+        * When the bootloader initialized the main oscillator correctly,
+@@ -603,43 +700,50 @@
+       /* report if PLLA is more than mildly overclocked */
+       plla.rate_hz = at91_pll_rate(&plla, main_clock, at91_sys_read(AT91_CKGR_PLLAR));
+-      if ((!cpu_is_at91sam9g20() && plla.rate_hz > 209000000)
+-         || (cpu_is_at91sam9g20() && plla.rate_hz > 800000000))
++      if (cpu_has_300M_plla()) {
++              if (plla.rate_hz > 300000000)
++                      pll_overclock = true;
++      } else if (cpu_has_800M_plla()) {
++              if (plla.rate_hz > 800000000)
++                      pll_overclock = true;
++      } else {
++              if (plla.rate_hz > 209000000)
++                      pll_overclock = true;
++      }
++      if (pll_overclock)
+               pr_info("Clocks: PLLA overclocked, %ld MHz\n", plla.rate_hz / 1000000);
+-      /*
+-       * USB clock init:  choose 48 MHz PLLB value,
+-       * disable 48MHz clock during usb peripheral suspend.
+-       *
+-       * REVISIT:  assumes MCK doesn't derive from PLLB!
+-       */
+-      at91_pllb_usb_init = at91_pll_calc(main_clock, 48000000 * 2) | AT91_PMC_USB96M;
+-      pllb.rate_hz = at91_pll_rate(&pllb, main_clock, at91_pllb_usb_init);
+-      if (cpu_is_at91rm9200()) {
+-              uhpck.pmc_mask = AT91RM9200_PMC_UHP;
+-              udpck.pmc_mask = AT91RM9200_PMC_UDP;
+-              at91_sys_write(AT91_PMC_SCER, AT91RM9200_PMC_MCKUDP);
+-      } else if (cpu_is_at91sam9260() || cpu_is_at91sam9261() || cpu_is_at91sam9263() || cpu_is_at91sam9g20() || cpu_is_at572d940hf()) {
+-              uhpck.pmc_mask = AT91SAM926x_PMC_UHP;
+-              udpck.pmc_mask = AT91SAM926x_PMC_UDP;
+-      } else if (cpu_is_at91cap9()) {
+-              uhpck.pmc_mask = AT91CAP9_PMC_UHP;
++      if (cpu_is_at91sam9g45()) {
++              mckr = at91_sys_read(AT91_PMC_MCKR);
++              plla.rate_hz /= (1 << ((mckr & AT91_PMC_PLLADIV2) >> 12));      /* plla divisor by 2 */
++      }
++
++      if (cpu_has_upll() && !cpu_has_pllb()) {
++              /* setup UTMI clock as the fourth primary clock
++               * (instead of pllb) */
++              utmi_clk.type |= CLK_TYPE_PRIMARY;
++              utmi_clk.id = 3;
+       }
+-      at91_sys_write(AT91_CKGR_PLLBR, 0);
+-      udpck.rate_hz = at91_usb_rate(&pllb, pllb.rate_hz, at91_pllb_usb_init);
+-      uhpck.rate_hz = at91_usb_rate(&pllb, pllb.rate_hz, at91_pllb_usb_init);
+       /*
+        * USB HS clock init
+        */
+-      if (cpu_is_at91cap9() || cpu_is_at91sam9rl()) {
++      if (cpu_has_utmi())
+               /*
+                * multiplier is hard-wired to 40
+                * (obtain the USB High Speed 480 MHz when input is 12 MHz)
+                */
+               utmi_clk.rate_hz = 40 * utmi_clk.parent->rate_hz;
+-      }
++
++      /*
++       * USB FS clock init
++       */
++      if (cpu_has_pllb())
++              at91_pllb_usbfs_clock_init(main_clock);
++      if (cpu_has_upll())
++              /* assumes that we choose UPLL for USB and not PLLA */
++              at91_upll_usbfs_clock_init(main_clock);
+       /*
+        * MCK and CPU derive from one of those primary clocks.
+@@ -649,21 +753,34 @@
+       mck.parent = at91_css_to_clk(mckr & AT91_PMC_CSS);
+       freq = mck.parent->rate_hz;
+       freq /= (1 << ((mckr & AT91_PMC_PRES) >> 2));                           /* prescale */
+-      if (cpu_is_at91rm9200())
++      if (cpu_is_at91rm9200()) {
+               mck.rate_hz = freq / (1 + ((mckr & AT91_PMC_MDIV) >> 8));       /* mdiv */
+-      else if (cpu_is_at91sam9g20()) {
++      } else if (cpu_is_at91sam9g20()) {
+               mck.rate_hz = (mckr & AT91_PMC_MDIV) ?
+                       freq / ((mckr & AT91_PMC_MDIV) >> 7) : freq;    /* mdiv ; (x >> 7) = ((x >> 8) * 2) */
+               if (mckr & AT91_PMC_PDIV)
+                       freq /= 2;              /* processor clock division */
+-      } else
+-              mck.rate_hz = freq / (1 << ((mckr & AT91_PMC_MDIV) >> 8));      /* mdiv */
++      } else if (cpu_is_at91sam9g45()) {
++              mck.rate_hz = (mckr & AT91_PMC_MDIV) == AT91SAM9_PMC_MDIV_3 ?
++                      freq / 3 : freq / (1 << ((mckr & AT91_PMC_MDIV) >> 8)); /* mdiv */
++      } else {
++              mck.rate_hz = freq / (1 << ((mckr & AT91_PMC_MDIV) >> 8));      /* mdiv */
++      }
+       /* Register the PMC's standard clocks */
+       for (i = 0; i < ARRAY_SIZE(standard_pmc_clocks); i++)
+               list_add_tail(&standard_pmc_clocks[i]->node, &clocks);
+-      if (cpu_is_at91cap9() || cpu_is_at91sam9rl())
++      if (cpu_has_pllb())
++              list_add_tail(&pllb.node, &clocks);
++
++      if (cpu_has_uhp())
++              list_add_tail(&uhpck.node, &clocks);
++
++      if (cpu_has_udpfs())
++              list_add_tail(&udpck.node, &clocks);
++
++      if (cpu_has_utmi())
+               list_add_tail(&utmi_clk.node, &clocks);
+       /* MCK and CPU clock are "always on" */
+Index: linux-2.6.30/arch/arm/mach-at91/include/mach/at91_pmc.h
+===================================================================
+--- linux-2.6.30.orig/arch/arm/mach-at91/include/mach/at91_pmc.h       2011-02-01 16:40:18.000000000 +0100
++++ linux-2.6.30/arch/arm/mach-at91/include/mach/at91_pmc.h    2011-02-01 16:40:30.133004041 +0100
+@@ -23,7 +23,7 @@
+ #define               AT91_PMC_PCK            (1 <<  0)               /* Processor Clock */
+ #define               AT91RM9200_PMC_UDP      (1 <<  1)               /* USB Devcice Port Clock [AT91RM9200 only] */
+ #define               AT91RM9200_PMC_MCKUDP   (1 <<  2)               /* USB Device Port Master Clock Automatic Disable on Suspend [AT91RM9200 only] */
+-#define               AT91CAP9_PMC_DDR        (1 <<  2)               /* DDR Clock [AT91CAP9 revC only] */
++#define               AT91CAP9_PMC_DDR        (1 <<  2)               /* DDR Clock [CAP9 revC & some SAM9 only] */
+ #define               AT91RM9200_PMC_UHP      (1 <<  4)               /* USB Host Port Clock [AT91RM9200 only] */
+ #define               AT91SAM926x_PMC_UHP     (1 <<  6)               /* USB Host Port Clock [AT91SAM926x only] */
+ #define               AT91CAP9_PMC_UHP        (1 <<  6)               /* USB Host Port Clock [AT91CAP9 only] */
+@@ -40,11 +40,11 @@
+ #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_UCKR          (AT91_PMC + 0x1C)       /* UTMI Clock Register [SAM9RL, CAP9] */
++#define       AT91_CKGR_UCKR          (AT91_PMC + 0x1C)       /* UTMI Clock Register [some SAM9, CAP9] */
+ #define               AT91_PMC_UPLLEN         (1   << 16)             /* UTMI PLL Enable */
+ #define               AT91_PMC_UPLLCOUNT      (0xf << 20)             /* UTMI PLL Start-up Time */
+ #define               AT91_PMC_BIASEN         (1   << 24)             /* UTMI BIAS Enable */
+-#define               AT91_PMC_BIASCOUNT      (0xf << 28)             /* UTMI PLL Start-up Time */
++#define               AT91_PMC_BIASCOUNT      (0xf << 28)             /* UTMI BIAS Start-up Time */
+ #define       AT91_CKGR_MOR           (AT91_PMC + 0x20)       /* Main Oscillator Register [not on SAM9RL] */
+ #define               AT91_PMC_MOSCEN         (1    << 0)             /* Main Oscillator Enable */
+@@ -73,6 +73,7 @@
+ #define                       AT91_PMC_CSS_MAIN               (1 << 0)
+ #define                       AT91_PMC_CSS_PLLA               (2 << 0)
+ #define                       AT91_PMC_CSS_PLLB               (3 << 0)
++#define                       AT91_PMC_CSS_UPLL               (3 << 0)        /* [some SAM9 only] */
+ #define               AT91_PMC_PRES           (7 <<  2)               /* Master Clock Prescaler */
+ #define                       AT91_PMC_PRES_1                 (0 << 2)
+ #define                       AT91_PMC_PRES_2                 (1 << 2)
+@@ -89,12 +90,25 @@
+ #define                       AT91SAM9_PMC_MDIV_1             (0 << 8)        /* [SAM9,CAP9 only] */
+ #define                       AT91SAM9_PMC_MDIV_2             (1 << 8)
+ #define                       AT91SAM9_PMC_MDIV_4             (2 << 8)
+-#define                       AT91SAM9_PMC_MDIV_6             (3 << 8)
++#define                       AT91SAM9_PMC_MDIV_6             (3 << 8)        /* [some SAM9 only] */
++#define                       AT91SAM9_PMC_MDIV_3             (3 << 8)        /* [some SAM9 only] */
+ #define               AT91_PMC_PDIV           (1 << 12)               /* Processor Clock Division [some SAM9 only] */
+ #define                       AT91_PMC_PDIV_1                 (0 << 12)
+ #define                       AT91_PMC_PDIV_2                 (1 << 12)
+-
+-#define       AT91_PMC_PCKR(n)        (AT91_PMC + 0x40 + ((n) * 4))   /* Programmable Clock 0-4 Registers */
++#define               AT91_PMC_PLLADIV2       (1 << 12)               /* PLLA divisor by 2 [some SAM9 only] */
++#define                       AT91_PMC_PLLADIV2_OFF           (0 << 12)
++#define                       AT91_PMC_PLLADIV2_ON            (1 << 12)
++
++#define       AT91_PMC_USB            (AT91_PMC + 0x38)       /* USB Clock Register [some SAM9 only] */
++#define               AT91_PMC_USBS           (0x1 <<  0)             /* USB OHCI Input clock selection */
++#define                       AT91_PMC_USBS_PLLA              (0 << 0)
++#define                       AT91_PMC_USBS_UPLL              (1 << 0)
++#define               AT91_PMC_OHCIUSBDIV     (0xF <<  8)             /* Divider for USB OHCI Clock */
++
++#define       AT91_PMC_PCKR(n)        (AT91_PMC + 0x40 + ((n) * 4))   /* Programmable Clock 0-N Registers */
++#define               AT91_PMC_CSSMCK         (0x1 <<  8)             /* CSS or Master Clock Selection */
++#define                       AT91_PMC_CSSMCK_CSS             (0 << 8)
++#define                       AT91_PMC_CSSMCK_MCK             (1 << 8)
+ #define       AT91_PMC_IER            (AT91_PMC + 0x60)       /* Interrupt Enable Register */
+ #define       AT91_PMC_IDR            (AT91_PMC + 0x64)       /* Interrupt Disable Register */
+@@ -103,7 +117,7 @@
+ #define               AT91_PMC_LOCKA          (1 <<  1)               /* PLLA Lock */
+ #define               AT91_PMC_LOCKB          (1 <<  2)               /* PLLB Lock */
+ #define               AT91_PMC_MCKRDY         (1 <<  3)               /* Master Clock */
+-#define               AT91_PMC_LOCKU          (1 <<  6)               /* UPLL Lock [AT91CAP9 only] */
++#define               AT91_PMC_LOCKU          (1 <<  6)               /* UPLL Lock [some SAM9, AT91CAP9 only] */
+ #define               AT91_PMC_OSCSEL         (1 <<  7)               /* Slow Clock Oscillator [AT91CAP9 revC only] */
+ #define               AT91_PMC_PCK0RDY        (1 <<  8)               /* Programmable Clock 0 */
+ #define               AT91_PMC_PCK1RDY        (1 <<  9)               /* Programmable Clock 1 */
+Index: linux-2.6.30/drivers/serial/atmel_serial.c
+===================================================================
+--- linux-2.6.30.orig/drivers/serial/atmel_serial.c    2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/drivers/serial/atmel_serial.c 2011-02-01 16:40:30.133004041 +0100
+@@ -1104,11 +1104,13 @@
+       /* update the per-port timeout */
+       uart_update_timeout(port, termios->c_cflag, baud);
+-      /* save/disable interrupts and drain transmitter */
++      /*
++       * save/disable interrupts. The tty layer will ensure that the
++       * transmitter is empty if requested by the caller, so there's
++       * no need to wait for it here.
++       */
+       imr = UART_GET_IMR(port);
+       UART_PUT_IDR(port, -1);
+-      while (!(UART_GET_CSR(port) & ATMEL_US_TXEMPTY))
+-              cpu_relax();
+       /* disable receiver and transmitter */
+       UART_PUT_CR(port, ATMEL_US_TXDIS | ATMEL_US_RXDIS);
+Index: linux-2.6.30/drivers/usb/gadget/atmel_usba_udc.c
+===================================================================
+--- linux-2.6.30.orig/drivers/usb/gadget/atmel_usba_udc.c      2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/drivers/usb/gadget/atmel_usba_udc.c   2011-02-01 16:40:30.137041993 +0100
+@@ -326,13 +326,7 @@
+       return 1;
+ }
+-#if defined(CONFIG_AVR32)
+-
+-static void toggle_bias(int is_on)
+-{
+-}
+-
+-#elif defined(CONFIG_ARCH_AT91)
++#if defined(CONFIG_ARCH_AT91SAM9RL)
+ #include <mach/at91_pmc.h>
+@@ -346,7 +340,13 @@
+               at91_sys_write(AT91_CKGR_UCKR, uckr & ~(AT91_PMC_BIASEN));
+ }
+-#endif /* CONFIG_ARCH_AT91 */
++#else
++
++static void toggle_bias(int is_on)
++{
++}
++
++#endif /* CONFIG_ARCH_AT91SAM9RL */
+ static void next_fifo_transaction(struct usba_ep *ep, struct usba_request *req)
+ {
+Index: linux-2.6.30/drivers/net/Kconfig
+===================================================================
+--- linux-2.6.30.orig/drivers/net/Kconfig      2011-02-01 16:40:18.000000000 +0100
++++ linux-2.6.30/drivers/net/Kconfig   2011-02-01 16:40:30.141043034 +0100
+@@ -219,7 +219,7 @@
+ config MACB
+       tristate "Atmel MACB support"
+-      depends on AVR32 || ARCH_AT91SAM9260 || ARCH_AT91SAM9263 || ARCH_AT91SAM9G20 || ARCH_AT91CAP9 || ARCH_AT572D940HF
++      depends on AVR32 || ARCH_AT91SAM9260 || ARCH_AT91SAM9263 || ARCH_AT91SAM9G20 || ARCH_AT91SAM9G45 || ARCH_AT91CAP9 || ARCH_AT572D940HF
+       select PHYLIB
+       help
+         The Atmel MACB ethernet interface is found on many AT32 and AT91
+@@ -228,6 +228,12 @@
+         To compile this driver as a module, choose M here: the module
+         will be called macb.
++config MACB_TX_SRAM
++      bool "Atmel MACB TX buffers in internal SRAM"
++      depends on NET_ETHERNET && MACB && (ARCH_AT91SAM9260 || ARCH_AT91SAM9263)
++      help
++              Use internal SRAM for TX buffers.
++
+ source "drivers/net/arm/Kconfig"
+ config AX88796
+Index: linux-2.6.30/drivers/net/macb.c
+===================================================================
+--- linux-2.6.30.orig/drivers/net/macb.c       2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/drivers/net/macb.c    2011-02-01 16:40:30.169008345 +0100
+@@ -33,9 +33,21 @@
+ /* Make the IP header word-aligned (the ethernet header is 14 bytes) */
+ #define RX_OFFSET             2
+-#define TX_RING_SIZE          128
++#if defined(CONFIG_ARCH_AT91) && defined(CONFIG_MACB_TX_SRAM)
++      #if defined(CONFIG_ARCH_AT91SAM9260)
++              #define TX_RING_SIZE       2
++      #elif defined(CONFIG_ARCH_AT91SAM9263)
++              #define TX_RING_SIZE       32
++      #endif
++      #define TX_BUFFER_SIZE       1536
++      #define TX_RING_BYTES        (sizeof(struct dma_desc) * TX_RING_SIZE)
++      #define TX_DMA_SIZE      ((TX_RING_BYTES) + (TX_RING_SIZE) * (TX_BUFFER_SIZE))
++#else
++      #define TX_RING_SIZE     128
++      #define TX_RING_BYTES        (sizeof(struct dma_desc) * TX_RING_SIZE)
++#endif
++
+ #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)
+@@ -378,8 +390,10 @@
+               dev_dbg(&bp->pdev->dev, "skb %u (data %p) TX complete\n",
+                       tail, skb->data);
++#if !defined(CONFIG_MACB_TX_SRAM)
+               dma_unmap_single(&bp->pdev->dev, rp->mapping, skb->len,
+                                DMA_TO_DEVICE);
++#endif
+               bp->stats.tx_packets++;
+               bp->stats.tx_bytes += skb->len;
+               rp->skb = NULL;
+@@ -635,8 +649,13 @@
+       entry = bp->tx_head;
+       dev_dbg(&bp->pdev->dev, "Allocated ring entry %u\n", entry);
++#if defined(CONFIG_ARCH_AT91) && defined(CONFIG_MACB_TX_SRAM)
++      mapping = bp->tx_ring[entry].addr;
++      memcpy(bp->tx_buffers + entry * TX_BUFFER_SIZE, skb->data, len);
++#else
+       mapping = dma_map_single(&bp->pdev->dev, skb->data,
+                                len, DMA_TO_DEVICE);
++#endif
+       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",
+@@ -647,7 +666,9 @@
+       if (entry == (TX_RING_SIZE - 1))
+               ctrl |= MACB_BIT(TX_WRAP);
++#if !defined(CONFIG_MACB_TX_SRAM)
+       bp->tx_ring[entry].addr = mapping;
++#endif
+       bp->tx_ring[entry].ctrl = ctrl;
+       wmb();
+@@ -678,8 +699,12 @@
+               bp->rx_ring = NULL;
+       }
+       if (bp->tx_ring) {
++#if defined(CONFIG_ARCH_AT91) && defined(CONFIG_MACB_TX_SRAM)
++              iounmap((void *)bp->tx_ring);
++#else
+               dma_free_coherent(&bp->pdev->dev, TX_RING_BYTES,
+                                 bp->tx_ring, bp->tx_ring_dma);
++#endif
+               bp->tx_ring = NULL;
+       }
+       if (bp->rx_buffers) {
+@@ -688,6 +713,11 @@
+                                 bp->rx_buffers, bp->rx_buffers_dma);
+               bp->rx_buffers = NULL;
+       }
++
++#if defined(CONFIG_ARCH_AT91) && defined(CONFIG_MACB_TX_SRAM)
++      if (bp->tx_ring_dma)
++              release_mem_region(bp->tx_ring_dma, TX_DMA_SIZE);
++#endif
+ }
+ static int macb_alloc_consistent(struct macb *bp)
+@@ -708,14 +738,45 @@
+               "Allocated RX ring of %d bytes at %08lx (mapped %p)\n",
+               size, (unsigned long)bp->rx_ring_dma, bp->rx_ring);
++#if defined(CONFIG_ARCH_AT91) && defined(CONFIG_MACB_TX_SRAM)
++#if  defined(CONFIG_ARCH_AT91SAM9260)
++      if (!cpu_is_at91sam9xe()
++      && request_mem_region(AT91SAM9260_SRAM0_BASE, TX_DMA_SIZE, "macb")) {
++              bp->tx_ring_dma = AT91SAM9260_SRAM0_BASE;
++      } else {
++              if (request_mem_region(AT91SAM9260_SRAM1_BASE, TX_DMA_SIZE, "macb")) {
++                      bp->tx_ring_dma = AT91SAM9260_SRAM1_BASE;
++              } else {
++                      printk(KERN_WARNING "Cannot request SRAM memory for TX ring, already used\n");
++                      return -EBUSY;
++              }
++      }
++#elif defined(CONFIG_ARCH_AT91SAM9263)
++      if (request_mem_region(AT91SAM9263_SRAM0_BASE, TX_DMA_SIZE, "macb")) {
++              bp->tx_ring_dma = AT91SAM9263_SRAM0_BASE;
++      } else {
++              printk(KERN_WARNING "Cannot request SRAM memory for TX ring, already used\n");
++              return -EBUSY;
++      }
++#endif
++
++      bp->tx_ring = ioremap(bp->tx_ring_dma, TX_DMA_SIZE);
++      if (!bp->tx_ring)
++              return -ENOMEM;
++
++      bp->tx_buffers_dma = bp->tx_ring_dma + TX_RING_BYTES;
++      bp->tx_buffers = (char *) bp->tx_ring + TX_RING_BYTES;
++#else
+       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);
++#endif
+       size = RX_RING_SIZE * RX_BUFFER_SIZE;
+       bp->rx_buffers = dma_alloc_coherent(&bp->pdev->dev, size,
+@@ -746,10 +807,18 @@
+       }
+       bp->rx_ring[RX_RING_SIZE - 1].addr |= MACB_BIT(RX_WRAP);
++#if defined(CONFIG_ARCH_AT91) && defined(CONFIG_MACB_TX_SRAM)
++      for (i = 0; i < TX_RING_SIZE; i++) {
++              bp->tx_ring[i].addr = bp->tx_buffers_dma + i * TX_BUFFER_SIZE;
++              bp->tx_ring[i].ctrl = MACB_BIT(TX_USED);
++      }
++#else
+       for (i = 0; i < TX_RING_SIZE; i++) {
+               bp->tx_ring[i].addr = 0;
+               bp->tx_ring[i].ctrl = MACB_BIT(TX_USED);
+       }
++#endif
++
+       bp->tx_ring[TX_RING_SIZE - 1].ctrl |= MACB_BIT(TX_WRAP);
+       bp->rx_tail = bp->tx_head = bp->tx_tail = 0;
+Index: linux-2.6.30/drivers/net/macb.h
+===================================================================
+--- linux-2.6.30.orig/drivers/net/macb.h       2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/drivers/net/macb.h    2011-02-01 16:40:30.137041993 +0100
+@@ -369,8 +369,13 @@
+       struct dma_desc         *tx_ring;
+       struct ring_info        *tx_skb;
++#if defined(CONFIG_ARCH_AT91)
++      void            *tx_buffers;
++#endif
++
+       spinlock_t              lock;
+       struct platform_device  *pdev;
++      struct clk      *macb_clk;
+       struct clk              *pclk;
+       struct clk              *hclk;
+       struct net_device       *dev;
+@@ -382,6 +387,10 @@
+       dma_addr_t              tx_ring_dma;
+       dma_addr_t              rx_buffers_dma;
++#if defined(CONFIG_ARCH_AT91)
++      dma_addr_t      tx_buffers_dma;
++#endif
++
+       unsigned int            rx_pending, tx_pending;
+       struct mii_bus          *mii_bus;
+Index: linux-2.6.30/arch/arm/mach-at91/include/mach/at91sam9g45.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.30/arch/arm/mach-at91/include/mach/at91sam9g45.h 2011-02-01 16:40:30.141043034 +0100
+@@ -0,0 +1,155 @@
++/*
++ * Chip-specific header file for the AT91SAM9G45 family
++ *
++ *  Copyright (C) 2008-2009 Atmel Corporation.
++ *
++ * Common definitions.
++ * Based on AT91SAM9G45 preliminary datasheet.
++ *
++ * 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 AT91SAM9G45_H
++#define AT91SAM9G45_H
++
++/*
++ * Peripheral identifiers/interrupts.
++ */
++#define AT91_ID_FIQ           0       /* Advanced Interrupt Controller (FIQ) */
++#define AT91_ID_SYS           1       /* System Controller Interrupt */
++#define AT91SAM9G45_ID_PIOA   2       /* Parallel I/O Controller A */
++#define AT91SAM9G45_ID_PIOB   3       /* Parallel I/O Controller B */
++#define AT91SAM9G45_ID_PIOC   4       /* Parallel I/O Controller C */
++#define AT91SAM9G45_ID_PIODE  5       /* Parallel I/O Controller D and E */
++#define AT91SAM9G45_ID_TRNG   6       /* True Random Number Generator */
++#define AT91SAM9G45_ID_US0    7       /* USART 0 */
++#define AT91SAM9G45_ID_US1    8       /* USART 1 */
++#define AT91SAM9G45_ID_US2    9       /* USART 2 */
++#define AT91SAM9G45_ID_US3    10      /* USART 3 */
++#define AT91SAM9G45_ID_MCI0   11      /* High Speed Multimedia Card Interface 0 */
++#define AT91SAM9G45_ID_TWI0   12      /* Two-Wire Interface 0 */
++#define AT91SAM9G45_ID_TWI1   13      /* Two-Wire Interface 1 */
++#define AT91SAM9G45_ID_SPI0   14      /* Serial Peripheral Interface 0 */
++#define AT91SAM9G45_ID_SPI1   15      /* Serial Peripheral Interface 1 */
++#define AT91SAM9G45_ID_SSC0   16      /* Synchronous Serial Controller 0 */
++#define AT91SAM9G45_ID_SSC1   17      /* Synchronous Serial Controller 1 */
++#define AT91SAM9G45_ID_TCB    18      /* Timer Counter 0, 1, 2, 3, 4 and 5 */
++#define AT91SAM9G45_ID_PWMC   19      /* Pulse Width Modulation Controller */
++#define AT91SAM9G45_ID_TSC    20      /* Touch Screen ADC Controller */
++#define AT91SAM9G45_ID_DMA    21      /* DMA Controller */
++#define AT91SAM9G45_ID_UHPHS  22      /* USB Host High Speed */
++#define AT91SAM9G45_ID_LCDC   23      /* LCD Controller */
++#define AT91SAM9G45_ID_AC97C  24      /* AC97 Controller */
++#define AT91SAM9G45_ID_EMAC   25      /* Ethernet MAC */
++#define AT91SAM9G45_ID_ISI    26      /* Image Sensor Interface */
++#define AT91SAM9G45_ID_UDPHS  27      /* USB Device High Speed */
++#define AT91SAM9G45_ID_AESTDESSHA 28  /* AES + T-DES + SHA */
++#define AT91SAM9G45_ID_MCI1   29      /* High Speed Multimedia Card Interface 1 */
++#define AT91SAM9G45_ID_VDEC   30      /* Video Decoder */
++#define AT91SAM9G45_ID_IRQ0   31      /* Advanced Interrupt Controller */
++
++/*
++ * User Peripheral physical base addresses.
++ */
++#define AT91SAM9G45_BASE_UDPHS                0xfff78000
++#define AT91SAM9G45_BASE_TCB0         0xfff7c000
++#define AT91SAM9G45_BASE_TC0          0xfff7c000
++#define AT91SAM9G45_BASE_TC1          0xfff7c040
++#define AT91SAM9G45_BASE_TC2          0xfff7c080
++#define AT91SAM9G45_BASE_MCI0         0xfff80000
++#define AT91SAM9G45_BASE_TWI0         0xfff84000
++#define AT91SAM9G45_BASE_TWI1         0xfff88000
++#define AT91SAM9G45_BASE_US0          0xfff8c000
++#define AT91SAM9G45_BASE_US1          0xfff90000
++#define AT91SAM9G45_BASE_US2          0xfff94000
++#define AT91SAM9G45_BASE_US3          0xfff98000
++#define AT91SAM9G45_BASE_SSC0         0xfff9c000
++#define AT91SAM9G45_BASE_SSC1         0xfffa0000
++#define AT91SAM9G45_BASE_SPI0         0xfffa4000
++#define AT91SAM9G45_BASE_SPI1         0xfffa8000
++#define AT91SAM9G45_BASE_AC97C                0xfffac000
++#define AT91SAM9G45_BASE_TSC          0xfffb0000
++#define AT91SAM9G45_BASE_ISI          0xfffb4000
++#define AT91SAM9G45_BASE_PWMC         0xfffb8000
++#define AT91SAM9G45_BASE_EMAC         0xfffbc000
++#define AT91SAM9G45_BASE_AES          0xfffc0000
++#define AT91SAM9G45_BASE_TDES         0xfffc4000
++#define AT91SAM9G45_BASE_SHA          0xfffc8000
++#define AT91SAM9G45_BASE_TRNG         0xfffcc000
++#define AT91SAM9G45_BASE_MCI1         0xfffd0000
++#define AT91SAM9G45_BASE_TCB1         0xfffd4000
++#define AT91SAM9G45_BASE_TC3          0xfffd4000
++#define AT91SAM9G45_BASE_TC4          0xfffd4040
++#define AT91SAM9G45_BASE_TC5          0xfffd4080
++#define AT91_BASE_SYS                 0xffffe200
++
++/*
++ * System Peripherals (offset from AT91_BASE_SYS)
++ */
++#define AT91_ECC      (0xffffe200 - AT91_BASE_SYS)
++#define AT91_DDRSDRC1 (0xffffe400 - AT91_BASE_SYS)
++#define AT91_DDRSDRC0 (0xffffe600 - AT91_BASE_SYS)
++#define AT91_SMC      (0xffffe800 - AT91_BASE_SYS)
++#define AT91_MATRIX   (0xffffea00 - AT91_BASE_SYS)
++#define AT91_DMA      (0xffffec00 - AT91_BASE_SYS)
++#define AT91_DBGU     (0xffffee00 - AT91_BASE_SYS)
++#define AT91_AIC      (0xfffff000 - AT91_BASE_SYS)
++#define AT91_PIOA     (0xfffff200 - AT91_BASE_SYS)
++#define AT91_PIOB     (0xfffff400 - AT91_BASE_SYS)
++#define AT91_PIOC     (0xfffff600 - AT91_BASE_SYS)
++#define AT91_PIOD     (0xfffff800 - AT91_BASE_SYS)
++#define AT91_PIOE     (0xfffffa00 - AT91_BASE_SYS)
++#define AT91_PMC      (0xfffffc00 - AT91_BASE_SYS)
++#define AT91_RSTC     (0xfffffd00 - AT91_BASE_SYS)
++#define AT91_SHDWC    (0xfffffd10 - AT91_BASE_SYS)
++#define AT91_RTT      (0xfffffd20 - AT91_BASE_SYS)
++#define AT91_PIT      (0xfffffd30 - AT91_BASE_SYS)
++#define AT91_WDT      (0xfffffd40 - AT91_BASE_SYS)
++#define AT91_GPBR     (0xfffffd60 - AT91_BASE_SYS)
++#define AT91_RTC      (0xfffffdb0 - AT91_BASE_SYS)
++
++#define AT91_USART0   AT91SAM9G45_BASE_US0
++#define AT91_USART1   AT91SAM9G45_BASE_US1
++#define AT91_USART2   AT91SAM9G45_BASE_US2
++#define AT91_USART3   AT91SAM9G45_BASE_US3
++
++/*
++ * Internal Memory.
++ */
++#define AT91SAM9G45_SRAM_BASE 0x00300000      /* Internal SRAM base address */
++#define AT91SAM9G45_SRAM_SIZE SZ_64K          /* Internal SRAM size (64Kb) */
++
++#define AT91SAM9G45_ROM_BASE  0x00400000      /* Internal ROM base address */
++#define AT91SAM9G45_ROM_SIZE  SZ_64K          /* Internal ROM size (64Kb) */
++
++#define AT91SAM9G45_LCDC_BASE 0x00500000      /* LCD Controller */
++#define AT91SAM9G45_UDPHS_FIFO        0x00600000      /* USB Device HS controller */
++#define AT91SAM9G45_OHCI_BASE 0x00700000      /* USB Host controller (OHCI) */
++#define AT91SAM9G45_EHCI_BASE 0x00800000      /* USB Host controller (EHCI) */
++#define AT91SAM9G45_VDEC_BASE 0x00900000      /* Video Decoder Controller */
++
++#define CONFIG_DRAM_BASE      AT91_CHIPSELECT_6
++
++#define CONSISTENT_DMA_SIZE   SZ_4M
++
++/*
++ * DMA peripheral identifiers
++ * for hardware handshaking interface
++ */
++#define AT_DMA_ID_MCI0                 0
++#define AT_DMA_ID_SPI0_TX      1
++#define AT_DMA_ID_SPI0_RX      2
++#define AT_DMA_ID_SPI1_TX      3
++#define AT_DMA_ID_SPI1_RX      4
++#define AT_DMA_ID_SSC0_TX      5
++#define AT_DMA_ID_SSC0_RX      6
++#define AT_DMA_ID_SSC1_TX      7
++#define AT_DMA_ID_SSC1_RX      8
++#define AT_DMA_ID_AC97_TX      9
++#define AT_DMA_ID_AC97_RX     10
++#define AT_DMA_ID_MCI1                13
++
++#endif
+Index: linux-2.6.30/arch/arm/mach-at91/include/mach/at91sam9g45_matrix.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.30/arch/arm/mach-at91/include/mach/at91sam9g45_matrix.h  2011-02-01 16:40:30.137041993 +0100
+@@ -0,0 +1,153 @@
++/*
++ * Matrix-centric header file for the AT91SAM9G45 family
++ *
++ *  Copyright (C) 2008-2009 Atmel Corporation.
++ *
++ * Memory Controllers (MATRIX, EBI) - System peripherals registers.
++ * Based on AT91SAM9G45 preliminary datasheet.
++ *
++ * 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 AT91SAM9G45_MATRIX_H
++#define AT91SAM9G45_MATRIX_H
++
++#define AT91_MATRIX_MCFG0     (AT91_MATRIX + 0x00)    /* Master Configuration Register 0 */
++#define AT91_MATRIX_MCFG1     (AT91_MATRIX + 0x04)    /* Master Configuration Register 1 */
++#define AT91_MATRIX_MCFG2     (AT91_MATRIX + 0x08)    /* Master Configuration Register 2 */
++#define AT91_MATRIX_MCFG3     (AT91_MATRIX + 0x0C)    /* Master Configuration Register 3 */
++#define AT91_MATRIX_MCFG4     (AT91_MATRIX + 0x10)    /* Master Configuration Register 4 */
++#define AT91_MATRIX_MCFG5     (AT91_MATRIX + 0x14)    /* Master Configuration Register 5 */
++#define AT91_MATRIX_MCFG6     (AT91_MATRIX + 0x18)    /* Master Configuration Register 6 */
++#define AT91_MATRIX_MCFG7     (AT91_MATRIX + 0x1C)    /* Master Configuration Register 7 */
++#define AT91_MATRIX_MCFG8     (AT91_MATRIX + 0x20)    /* Master Configuration Register 8 */
++#define AT91_MATRIX_MCFG9     (AT91_MATRIX + 0x24)    /* Master Configuration Register 9 */
++#define AT91_MATRIX_MCFG10    (AT91_MATRIX + 0x28)    /* Master Configuration Register 10 */
++#define AT91_MATRIX_MCFG11    (AT91_MATRIX + 0x2C)    /* Master Configuration Register 11 */
++#define               AT91_MATRIX_ULBT        (7 << 0)        /* Undefined Length Burst Type */
++#define                       AT91_MATRIX_ULBT_INFINITE       (0 << 0)
++#define                       AT91_MATRIX_ULBT_SINGLE         (1 << 0)
++#define                       AT91_MATRIX_ULBT_FOUR           (2 << 0)
++#define                       AT91_MATRIX_ULBT_EIGHT          (3 << 0)
++#define                       AT91_MATRIX_ULBT_SIXTEEN        (4 << 0)
++#define                       AT91_MATRIX_ULBT_THIRTYTWO      (5 << 0)
++#define                       AT91_MATRIX_ULBT_SIXTYFOUR      (6 << 0)
++#define                       AT91_MATRIX_ULBT_128            (7 << 0)
++
++#define AT91_MATRIX_SCFG0     (AT91_MATRIX + 0x40)    /* Slave Configuration Register 0 */
++#define AT91_MATRIX_SCFG1     (AT91_MATRIX + 0x44)    /* Slave Configuration Register 1 */
++#define AT91_MATRIX_SCFG2     (AT91_MATRIX + 0x48)    /* Slave Configuration Register 2 */
++#define AT91_MATRIX_SCFG3     (AT91_MATRIX + 0x4C)    /* Slave Configuration Register 3 */
++#define AT91_MATRIX_SCFG4     (AT91_MATRIX + 0x50)    /* Slave Configuration Register 4 */
++#define AT91_MATRIX_SCFG5     (AT91_MATRIX + 0x54)    /* Slave Configuration Register 5 */
++#define AT91_MATRIX_SCFG6     (AT91_MATRIX + 0x58)    /* Slave Configuration Register 6 */
++#define AT91_MATRIX_SCFG7     (AT91_MATRIX + 0x5C)    /* Slave Configuration Register 7 */
++#define               AT91_MATRIX_SLOT_CYCLE          (0x1ff << 0)    /* Maximum Number of Allowed Cycles for a Burst */
++#define               AT91_MATRIX_DEFMSTR_TYPE        (3    << 16)    /* Default Master Type */
++#define                       AT91_MATRIX_DEFMSTR_TYPE_NONE   (0 << 16)
++#define                       AT91_MATRIX_DEFMSTR_TYPE_LAST   (1 << 16)
++#define                       AT91_MATRIX_DEFMSTR_TYPE_FIXED  (2 << 16)
++#define               AT91_MATRIX_FIXED_DEFMSTR       (0xf  << 18)    /* Fixed Index of Default Master */
++
++#define AT91_MATRIX_PRAS0     (AT91_MATRIX + 0x80)    /* Priority Register A for Slave 0 */
++#define AT91_MATRIX_PRBS0     (AT91_MATRIX + 0x84)    /* Priority Register B for Slave 0 */
++#define AT91_MATRIX_PRAS1     (AT91_MATRIX + 0x88)    /* Priority Register A for Slave 1 */
++#define AT91_MATRIX_PRBS1     (AT91_MATRIX + 0x8C)    /* Priority Register B for Slave 1 */
++#define AT91_MATRIX_PRAS2     (AT91_MATRIX + 0x90)    /* Priority Register A for Slave 2 */
++#define AT91_MATRIX_PRBS2     (AT91_MATRIX + 0x94)    /* Priority Register B for Slave 2 */
++#define AT91_MATRIX_PRAS3     (AT91_MATRIX + 0x98)    /* Priority Register A for Slave 3 */
++#define AT91_MATRIX_PRBS3     (AT91_MATRIX + 0x9C)    /* Priority Register B for Slave 3 */
++#define AT91_MATRIX_PRAS4     (AT91_MATRIX + 0xA0)    /* Priority Register A for Slave 4 */
++#define AT91_MATRIX_PRBS4     (AT91_MATRIX + 0xA4)    /* Priority Register B for Slave 4 */
++#define AT91_MATRIX_PRAS5     (AT91_MATRIX + 0xA8)    /* Priority Register A for Slave 5 */
++#define AT91_MATRIX_PRBS5     (AT91_MATRIX + 0xAC)    /* Priority Register B for Slave 5 */
++#define AT91_MATRIX_PRAS6     (AT91_MATRIX + 0xB0)    /* Priority Register A for Slave 6 */
++#define AT91_MATRIX_PRBS6     (AT91_MATRIX + 0xB4)    /* Priority Register B for Slave 6 */
++#define AT91_MATRIX_PRAS7     (AT91_MATRIX + 0xB8)    /* Priority Register A for Slave 7 */
++#define AT91_MATRIX_PRBS7     (AT91_MATRIX + 0xBC)    /* Priority Register B for Slave 7 */
++#define               AT91_MATRIX_M0PR                (3 << 0)        /* Master 0 Priority */
++#define               AT91_MATRIX_M1PR                (3 << 4)        /* Master 1 Priority */
++#define               AT91_MATRIX_M2PR                (3 << 8)        /* Master 2 Priority */
++#define               AT91_MATRIX_M3PR                (3 << 12)       /* Master 3 Priority */
++#define               AT91_MATRIX_M4PR                (3 << 16)       /* Master 4 Priority */
++#define               AT91_MATRIX_M5PR                (3 << 20)       /* Master 5 Priority */
++#define               AT91_MATRIX_M6PR                (3 << 24)       /* Master 6 Priority */
++#define               AT91_MATRIX_M7PR                (3 << 28)       /* Master 7 Priority */
++#define               AT91_MATRIX_M8PR                (3 << 0)        /* Master 8 Priority (in Register B) */
++#define               AT91_MATRIX_M9PR                (3 << 4)        /* Master 9 Priority (in Register B) */
++#define               AT91_MATRIX_M10PR               (3 << 8)        /* Master 10 Priority (in Register B) */
++#define               AT91_MATRIX_M11PR               (3 << 12)       /* Master 11 Priority (in Register B) */
++
++#define AT91_MATRIX_MRCR      (AT91_MATRIX + 0x100)   /* Master Remap Control Register */
++#define               AT91_MATRIX_RCB0                (1 << 0)        /* Remap Command for AHB Master 0 (ARM926EJ-S Instruction Master) */
++#define               AT91_MATRIX_RCB1                (1 << 1)        /* Remap Command for AHB Master 1 (ARM926EJ-S Data Master) */
++#define               AT91_MATRIX_RCB2                (1 << 2)
++#define               AT91_MATRIX_RCB3                (1 << 3)
++#define               AT91_MATRIX_RCB4                (1 << 4)
++#define               AT91_MATRIX_RCB5                (1 << 5)
++#define               AT91_MATRIX_RCB6                (1 << 6)
++#define               AT91_MATRIX_RCB7                (1 << 7)
++#define               AT91_MATRIX_RCB8                (1 << 8)
++#define               AT91_MATRIX_RCB9                (1 << 9)
++#define               AT91_MATRIX_RCB10               (1 << 10)
++#define               AT91_MATRIX_RCB11               (1 << 11)
++
++#define AT91_MATRIX_TCMR      (AT91_MATRIX + 0x110)   /* TCM Configuration Register */
++#define               AT91_MATRIX_ITCM_SIZE           (0xf << 0)      /* Size of ITCM enabled memory block */
++#define                       AT91_MATRIX_ITCM_0              (0 << 0)
++#define                       AT91_MATRIX_ITCM_32             (6 << 0)
++#define               AT91_MATRIX_DTCM_SIZE           (0xf << 4)      /* Size of DTCM enabled memory block */
++#define                       AT91_MATRIX_DTCM_0              (0 << 4)
++#define                       AT91_MATRIX_DTCM_32             (6 << 4)
++#define                       AT91_MATRIX_DTCM_64             (7 << 4)
++#define               AT91_MATRIX_TCM_NWS             (0x1 << 11)     /* Wait state TCM register */
++#define                       AT91_MATRIX_TCM_NO_WS           (0x0 << 11)
++#define                       AT91_MATRIX_TCM_ONE_WS          (0x1 << 11)
++
++#define AT91_MATRIX_VIDEO     (AT91_MATRIX + 0x118)   /* Video Mode Configuration Register */
++#define               AT91C_VDEC_SEL                  (0x1 <<  0) /* Video Mode Selection */
++#define                       AT91C_VDEC_SEL_OFF              (0 << 0)
++#define                       AT91C_VDEC_SEL_ON               (1 << 0)
++
++#define AT91_MATRIX_EBICSA    (AT91_MATRIX + 0x128)   /* EBI Chip Select Assignment Register */
++#define               AT91_MATRIX_EBI_CS1A            (1 << 1)        /* Chip Select 1 Assignment */
++#define                       AT91_MATRIX_EBI_CS1A_SMC                (0 << 1)
++#define                       AT91_MATRIX_EBI_CS1A_SDRAMC             (1 << 1)
++#define               AT91_MATRIX_EBI_CS3A            (1 << 3)        /* Chip Select 3 Assignment */
++#define                       AT91_MATRIX_EBI_CS3A_SMC                (0 << 3)
++#define                       AT91_MATRIX_EBI_CS3A_SMC_SMARTMEDIA     (1 << 3)
++#define               AT91_MATRIX_EBI_CS4A            (1 << 4)        /* Chip Select 4 Assignment */
++#define                       AT91_MATRIX_EBI_CS4A_SMC                (0 << 4)
++#define                       AT91_MATRIX_EBI_CS4A_SMC_CF0            (1 << 4)
++#define               AT91_MATRIX_EBI_CS5A            (1 << 5)        /* Chip Select 5 Assignment */
++#define                       AT91_MATRIX_EBI_CS5A_SMC                (0 << 5)
++#define                       AT91_MATRIX_EBI_CS5A_SMC_CF1            (1 << 5)
++#define               AT91_MATRIX_EBI_DBPUC           (1 << 8)        /* Data Bus Pull-up Configuration */
++#define                       AT91_MATRIX_EBI_DBPU_ON                 (0 << 8)
++#define                       AT91_MATRIX_EBI_DBPU_OFF                (1 << 8)
++#define               AT91_MATRIX_EBI_VDDIOMSEL       (1 << 16)       /* Memory voltage selection */
++#define                       AT91_MATRIX_EBI_VDDIOMSEL_1_8V          (0 << 16)
++#define                       AT91_MATRIX_EBI_VDDIOMSEL_3_3V          (1 << 16)
++#define               AT91_MATRIX_EBI_EBI_IOSR        (1 << 17)       /* EBI I/O slew rate selection */
++#define                       AT91_MATRIX_EBI_EBI_IOSR_REDUCED        (0 << 17)
++#define                       AT91_MATRIX_EBI_EBI_IOSR_NORMAL         (1 << 17)
++#define               AT91_MATRIX_EBI_DDR_IOSR        (1 << 18)       /* DDR2 dedicated port I/O slew rate selection */
++#define                       AT91_MATRIX_EBI_DDR_IOSR_REDUCED        (0 << 18)
++#define                       AT91_MATRIX_EBI_DDR_IOSR_NORMAL         (1 << 18)
++
++#define AT91_MATRIX_WPMR      (AT91_MATRIX + 0x1E4)   /* Write Protect Mode Register */
++#define               AT91_MATRIX_WPMR_WPEN           (1 << 0)        /* Write Protect ENable */
++#define                       AT91_MATRIX_WPMR_WP_WPDIS               (0 << 0)
++#define                       AT91_MATRIX_WPMR_WP_WPEN                (1 << 0)
++#define               AT91_MATRIX_WPMR_WPKEY          (0xFFFFFF << 8) /* Write Protect KEY */
++
++#define AT91_MATRIX_WPSR      (AT91_MATRIX + 0x1E8)   /* Write Protect Status Register */
++#define               AT91_MATRIX_WPSR_WPVS           (1 << 0)        /* Write Protect Violation Status */
++#define                       AT91_MATRIX_WPSR_NO_WPV         (0 << 0)
++#define                       AT91_MATRIX_WPSR_WPV            (1 << 0)
++#define               AT91_MATRIX_WPSR_WPVSRC         (0xFFFF << 8)   /* Write Protect Violation Source */
++
++#endif
+Index: linux-2.6.30/arch/arm/mach-at91/include/mach/cpu.h
+===================================================================
+--- linux-2.6.30.orig/arch/arm/mach-at91/include/mach/cpu.h    2011-02-01 16:40:18.000000000 +0100
++++ linux-2.6.30/arch/arm/mach-at91/include/mach/cpu.h 2011-02-01 16:40:30.165043750 +0100
+@@ -21,8 +21,12 @@
+ #define ARCH_ID_AT91SAM9260   0x019803a0
+ #define ARCH_ID_AT91SAM9261   0x019703a0
+ #define ARCH_ID_AT91SAM9263   0x019607a0
++#define ARCH_ID_AT91SAM9G10   0x819903a0
+ #define ARCH_ID_AT91SAM9G20   0x019905a0
+ #define ARCH_ID_AT91SAM9RL64  0x019b03a0
++#define ARCH_ID_AT91SAM9G45   0x819b05a0
++#define ARCH_ID_AT91SAM9G45MRL        0x819b05a2      /* aka 9G45-ES2 & non ES lots */
++#define ARCH_ID_AT91SAM9G45ES 0x819b05a1      /* 9G45-ES (Engineering Sample) */
+ #define ARCH_ID_AT91CAP9      0x039A03A0
+ #define ARCH_ID_AT91SAM9XE128 0x329973a0
+@@ -41,6 +45,20 @@
+       return (at91_sys_read(AT91_DBGU_CIDR) & ~AT91_CIDR_VERSION);
+ }
++static inline unsigned long at91_cpu_fully_identify(void)
++{
++      return at91_sys_read(AT91_DBGU_CIDR);
++}
++
++#define ARCH_EXID_AT91SAM9M11 0x00000001
++#define ARCH_EXID_AT91SAM9M10 0x00000002
++#define ARCH_EXID_AT91SAM9G45 0x00000004
++
++static inline unsigned long at91_exid_identify(void)
++{
++      return at91_sys_read(AT91_DBGU_EXID);
++}
++
+ #define ARCH_FAMILY_AT91X92   0x09200000
+ #define ARCH_FAMILY_AT91SAM9  0x01900000
+@@ -89,6 +107,12 @@
+ #define cpu_is_at91sam9261()  (0)
+ #endif
++#ifdef CONFIG_ARCH_AT91SAM9G10
++#define cpu_is_at91sam9g10()  (at91_cpu_identify() == ARCH_ID_AT91SAM9G10)
++#else
++#define cpu_is_at91sam9g10()  (0)
++#endif
++
+ #ifdef CONFIG_ARCH_AT91SAM9263
+ #define cpu_is_at91sam9263()  (at91_cpu_identify() == ARCH_ID_AT91SAM9263)
+ #else
+@@ -101,6 +125,14 @@
+ #define cpu_is_at91sam9rl()   (0)
+ #endif
++#ifdef CONFIG_ARCH_AT91SAM9G45
++#define cpu_is_at91sam9g45()  (at91_cpu_identify() == ARCH_ID_AT91SAM9G45)
++#define cpu_is_at91sam9g45es()        (at91_cpu_fully_identify() == ARCH_ID_AT91SAM9G45ES)
++#else
++#define cpu_is_at91sam9g45()  (0)
++#define cpu_is_at91sam9g45es()        (0)
++#endif
++
+ #ifdef CONFIG_ARCH_AT91CAP9
+ #define cpu_is_at91cap9()     (at91_cpu_identify() == ARCH_ID_AT91CAP9)
+ #define cpu_is_at91cap9_revB()        (at91cap9_rev_identify() == ARCH_REVISION_CAP9_B)
+Index: linux-2.6.30/arch/arm/mach-at91/include/mach/hardware.h
+===================================================================
+--- linux-2.6.30.orig/arch/arm/mach-at91/include/mach/hardware.h       2011-02-01 16:40:18.000000000 +0100
++++ linux-2.6.30/arch/arm/mach-at91/include/mach/hardware.h    2011-02-01 16:40:30.145073648 +0100
+@@ -20,12 +20,14 @@
+ #include <mach/at91rm9200.h>
+ #elif defined(CONFIG_ARCH_AT91SAM9260) || defined(CONFIG_ARCH_AT91SAM9G20)
+ #include <mach/at91sam9260.h>
+-#elif defined(CONFIG_ARCH_AT91SAM9261)
++#elif defined(CONFIG_ARCH_AT91SAM9261) || defined(CONFIG_ARCH_AT91SAM9G10)
+ #include <mach/at91sam9261.h>
+ #elif defined(CONFIG_ARCH_AT91SAM9263)
+ #include <mach/at91sam9263.h>
+ #elif defined(CONFIG_ARCH_AT91SAM9RL)
+ #include <mach/at91sam9rl.h>
++#elif defined(CONFIG_ARCH_AT91SAM9G45)
++#include <mach/at91sam9g45.h>
+ #elif defined(CONFIG_ARCH_AT91CAP9)
+ #include <mach/at91cap9.h>
+ #elif defined(CONFIG_ARCH_AT91X40)
+Index: linux-2.6.30/arch/arm/mach-at91/include/mach/timex.h
+===================================================================
+--- linux-2.6.30.orig/arch/arm/mach-at91/include/mach/timex.h  2011-02-01 16:40:18.000000000 +0100
++++ linux-2.6.30/arch/arm/mach-at91/include/mach/timex.h       2011-02-01 16:40:30.145073648 +0100
+@@ -42,6 +42,11 @@
+ #define AT91SAM9_MASTER_CLOCK 99300000
+ #define CLOCK_TICK_RATE               (AT91SAM9_MASTER_CLOCK/16)
++#elif defined(CONFIG_ARCH_AT91SAM9G10)
++
++#define AT91SAM9_MASTER_CLOCK 133000000
++#define CLOCK_TICK_RATE               (AT91SAM9_MASTER_CLOCK/16)
++
+ #elif defined(CONFIG_ARCH_AT91SAM9263)
+ #if defined(CONFIG_MACH_USB_A9263)
+@@ -66,6 +71,11 @@
+ #endif
+ #define CLOCK_TICK_RATE               (AT91SAM9_MASTER_CLOCK/16)
++#elif defined(CONFIG_ARCH_AT91SAM9G45)
++
++#define AT91SAM9_MASTER_CLOCK 133333333
++#define CLOCK_TICK_RATE               (AT91SAM9_MASTER_CLOCK/16)
++
+ #elif defined(CONFIG_ARCH_AT91CAP9)
+ #define AT91CAP9_MASTER_CLOCK 100000000
+Index: linux-2.6.30/arch/arm/mach-at91/Kconfig
+===================================================================
+--- linux-2.6.30.orig/arch/arm/mach-at91/Kconfig       2011-02-01 16:40:18.000000000 +0100
++++ linux-2.6.30/arch/arm/mach-at91/Kconfig    2011-02-01 16:40:30.169008345 +0100
+@@ -23,6 +23,12 @@
+       select GENERIC_TIME
+       select GENERIC_CLOCKEVENTS
++config ARCH_AT91SAM9G10
++      bool "AT91SAM9G10"
++      select CPU_ARM926T
++      select GENERIC_TIME
++      select GENERIC_CLOCKEVENTS
++
+ config ARCH_AT91SAM9263
+       bool "AT91SAM9263"
+       select CPU_ARM926T
+@@ -41,6 +47,12 @@
+       select GENERIC_TIME
+       select GENERIC_CLOCKEVENTS
++config ARCH_AT91SAM9G45
++      bool "AT91SAM9G45"
++      select CPU_ARM926T
++      select GENERIC_TIME
++      select GENERIC_CLOCKEVENTS
++
+ config ARCH_AT91CAP9
+       bool "AT91CAP9"
+       select CPU_ARM926T
+@@ -268,6 +280,21 @@
+ # ----------------------------------------------------------
++if ARCH_AT91SAM9G10
++
++comment "AT91SAM9G10 Board Type"
++
++config MACH_AT91SAM9G10EK
++      bool "Atmel AT91SAM9G10-EK Evaluation Kit"
++      depends on ARCH_AT91SAM9G10
++      help
++        Select this if you are using Atmel's AT91SAM9G10-EK Evaluation Kit.
++        <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=4588>
++
++endif
++
++# ----------------------------------------------------------
++
+ if ARCH_AT91SAM9263
+ comment "AT91SAM9263 Board Type"
+@@ -332,7 +359,16 @@
+       bool "Atmel AT91SAM9G20-EK Evaluation Kit"
+       depends on ARCH_AT91SAM9G20
+       help
+-        Select this if you are using Atmel's AT91SAM9G20-EK Evaluation Kit.
++        Select this if you are using Atmel's AT91SAM9G20-EK Evaluation Kit
++        that embeds only one SD/MMC slot.
++
++config MACH_AT91SAM9G20EK_2MMC
++      bool "Atmel AT91SAM9G20-EK Evaluation Kit with 2 SD/MMC Slots"
++      depends on ARCH_AT91SAM9G20
++      help
++        Select this if you are using an Atmel AT91SAM9G20-EK Evaluation Kit
++        with 2 SD/MMC Slots. This is the case for AT91SAM9G20-EK rev. C and
++        onwards.
+ config MACH_USB_A9G20
+       bool "CALAO USB-A9G20"
+@@ -359,6 +395,22 @@
+ # ----------------------------------------------------------
++if ARCH_AT91SAM9G45
++
++comment "AT91SAM9G45 Board Type"
++
++config MACH_AT91SAM9G45EKES
++      bool "Atmel AT91SAM9G45-EKES Evaluation Kit"
++      depends on ARCH_AT91SAM9G45
++      help
++        Select this if you are using Atmel's AT91SAM9G45-EKES Evaluation Kit.
++        "ES" at the end of the name means that this board is an
++        Engineering Sample.
++
++endif
++
++# ----------------------------------------------------------
++
+ if ARCH_AT91CAP9
+ comment "AT91CAP9 Board Type"
+@@ -409,13 +461,13 @@
+ config MTD_AT91_DATAFLASH_CARD
+       bool "Enable DataFlash Card support"
+-      depends on (ARCH_AT91RM9200DK || MACH_AT91RM9200EK || MACH_AT91SAM9260EK || MACH_AT91SAM9261EK || MACH_AT91SAM9263EK || MACH_AT91SAM9G20EK || MACH_ECBAT91 || MACH_SAM9_L9260 || MACH_AT91CAP9ADK || MACH_AT572D940HFEB || MACH_TOTEMNOVA || MACH_NEOCORE926)
++      depends on (ARCH_AT91RM9200DK || MACH_AT91RM9200EK || MACH_AT91SAM9260EK || MACH_AT91SAM9261EK || MACH_AT91SAM9G10EK || MACH_AT91SAM9263EK || MACH_AT91SAM9G20EK || MACH_ECBAT91 || MACH_SAM9_L9260 || MACH_AT91CAP9ADK || MACH_AT572D940HFEB || MACH_TOTEMNOVA || MACH_NEOCORE926)
+       help
+         Enable support for the DataFlash card.
+ config MTD_NAND_ATMEL_BUSWIDTH_16
+       bool "Enable 16-bit data bus interface to NAND flash"
+-      depends on (MACH_AT91SAM9260EK || MACH_AT91SAM9261EK || MACH_AT91SAM9263EK || MACH_AT91SAM9G20EK || MACH_AT91CAP9ADK || MACH_AT572D940HFEB)
++      depends on (MACH_AT91SAM9260EK || MACH_AT91SAM9261EK || MACH_AT91SAM9G10EK || MACH_AT91SAM9263EK || MACH_AT91SAM9G20EK || MACH_AT91SAM9G20EK_2MMC || MACH_AT91SAM9G45EKES || MACH_AT91CAP9ADK || MACH_AT572D940HFEB)
+       help
+         On AT91SAM926x boards both types of NAND flash can be present
+         (8 and 16 bit data bus width).
+@@ -477,7 +529,7 @@
+ config AT91_EARLY_USART3
+       bool "USART3"
+-      depends on (ARCH_AT91RM9200 || ARCH_AT91SAM9RL || ARCH_AT91SAM9260 || ARCH_AT91SAM9G20)
++      depends on (ARCH_AT91RM9200 || ARCH_AT91SAM9RL || ARCH_AT91SAM9260 || ARCH_AT91SAM9G20 || ARCH_AT91SAM9G45)
+ config AT91_EARLY_USART4
+       bool "USART4"
+Index: linux-2.6.30/arch/arm/mach-at91/Makefile
+===================================================================
+--- linux-2.6.30.orig/arch/arm/mach-at91/Makefile      2011-02-01 16:40:18.000000000 +0100
++++ linux-2.6.30/arch/arm/mach-at91/Makefile   2011-02-01 16:40:30.152108635 +0100
+@@ -13,9 +13,11 @@
+ obj-$(CONFIG_ARCH_AT91RM9200) += at91rm9200.o at91rm9200_time.o at91rm9200_devices.o
+ obj-$(CONFIG_ARCH_AT91SAM9260)        += at91sam9260.o at91sam926x_time.o at91sam9260_devices.o sam9_smc.o
+ obj-$(CONFIG_ARCH_AT91SAM9261)        += at91sam9261.o at91sam926x_time.o at91sam9261_devices.o sam9_smc.o
++obj-$(CONFIG_ARCH_AT91SAM9G10)        += at91sam9261.o at91sam926x_time.o at91sam9261_devices.o sam9_smc.o
+ obj-$(CONFIG_ARCH_AT91SAM9263)        += at91sam9263.o at91sam926x_time.o at91sam9263_devices.o sam9_smc.o
+ obj-$(CONFIG_ARCH_AT91SAM9RL) += at91sam9rl.o at91sam926x_time.o at91sam9rl_devices.o sam9_smc.o
+ obj-$(CONFIG_ARCH_AT91SAM9G20)        += at91sam9260.o at91sam926x_time.o at91sam9260_devices.o  sam9_smc.o
++ obj-$(CONFIG_ARCH_AT91SAM9G45)       += at91sam9g45.o at91sam926x_time.o at91sam9g45_devices.o sam9_smc.o
+ obj-$(CONFIG_ARCH_AT91CAP9)   += at91cap9.o at91sam926x_time.o at91cap9_devices.o sam9_smc.o
+ obj-$(CONFIG_ARCH_AT572D940HF)  += at572d940hf.o at91sam926x_time.o at572d940hf_devices.o sam9_smc.o
+ obj-$(CONFIG_ARCH_AT91X40)    += at91x40.o at91x40_time.o
+@@ -49,6 +51,7 @@
+ # AT91SAM9261 board-specific support
+ obj-$(CONFIG_MACH_AT91SAM9261EK) += board-sam9261ek.o
++obj-$(CONFIG_MACH_AT91SAM9G10EK) += board-sam9261ek.o
+ # AT91SAM9263 board-specific support
+ obj-$(CONFIG_MACH_AT91SAM9263EK) += board-sam9263ek.o
+@@ -62,10 +65,14 @@
+ # AT91SAM9G20 board-specific support
+ obj-$(CONFIG_MACH_AT91SAM9G20EK) += board-sam9g20ek.o
++obj-$(CONFIG_MACH_AT91SAM9G20EK_2MMC) += board-sam9g20ek-2slot-mmc.o
+ obj-$(CONFIG_MACH_USB_A9G20)   += board-usb-a9g20.o
+ obj-$(CONFIG_MACH_QIL_A9G20)   += board-qil-a9g20.o
+ obj-$(CONFIG_MACH_SBC35_A9G20)         += board-sbc35-a9g20.o
++# AT91SAM9G45 board-specific support
++obj-$(CONFIG_MACH_AT91SAM9G45EKES) += board-sam9m10g45ek.o
++
+ # AT91CAP9 board-specific support
+ obj-$(CONFIG_MACH_AT91CAP9ADK)        += board-cap9adk.o
+Index: linux-2.6.30/arch/arm/mach-at91/Makefile.boot
+===================================================================
+--- linux-2.6.30.orig/arch/arm/mach-at91/Makefile.boot 2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/arch/arm/mach-at91/Makefile.boot      2011-02-01 16:40:30.137041993 +0100
+@@ -7,6 +7,10 @@
+    zreladdr-y := 0x70008000
+ params_phys-y := 0x70000100
+ initrd_phys-y := 0x70410000
++else ifeq ($(CONFIG_ARCH_AT91SAM9G45),y)
++   zreladdr-y := 0x70008000
++params_phys-y := 0x70000100
++initrd_phys-y := 0x70410000
+ else
+    zreladdr-y := 0x20008000
+ params_phys-y := 0x20000100
+Index: linux-2.6.30/arch/arm/mach-at91/at91sam9g45.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.30/arch/arm/mach-at91/at91sam9g45.c      2011-02-01 16:40:30.137041993 +0100
+@@ -0,0 +1,360 @@
++/*
++ *  Chip-specific setup code for the AT91SAM9G45 family
++ *
++ *  Copyright (C) 2009 Atmel 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.
++ *
++ */
++
++#include <linux/module.h>
++#include <linux/pm.h>
++
++#include <asm/irq.h>
++#include <asm/mach/arch.h>
++#include <asm/mach/map.h>
++#include <mach/at91sam9g45.h>
++#include <mach/at91_pmc.h>
++#include <mach/at91_rstc.h>
++#include <mach/at91_shdwc.h>
++
++#include "generic.h"
++#include "clock.h"
++
++static struct map_desc at91sam9g45_io_desc[] __initdata = {
++      {
++              .virtual        = AT91_VA_BASE_SYS,
++              .pfn            = __phys_to_pfn(AT91_BASE_SYS),
++              .length         = SZ_16K,
++              .type           = MT_DEVICE,
++      }, {
++              .virtual        = AT91_IO_VIRT_BASE - AT91SAM9G45_SRAM_SIZE,
++              .pfn            = __phys_to_pfn(AT91SAM9G45_SRAM_BASE),
++              .length         = AT91SAM9G45_SRAM_SIZE,
++              .type           = MT_DEVICE,
++      }
++};
++
++/* --------------------------------------------------------------------
++ *  Clocks
++ * -------------------------------------------------------------------- */
++
++/*
++ * The peripheral clocks.
++ */
++static struct clk pioA_clk = {
++      .name           = "pioA_clk",
++      .pmc_mask       = 1 << AT91SAM9G45_ID_PIOA,
++      .type           = CLK_TYPE_PERIPHERAL,
++};
++static struct clk pioB_clk = {
++      .name           = "pioB_clk",
++      .pmc_mask       = 1 << AT91SAM9G45_ID_PIOB,
++      .type           = CLK_TYPE_PERIPHERAL,
++};
++static struct clk pioC_clk = {
++      .name           = "pioC_clk",
++      .pmc_mask       = 1 << AT91SAM9G45_ID_PIOC,
++      .type           = CLK_TYPE_PERIPHERAL,
++};
++static struct clk pioDE_clk = {
++      .name           = "pioDE_clk",
++      .pmc_mask       = 1 << AT91SAM9G45_ID_PIODE,
++      .type           = CLK_TYPE_PERIPHERAL,
++};
++static struct clk usart0_clk = {
++      .name           = "usart0_clk",
++      .pmc_mask       = 1 << AT91SAM9G45_ID_US0,
++      .type           = CLK_TYPE_PERIPHERAL,
++};
++static struct clk usart1_clk = {
++      .name           = "usart1_clk",
++      .pmc_mask       = 1 << AT91SAM9G45_ID_US1,
++      .type           = CLK_TYPE_PERIPHERAL,
++};
++static struct clk usart2_clk = {
++      .name           = "usart2_clk",
++      .pmc_mask       = 1 << AT91SAM9G45_ID_US2,
++      .type           = CLK_TYPE_PERIPHERAL,
++};
++static struct clk usart3_clk = {
++      .name           = "usart3_clk",
++      .pmc_mask       = 1 << AT91SAM9G45_ID_US3,
++      .type           = CLK_TYPE_PERIPHERAL,
++};
++static struct clk mmc0_clk = {
++      .name           = "mci0_clk",
++      .pmc_mask       = 1 << AT91SAM9G45_ID_MCI0,
++      .type           = CLK_TYPE_PERIPHERAL,
++};
++static struct clk twi0_clk = {
++      .name           = "twi0_clk",
++      .pmc_mask       = 1 << AT91SAM9G45_ID_TWI0,
++      .type           = CLK_TYPE_PERIPHERAL,
++};
++static struct clk twi1_clk = {
++      .name           = "twi1_clk",
++      .pmc_mask       = 1 << AT91SAM9G45_ID_TWI1,
++      .type           = CLK_TYPE_PERIPHERAL,
++};
++static struct clk spi0_clk = {
++      .name           = "spi0_clk",
++      .pmc_mask       = 1 << AT91SAM9G45_ID_SPI0,
++      .type           = CLK_TYPE_PERIPHERAL,
++};
++static struct clk spi1_clk = {
++      .name           = "spi1_clk",
++      .pmc_mask       = 1 << AT91SAM9G45_ID_SPI1,
++      .type           = CLK_TYPE_PERIPHERAL,
++};
++static struct clk ssc0_clk = {
++      .name           = "ssc0_clk",
++      .pmc_mask       = 1 << AT91SAM9G45_ID_SSC0,
++      .type           = CLK_TYPE_PERIPHERAL,
++};
++static struct clk ssc1_clk = {
++      .name           = "ssc1_clk",
++      .pmc_mask       = 1 << AT91SAM9G45_ID_SSC1,
++      .type           = CLK_TYPE_PERIPHERAL,
++};
++static struct clk tcb_clk = {
++      .name           = "tcb_clk",
++      .pmc_mask       = 1 << AT91SAM9G45_ID_TCB,
++      .type           = CLK_TYPE_PERIPHERAL,
++};
++static struct clk pwm_clk = {
++      .name           = "pwm_clk",
++      .pmc_mask       = 1 << AT91SAM9G45_ID_PWMC,
++      .type           = CLK_TYPE_PERIPHERAL,
++};
++static struct clk tsc_clk = {
++      .name           = "tsc_clk",
++      .pmc_mask       = 1 << AT91SAM9G45_ID_TSC,
++      .type           = CLK_TYPE_PERIPHERAL,
++};
++static struct clk dma_clk = {
++      .name           = "dma_clk",
++      .pmc_mask       = 1 << AT91SAM9G45_ID_DMA,
++      .type           = CLK_TYPE_PERIPHERAL,
++};
++static struct clk uhphs_clk = {
++      .name           = "uhphs_clk",
++      .pmc_mask       = 1 << AT91SAM9G45_ID_UHPHS,
++      .type           = CLK_TYPE_PERIPHERAL,
++};
++static struct clk lcdc_clk = {
++      .name           = "lcdc_clk",
++      .pmc_mask       = 1 << AT91SAM9G45_ID_LCDC,
++      .type           = CLK_TYPE_PERIPHERAL,
++};
++static struct clk ac97_clk = {
++      .name           = "ac97_clk",
++      .pmc_mask       = 1 << AT91SAM9G45_ID_AC97C,
++      .type           = CLK_TYPE_PERIPHERAL,
++};
++static struct clk macb_clk = {
++      .name           = "macb_clk",
++      .pmc_mask       = 1 << AT91SAM9G45_ID_EMAC,
++      .type           = CLK_TYPE_PERIPHERAL,
++};
++static struct clk isi_clk = {
++      .name           = "isi_clk",
++      .pmc_mask       = 1 << AT91SAM9G45_ID_ISI,
++      .type           = CLK_TYPE_PERIPHERAL,
++};
++static struct clk udphs_clk = {
++      .name           = "udphs_clk",
++      .pmc_mask       = 1 << AT91SAM9G45_ID_UDPHS,
++      .type           = CLK_TYPE_PERIPHERAL,
++};
++static struct clk mmc1_clk = {
++      .name           = "mci1_clk",
++      .pmc_mask       = 1 << AT91SAM9G45_ID_MCI1,
++      .type           = CLK_TYPE_PERIPHERAL,
++};
++
++/* One additional fake clock for ohci */
++static struct clk ohci_clk = {
++      .name           = "ohci_clk",
++      .pmc_mask       = 0,
++      .type           = CLK_TYPE_PERIPHERAL,
++      .parent         = &uhphs_clk,
++};
++
++static struct clk *periph_clocks[] __initdata = {
++      &pioA_clk,
++      &pioB_clk,
++      &pioC_clk,
++      &pioDE_clk,
++      &usart0_clk,
++      &usart1_clk,
++      &usart2_clk,
++      &usart3_clk,
++      &mmc0_clk,
++      &twi0_clk,
++      &twi1_clk,
++      &spi0_clk,
++      &spi1_clk,
++      &ssc0_clk,
++      &ssc1_clk,
++      &tcb_clk,
++      &pwm_clk,
++      &tsc_clk,
++      &dma_clk,
++      &uhphs_clk,
++      &lcdc_clk,
++      &ac97_clk,
++      &macb_clk,
++      &isi_clk,
++      &udphs_clk,
++      &mmc1_clk,
++      // irq0
++      &ohci_clk,
++};
++
++/*
++ * The two programmable clocks.
++ * You must configure pin multiplexing to bring these signals out.
++ */
++static struct clk pck0 = {
++      .name           = "pck0",
++      .pmc_mask       = AT91_PMC_PCK0,
++      .type           = CLK_TYPE_PROGRAMMABLE,
++      .id             = 0,
++};
++static struct clk pck1 = {
++      .name           = "pck1",
++      .pmc_mask       = AT91_PMC_PCK1,
++      .type           = CLK_TYPE_PROGRAMMABLE,
++      .id             = 1,
++};
++
++static void __init at91sam9g45_register_clocks(void)
++{
++      int i;
++
++      for (i = 0; i < ARRAY_SIZE(periph_clocks); i++)
++              clk_register(periph_clocks[i]);
++
++      clk_register(&pck0);
++      clk_register(&pck1);
++}
++
++/* --------------------------------------------------------------------
++ *  GPIO
++ * -------------------------------------------------------------------- */
++
++static struct at91_gpio_bank at91sam9g45_gpio[] = {
++      {
++              .id             = AT91SAM9G45_ID_PIOA,
++              .offset         = AT91_PIOA,
++              .clock          = &pioA_clk,
++      }, {
++              .id             = AT91SAM9G45_ID_PIOB,
++              .offset         = AT91_PIOB,
++              .clock          = &pioB_clk,
++      }, {
++              .id             = AT91SAM9G45_ID_PIOC,
++              .offset         = AT91_PIOC,
++              .clock          = &pioC_clk,
++      }, {
++              .id             = AT91SAM9G45_ID_PIODE,
++              .offset         = AT91_PIOD,
++              .clock          = &pioDE_clk,
++      }, {
++              .id             = AT91SAM9G45_ID_PIODE,
++              .offset         = AT91_PIOE,
++              .clock          = &pioDE_clk,
++      }
++};
++
++static void at91sam9g45_reset(void)
++{
++      at91_sys_write(AT91_RSTC_CR, AT91_RSTC_KEY | AT91_RSTC_PROCRST | AT91_RSTC_PERRST);
++}
++
++static void at91sam9g45_poweroff(void)
++{
++      at91_sys_write(AT91_SHDW_CR, AT91_SHDW_KEY | AT91_SHDW_SHDW);
++}
++
++
++/* --------------------------------------------------------------------
++ *  AT91SAM9G45 processor initialization
++ * -------------------------------------------------------------------- */
++
++void __init at91sam9g45_initialize(unsigned long main_clock)
++{
++      /* Map peripherals */
++      iotable_init(at91sam9g45_io_desc, ARRAY_SIZE(at91sam9g45_io_desc));
++
++      at91_arch_reset = at91sam9g45_reset;
++      pm_power_off = at91sam9g45_poweroff;
++      at91_extern_irq = (1 << AT91SAM9G45_ID_IRQ0);
++
++      /* Init clock subsystem */
++      at91_clock_init(main_clock);
++
++      /* Register the processor-specific clocks */
++      at91sam9g45_register_clocks();
++
++      /* Register GPIO subsystem */
++      at91_gpio_init(at91sam9g45_gpio, 5);
++}
++
++/* --------------------------------------------------------------------
++ *  Interrupt initialization
++ * -------------------------------------------------------------------- */
++
++/*
++ * The default interrupt priority levels (0 = lowest, 7 = highest).
++ */
++static unsigned int at91sam9g45_default_irq_priority[NR_AIC_IRQS] __initdata = {
++      7,      /* Advanced Interrupt Controller (FIQ) */
++      7,      /* System Peripherals */
++      1,      /* Parallel IO Controller A */
++      1,      /* Parallel IO Controller B */
++      1,      /* Parallel IO Controller C */
++      1,      /* Parallel IO Controller D and E */
++      0,
++      5,      /* USART 0 */
++      5,      /* USART 1 */
++      5,      /* USART 2 */
++      5,      /* USART 3 */
++      0,      /* Multimedia Card Interface 0 */
++      6,      /* Two-Wire Interface 0 */
++      6,      /* Two-Wire Interface 1 */
++      5,      /* Serial Peripheral Interface 0 */
++      5,      /* Serial Peripheral Interface 1 */
++      4,      /* Serial Synchronous Controller 0 */
++      4,      /* Serial Synchronous Controller 1 */
++      0,      /* Timer Counter 0, 1, 2, 3, 4 and 5 */
++      0,      /* Pulse Width Modulation Controller */
++      0,      /* Touch Screen Controller */
++      0,      /* DMA Controller */
++      2,      /* USB Host High Speed port */
++      3,      /* LDC Controller */
++      5,      /* AC97 Controller */
++      3,      /* Ethernet */
++      0,      /* Image Sensor Interface */
++      2,      /* USB Device High speed port */
++      0,
++      0,      /* Multimedia Card Interface 1 */
++      0,
++      0,      /* Advanced Interrupt Controller (IRQ0) */
++};
++
++void __init at91sam9g45_init_interrupts(unsigned int priority[NR_AIC_IRQS])
++{
++      if (!priority)
++              priority = at91sam9g45_default_irq_priority;
++
++      /* Initialize the AIC interrupt controller */
++      at91_aic_init(priority);
++
++      /* Enable GPIO interrupts */
++      at91_gpio_irq_setup();
++}
+Index: linux-2.6.30/arch/arm/mach-at91/at91sam9g45_devices.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.30/arch/arm/mach-at91/at91sam9g45_devices.c      2011-02-01 16:40:30.165043750 +0100
+@@ -0,0 +1,1600 @@
++/*
++ *  On-Chip devices setup code for the AT91SAM9G45 family
++ *
++ *  Copyright (C) 2009 Atmel 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.
++ *
++ */
++#include <asm/mach/arch.h>
++#include <asm/mach/map.h>
++
++#include <linux/dma-mapping.h>
++#include <linux/platform_device.h>
++#include <linux/i2c-gpio.h>
++#include <linux/atmel-mci.h>
++
++#include <linux/fb.h>
++#include <video/atmel_lcdc.h>
++
++#include <mach/board.h>
++#include <mach/gpio.h>
++#include <mach/at91sam9g45.h>
++#include <mach/at91sam9g45_matrix.h>
++#include <mach/at91sam9_smc.h>
++#include <mach/at_hdmac.h>
++
++#include "generic.h"
++
++
++/* --------------------------------------------------------------------
++ *  HDMAC - AHB DMA Controller
++ * -------------------------------------------------------------------- */
++
++#if defined(CONFIG_AT_HDMAC) || defined(CONFIG_AT_HDMAC_MODULE)
++static u64 hdmac_dmamask = DMA_BIT_MASK(32);
++
++static struct at_dma_platform_data atdma_pdata = {
++      .nr_channels    = 8,
++};
++
++static struct resource hdmac_resources[] = {
++      [0] = {
++              .start  = AT91_BASE_SYS + AT91_DMA,
++              .end    = AT91_BASE_SYS + AT91_DMA + SZ_512 - 1,
++              .flags  = IORESOURCE_MEM,
++      },
++      [2] = {
++              .start  = AT91SAM9G45_ID_DMA,
++              .end    = AT91SAM9G45_ID_DMA,
++              .flags  = IORESOURCE_IRQ,
++      },
++};
++
++static struct platform_device at_hdmac_device = {
++      .name           = "at_hdmac",
++      .id             = -1,
++      .dev            = {
++                              .dma_mask               = &hdmac_dmamask,
++                              .coherent_dma_mask      = DMA_BIT_MASK(32),
++                              .platform_data          = &atdma_pdata,
++      },
++      .resource       = hdmac_resources,
++      .num_resources  = ARRAY_SIZE(hdmac_resources),
++};
++
++void __init at91_add_device_hdmac(void)
++{
++      dma_cap_set(DMA_MEMCPY, atdma_pdata.cap_mask);
++      dma_cap_set(DMA_SLAVE, atdma_pdata.cap_mask);
++      platform_device_register(&at_hdmac_device);
++}
++#else
++void __init at91_add_device_hdmac(void) {}
++#endif
++
++
++/* --------------------------------------------------------------------
++ *  USB Host (OHCI)
++ * -------------------------------------------------------------------- */
++
++#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE)
++static u64 ohci_dmamask = DMA_BIT_MASK(32);
++static struct at91_usbh_data usbh_ohci_data;
++
++static struct resource usbh_ohci_resources[] = {
++      [0] = {
++              .start  = AT91SAM9G45_OHCI_BASE,
++              .end    = AT91SAM9G45_OHCI_BASE + SZ_1M - 1,
++              .flags  = IORESOURCE_MEM,
++      },
++      [1] = {
++              .start  = AT91SAM9G45_ID_UHPHS,
++              .end    = AT91SAM9G45_ID_UHPHS,
++              .flags  = IORESOURCE_IRQ,
++      },
++};
++
++static struct platform_device at91_usbh_ohci_device = {
++      .name           = "at91_ohci",
++      .id             = -1,
++      .dev            = {
++                              .dma_mask               = &ohci_dmamask,
++                              .coherent_dma_mask      = DMA_BIT_MASK(32),
++                              .platform_data          = &usbh_ohci_data,
++      },
++      .resource       = usbh_ohci_resources,
++      .num_resources  = ARRAY_SIZE(usbh_ohci_resources),
++};
++
++void __init at91_add_device_usbh_ohci(struct at91_usbh_data *data)
++{
++      int i;
++
++      if (!data)
++              return;
++
++      /* Enable VBus control for UHP ports */
++      for (i = 0; i < data->ports; i++) {
++              if (data->vbus_pin[i])
++                      at91_set_gpio_output(data->vbus_pin[i], 0);
++      }
++
++      usbh_ohci_data = *data;
++      platform_device_register(&at91_usbh_ohci_device);
++}
++#else
++void __init at91_add_device_usbh_ohci(struct at91_usbh_data *data) {}
++#endif
++
++
++/* --------------------------------------------------------------------
++ *  USB Host HS (EHCI)
++ *  Needs an OHCI host for low and full speed management
++ * -------------------------------------------------------------------- */
++
++#if defined(CONFIG_USB_EHCI_HCD) || defined(CONFIG_USB_EHCI_HCD_MODULE)
++static u64 ehci_dmamask = DMA_BIT_MASK(32);
++static struct at91_usbh_data usbh_ehci_data;
++
++static struct resource usbh_ehci_resources[] = {
++      [0] = {
++              .start  = AT91SAM9G45_EHCI_BASE,
++              .end    = AT91SAM9G45_EHCI_BASE + SZ_1M - 1,
++              .flags  = IORESOURCE_MEM,
++      },
++      [1] = {
++              .start  = AT91SAM9G45_ID_UHPHS,
++              .end    = AT91SAM9G45_ID_UHPHS,
++              .flags  = IORESOURCE_IRQ,
++      },
++};
++
++static struct platform_device at91_usbh_ehci_device = {
++      .name           = "atmel-ehci",
++      .id             = -1,
++      .dev            = {
++                              .dma_mask               = &ehci_dmamask,
++                              .coherent_dma_mask      = DMA_BIT_MASK(32),
++                              .platform_data          = &usbh_ehci_data,
++      },
++      .resource       = usbh_ehci_resources,
++      .num_resources  = ARRAY_SIZE(usbh_ehci_resources),
++};
++
++void __init at91_add_device_usbh_ehci(struct at91_usbh_data *data)
++{
++      int i;
++
++      if (!data)
++              return;
++
++      /* Enable VBus control for UHP ports */
++      for (i = 0; i < data->ports; i++) {
++              if (data->vbus_pin[i])
++                      at91_set_gpio_output(data->vbus_pin[i], 0);
++      }
++
++      usbh_ehci_data = *data;
++      at91_clock_associate("uhphs_clk", &at91_usbh_ehci_device.dev, "ehci_clk");
++      platform_device_register(&at91_usbh_ehci_device);
++}
++#else
++void __init at91_add_device_usbh_ehci(struct at91_usbh_data *data) {}
++#endif
++
++
++/* --------------------------------------------------------------------
++ *  USB HS Device (Gadget)
++ * -------------------------------------------------------------------- */
++
++#if defined(CONFIG_USB_GADGET_ATMEL_USBA) || defined(CONFIG_USB_GADGET_ATMEL_USBA_MODULE)
++static struct resource usba_udc_resources[] = {
++      [0] = {
++              .start  = AT91SAM9G45_UDPHS_FIFO,
++              .end    = AT91SAM9G45_UDPHS_FIFO + SZ_512K - 1,
++              .flags  = IORESOURCE_MEM,
++      },
++      [1] = {
++              .start  = AT91SAM9G45_BASE_UDPHS,
++              .end    = AT91SAM9G45_BASE_UDPHS + SZ_1K - 1,
++              .flags  = IORESOURCE_MEM,
++      },
++      [2] = {
++              .start  = AT91SAM9G45_ID_UDPHS,
++              .end    = AT91SAM9G45_ID_UDPHS,
++              .flags  = IORESOURCE_IRQ,
++      },
++};
++
++#define EP(nam, idx, maxpkt, maxbk, dma, isoc)                        \
++      [idx] = {                                               \
++              .name           = nam,                          \
++              .index          = idx,                          \
++              .fifo_size      = maxpkt,                       \
++              .nr_banks       = maxbk,                        \
++              .can_dma        = dma,                          \
++              .can_isoc       = isoc,                         \
++      }
++
++static struct usba_ep_data usba_udc_ep[] __initdata = {
++      EP("ep0", 0, 64, 1, 0, 0),
++      EP("ep1", 1, 1024, 2, 1, 1),
++      EP("ep2", 2, 1024, 2, 1, 1),
++      EP("ep3", 3, 1024, 3, 1, 0),
++      EP("ep4", 4, 1024, 3, 1, 0),
++      EP("ep5", 5, 1024, 3, 1, 1),
++      EP("ep6", 6, 1024, 3, 1, 1),
++};
++
++#undef EP
++
++/*
++ * pdata doesn't have room for any endpoints, so we need to
++ * append room for the ones we need right after it.
++ */
++static struct {
++      struct usba_platform_data pdata;
++      struct usba_ep_data ep[7];
++} usba_udc_data;
++
++static struct platform_device at91_usba_udc_device = {
++      .name           = "atmel_usba_udc",
++      .id             = -1,
++      .dev            = {
++                              .platform_data  = &usba_udc_data.pdata,
++      },
++      .resource       = usba_udc_resources,
++      .num_resources  = ARRAY_SIZE(usba_udc_resources),
++};
++
++void __init at91_add_device_usba(struct usba_platform_data *data)
++{
++      usba_udc_data.pdata.vbus_pin = -EINVAL;
++      usba_udc_data.pdata.num_ep = ARRAY_SIZE(usba_udc_ep);
++      memcpy(usba_udc_data.ep, usba_udc_ep, sizeof(usba_udc_ep));;
++
++      if (data && data->vbus_pin > 0) {
++              at91_set_gpio_input(data->vbus_pin, 0);
++              at91_set_deglitch(data->vbus_pin, 1);
++              usba_udc_data.pdata.vbus_pin = data->vbus_pin;
++      }
++
++      /* Pullup pin is handled internally by USB device peripheral */
++
++      /* Clocks */
++      at91_clock_associate("utmi_clk", &at91_usba_udc_device.dev, "hclk");
++      at91_clock_associate("udphs_clk", &at91_usba_udc_device.dev, "pclk");
++
++      platform_device_register(&at91_usba_udc_device);
++}
++#else
++void __init at91_add_device_usba(struct usba_platform_data *data) {}
++#endif
++
++
++/* --------------------------------------------------------------------
++ *  Ethernet
++ * -------------------------------------------------------------------- */
++
++#if defined(CONFIG_MACB) || defined(CONFIG_MACB_MODULE)
++static u64 eth_dmamask = DMA_BIT_MASK(32);
++static struct at91_eth_data eth_data;
++
++static struct resource eth_resources[] = {
++      [0] = {
++              .start  = AT91SAM9G45_BASE_EMAC,
++              .end    = AT91SAM9G45_BASE_EMAC + SZ_16K - 1,
++              .flags  = IORESOURCE_MEM,
++      },
++      [1] = {
++              .start  = AT91SAM9G45_ID_EMAC,
++              .end    = AT91SAM9G45_ID_EMAC,
++              .flags  = IORESOURCE_IRQ,
++      },
++};
++
++static struct platform_device at91sam9g45_eth_device = {
++      .name           = "macb",
++      .id             = -1,
++      .dev            = {
++                              .dma_mask               = &eth_dmamask,
++                              .coherent_dma_mask      = DMA_BIT_MASK(32),
++                              .platform_data          = &eth_data,
++      },
++      .resource       = eth_resources,
++      .num_resources  = ARRAY_SIZE(eth_resources),
++};
++
++void __init at91_add_device_eth(struct at91_eth_data *data)
++{
++      if (!data)
++              return;
++
++      if (data->phy_irq_pin) {
++              at91_set_gpio_input(data->phy_irq_pin, 0);
++              at91_set_deglitch(data->phy_irq_pin, 1);
++      }
++
++      /* Pins used for MII and RMII */
++      at91_set_A_periph(AT91_PIN_PA17, 0);    /* ETXCK_EREFCK */
++      at91_set_A_periph(AT91_PIN_PA15, 0);    /* ERXDV */
++      at91_set_A_periph(AT91_PIN_PA12, 0);    /* ERX0 */
++      at91_set_A_periph(AT91_PIN_PA13, 0);    /* ERX1 */
++      at91_set_A_periph(AT91_PIN_PA16, 0);    /* ERXER */
++      at91_set_A_periph(AT91_PIN_PA14, 0);    /* ETXEN */
++      at91_set_A_periph(AT91_PIN_PA10, 0);    /* ETX0 */
++      at91_set_A_periph(AT91_PIN_PA11, 0);    /* ETX1 */
++      at91_set_A_periph(AT91_PIN_PA19, 0);    /* EMDIO */
++      at91_set_A_periph(AT91_PIN_PA18, 0);    /* EMDC */
++
++      if (!data->is_rmii) {
++              at91_set_B_periph(AT91_PIN_PA29, 0);    /* ECRS */
++              at91_set_B_periph(AT91_PIN_PA30, 0);    /* ECOL */
++              at91_set_B_periph(AT91_PIN_PA8,  0);    /* ERX2 */
++              at91_set_B_periph(AT91_PIN_PA9,  0);    /* ERX3 */
++              at91_set_B_periph(AT91_PIN_PA28, 0);    /* ERXCK */
++              at91_set_B_periph(AT91_PIN_PA6,  0);    /* ETX2 */
++              at91_set_B_periph(AT91_PIN_PA7,  0);    /* ETX3 */
++              at91_set_B_periph(AT91_PIN_PA27, 0);    /* ETXER */
++      }
++
++      eth_data = *data;
++      platform_device_register(&at91sam9g45_eth_device);
++}
++#else
++void __init at91_add_device_eth(struct at91_eth_data *data) {}
++#endif
++
++
++/* --------------------------------------------------------------------
++ *  MMC / SD
++ * -------------------------------------------------------------------- */
++
++#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE)
++static u64 mmc_dmamask = DMA_BIT_MASK(32);
++static struct mci_platform_data mmc0_data, mmc1_data;
++
++static struct resource mmc0_resources[] = {
++      [0] = {
++              .start  = AT91SAM9G45_BASE_MCI0,
++              .end    = AT91SAM9G45_BASE_MCI0 + SZ_16K - 1,
++              .flags  = IORESOURCE_MEM,
++      },
++      [1] = {
++              .start  = AT91SAM9G45_ID_MCI0,
++              .end    = AT91SAM9G45_ID_MCI0,
++              .flags  = IORESOURCE_IRQ,
++      },
++};
++
++static struct platform_device at91sam9g45_mmc0_device = {
++      .name           = "atmel_mci",
++      .id             = 0,
++      .dev            = {
++                              .dma_mask               = &mmc_dmamask,
++                              .coherent_dma_mask      = DMA_BIT_MASK(32),
++                              .platform_data          = &mmc0_data,
++      },
++      .resource       = mmc0_resources,
++      .num_resources  = ARRAY_SIZE(mmc0_resources),
++};
++
++static struct resource mmc1_resources[] = {
++      [0] = {
++              .start  = AT91SAM9G45_BASE_MCI1,
++              .end    = AT91SAM9G45_BASE_MCI1 + SZ_16K - 1,
++              .flags  = IORESOURCE_MEM,
++      },
++      [1] = {
++              .start  = AT91SAM9G45_ID_MCI1,
++              .end    = AT91SAM9G45_ID_MCI1,
++              .flags  = IORESOURCE_IRQ,
++      },
++};
++
++static struct platform_device at91sam9g45_mmc1_device = {
++      .name           = "atmel_mci",
++      .id             = 1,
++      .dev            = {
++                              .dma_mask               = &mmc_dmamask,
++                              .coherent_dma_mask      = DMA_BIT_MASK(32),
++                              .platform_data          = &mmc1_data,
++      },
++      .resource       = mmc1_resources,
++      .num_resources  = ARRAY_SIZE(mmc1_resources),
++};
++
++/* Consider only one slot : slot 0 */
++void __init at91_add_device_mci(short mmc_id, struct mci_platform_data *data)
++{
++      struct at_dma_slave     *atslave;
++
++      if (!data)
++              return;
++
++      /* Must have at least one usable slot */
++      if (!data->slot[0].bus_width)
++              return;
++
++#if defined(CONFIG_AT_HDMAC) || defined(CONFIG_AT_HDMAC_MODULE)
++      atslave = kzalloc(sizeof(struct at_dma_slave), GFP_KERNEL);
++
++      /* DMA slave channel configuration */
++      atslave->dma_dev = &at_hdmac_device.dev;
++      atslave->reg_width = DW_DMA_SLAVE_WIDTH_32BIT;
++      atslave->cfg = ATC_FIFOCFG_HALFFIFO
++                      | ATC_SRC_H2SEL_HW | ATC_DST_H2SEL_HW;
++      atslave->ctrla = ATC_SCSIZE_16 | ATC_DCSIZE_16;
++      if (mmc_id == 0)        /* MCI0 */
++              atslave->cfg |= ATC_SRC_PER(AT_DMA_ID_MCI0)
++                            | ATC_DST_PER(AT_DMA_ID_MCI0);
++
++      else                    /* MCI1 */
++              atslave->cfg |= ATC_SRC_PER(AT_DMA_ID_MCI1)
++                            | ATC_DST_PER(AT_DMA_ID_MCI1);
++
++      data->dma_slave = atslave;
++#endif
++
++
++      /* input/irq */
++      if (data->slot[0].detect_pin) {
++              at91_set_gpio_input(data->slot[0].detect_pin, 1);
++              at91_set_deglitch(data->slot[0].detect_pin, 1);
++      }
++      if (data->slot[0].wp_pin)
++              at91_set_gpio_input(data->slot[0].wp_pin, 1);
++
++      if (mmc_id == 0) {              /* MCI0 */
++
++              /* CLK */
++              at91_set_A_periph(AT91_PIN_PA0, 0);
++
++              /* CMD */
++              at91_set_A_periph(AT91_PIN_PA1, 1);
++
++              /* DAT0, maybe DAT1..DAT3 and maybe DAT4..DAT7 */
++              at91_set_A_periph(AT91_PIN_PA2, 1);
++              if (data->slot[0].bus_width == 4) {
++                      at91_set_A_periph(AT91_PIN_PA3, 1);
++                      at91_set_A_periph(AT91_PIN_PA4, 1);
++                      at91_set_A_periph(AT91_PIN_PA5, 1);
++                      if (data->slot[0].bus_width == 8) {
++                              at91_set_A_periph(AT91_PIN_PA6, 1);
++                              at91_set_A_periph(AT91_PIN_PA7, 1);
++                              at91_set_A_periph(AT91_PIN_PA8, 1);
++                              at91_set_A_periph(AT91_PIN_PA9, 1);
++                      }
++              }
++
++              mmc0_data = *data;
++              at91_clock_associate("mci0_clk", &at91sam9g45_mmc0_device.dev, "mci_clk");
++              platform_device_register(&at91sam9g45_mmc0_device);
++
++      } else {                        /* MCI1 */
++
++              /* CLK */
++              at91_set_A_periph(AT91_PIN_PA31, 0);
++
++              /* CMD */
++              at91_set_A_periph(AT91_PIN_PA22, 1);
++
++              /* DAT0, maybe DAT1..DAT3 and maybe DAT4..DAT7 */
++              at91_set_A_periph(AT91_PIN_PA23, 1);
++              if (data->slot[0].bus_width == 4) {
++                      at91_set_A_periph(AT91_PIN_PA24, 1);
++                      at91_set_A_periph(AT91_PIN_PA25, 1);
++                      at91_set_A_periph(AT91_PIN_PA26, 1);
++                      if (data->slot[0].bus_width == 8) {
++                              at91_set_A_periph(AT91_PIN_PA27, 1);
++                              at91_set_A_periph(AT91_PIN_PA28, 1);
++                              at91_set_A_periph(AT91_PIN_PA29, 1);
++                              at91_set_A_periph(AT91_PIN_PA30, 1);
++                      }
++              }
++
++              mmc1_data = *data;
++              at91_clock_associate("mci1_clk", &at91sam9g45_mmc1_device.dev, "mci_clk");
++              platform_device_register(&at91sam9g45_mmc1_device);
++
++      }
++}
++#else
++void __init at91_add_device_mci(short mmc_id, struct mci_platform_data *data) {}
++#endif
++
++
++/* --------------------------------------------------------------------
++ *  NAND / SmartMedia
++ * -------------------------------------------------------------------- */
++
++#if defined(CONFIG_MTD_NAND_ATMEL) || defined(CONFIG_MTD_NAND_ATMEL_MODULE)
++static struct atmel_nand_data nand_data;
++
++#define NAND_BASE     AT91_CHIPSELECT_3
++
++static struct resource nand_resources[] = {
++      [0] = {
++              .start  = NAND_BASE,
++              .end    = NAND_BASE + SZ_256M - 1,
++              .flags  = IORESOURCE_MEM,
++      },
++      [1] = {
++              .start  = AT91_BASE_SYS + AT91_ECC,
++              .end    = AT91_BASE_SYS + AT91_ECC + SZ_512 - 1,
++              .flags  = IORESOURCE_MEM,
++      }
++};
++
++static struct platform_device at91sam9g45_nand_device = {
++      .name           = "atmel_nand",
++      .id             = -1,
++      .dev            = {
++                              .platform_data  = &nand_data,
++      },
++      .resource       = nand_resources,
++      .num_resources  = ARRAY_SIZE(nand_resources),
++};
++
++void __init at91_add_device_nand(struct atmel_nand_data *data)
++{
++      unsigned long csa;
++
++      if (!data)
++              return;
++
++      csa = at91_sys_read(AT91_MATRIX_EBICSA);
++      at91_sys_write(AT91_MATRIX_EBICSA, csa | AT91_MATRIX_EBI_CS3A_SMC_SMARTMEDIA);
++
++      /* enable pin */
++      if (data->enable_pin)
++              at91_set_gpio_output(data->enable_pin, 1);
++
++      /* ready/busy pin */
++      if (data->rdy_pin)
++              at91_set_gpio_input(data->rdy_pin, 1);
++
++      /* card detect pin */
++      if (data->det_pin)
++              at91_set_gpio_input(data->det_pin, 1);
++
++      nand_data = *data;
++      platform_device_register(&at91sam9g45_nand_device);
++}
++#else
++void __init at91_add_device_nand(struct atmel_nand_data *data) {}
++#endif
++
++
++/* --------------------------------------------------------------------
++ *  TWI (i2c)
++ * -------------------------------------------------------------------- */
++
++/*
++ * Prefer the GPIO code since the TWI controller isn't robust
++ * (gets overruns and underruns under load) and can only issue
++ * repeated STARTs in one scenario (the driver doesn't yet handle them).
++ */
++#if defined(CONFIG_I2C_GPIO) || defined(CONFIG_I2C_GPIO_MODULE)
++static struct i2c_gpio_platform_data pdata_i2c0 = {
++      .sda_pin                = AT91_PIN_PA20,
++      .sda_is_open_drain      = 1,
++      .scl_pin                = AT91_PIN_PA21,
++      .scl_is_open_drain      = 1,
++      .udelay                 = 2,            /* ~100 kHz */
++};
++
++static struct platform_device at91sam9g45_twi0_device = {
++      .name                   = "i2c-gpio",
++      .id                     = 0,
++      .dev.platform_data      = &pdata_i2c0,
++};
++
++static struct i2c_gpio_platform_data pdata_i2c1 = {
++      .sda_pin                = AT91_PIN_PB10,
++      .sda_is_open_drain      = 1,
++      .scl_pin                = AT91_PIN_PB11,
++      .scl_is_open_drain      = 1,
++      .udelay                 = 2,            /* ~100 kHz */
++};
++
++static struct platform_device at91sam9g45_twi1_device = {
++      .name                   = "i2c-gpio",
++      .id                     = 1,
++      .dev.platform_data      = &pdata_i2c1,
++};
++
++void __init at91_add_device_i2c(short i2c_id, struct i2c_board_info *devices, int nr_devices)
++{
++      i2c_register_board_info(i2c_id, devices, nr_devices);
++
++      if (i2c_id == 0) {
++              at91_set_GPIO_periph(AT91_PIN_PA20, 1);         /* TWD (SDA) */
++              at91_set_multi_drive(AT91_PIN_PA20, 1);
++
++              at91_set_GPIO_periph(AT91_PIN_PA21, 1);         /* TWCK (SCL) */
++              at91_set_multi_drive(AT91_PIN_PA21, 1);
++
++              platform_device_register(&at91sam9g45_twi0_device);
++      } else {
++              at91_set_GPIO_periph(AT91_PIN_PB10, 1);         /* TWD (SDA) */
++              at91_set_multi_drive(AT91_PIN_PB10, 1);
++
++              at91_set_GPIO_periph(AT91_PIN_PB11, 1);         /* TWCK (SCL) */
++              at91_set_multi_drive(AT91_PIN_PB11, 1);
++
++              platform_device_register(&at91sam9g45_twi1_device);
++      }
++}
++
++#elif defined(CONFIG_I2C_AT91) || defined(CONFIG_I2C_AT91_MODULE)
++static struct resource twi0_resources[] = {
++      [0] = {
++              .start  = AT91SAM9G45_BASE_TWI0,
++              .end    = AT91SAM9G45_BASE_TWI0 + SZ_16K - 1,
++              .flags  = IORESOURCE_MEM,
++      },
++      [1] = {
++              .start  = AT91SAM9G45_ID_TWI0,
++              .end    = AT91SAM9G45_ID_TWI0,
++              .flags  = IORESOURCE_IRQ,
++      },
++};
++
++static struct platform_device at91sam9g45_twi0_device = {
++      .name           = "at91_i2c",
++      .id             = 0,
++      .resource       = twi0_resources,
++      .num_resources  = ARRAY_SIZE(twi0_resources),
++};
++
++static struct resource twi1_resources[] = {
++      [0] = {
++              .start  = AT91SAM9G45_BASE_TWI1,
++              .end    = AT91SAM9G45_BASE_TWI1 + SZ_16K - 1,
++              .flags  = IORESOURCE_MEM,
++      },
++      [1] = {
++              .start  = AT91SAM9G45_ID_TWI1,
++              .end    = AT91SAM9G45_ID_TWI1,
++              .flags  = IORESOURCE_IRQ,
++      },
++};
++
++static struct platform_device at91sam9g45_twi1_device = {
++      .name           = "at91_i2c",
++      .id             = 1,
++      .resource       = twi1_resources,
++      .num_resources  = ARRAY_SIZE(twi1_resources),
++};
++
++void __init at91_add_device_i2c(short i2c_id, struct i2c_board_info *devices, int nr_devices)
++{
++      i2c_register_board_info(i2c_id, devices, nr_devices);
++
++      /* pins used for TWI interface */
++      if (i2c_id == 0) {
++              at91_set_A_periph(AT91_PIN_PA20, 0);            /* TWD */
++              at91_set_multi_drive(AT91_PIN_PA20, 1);
++
++              at91_set_A_periph(AT91_PIN_PA21, 0);            /* TWCK */
++              at91_set_multi_drive(AT91_PIN_PA21, 1);
++
++              platform_device_register(&at91sam9g45_twi0_device);
++      } else {
++              at91_set_A_periph(AT91_PIN_PB10, 0);            /* TWD */
++              at91_set_multi_drive(AT91_PIN_PB10, 1);
++
++              at91_set_A_periph(AT91_PIN_PB11, 0);            /* TWCK */
++              at91_set_multi_drive(AT91_PIN_PB11, 1);
++
++              platform_device_register(&at91sam9g45_twi1_device);
++      }
++}
++#else
++void __init at91_add_device_i2c(short i2c_id, struct i2c_board_info *devices, int nr_devices) {}
++#endif
++
++
++/* --------------------------------------------------------------------
++ *  SPI
++ * -------------------------------------------------------------------- */
++
++#if defined(CONFIG_SPI_ATMEL) || defined(CONFIG_SPI_ATMEL_MODULE)
++static u64 spi_dmamask = DMA_BIT_MASK(32);
++
++static struct resource spi0_resources[] = {
++      [0] = {
++              .start  = AT91SAM9G45_BASE_SPI0,
++              .end    = AT91SAM9G45_BASE_SPI0 + SZ_16K - 1,
++              .flags  = IORESOURCE_MEM,
++      },
++      [1] = {
++              .start  = AT91SAM9G45_ID_SPI0,
++              .end    = AT91SAM9G45_ID_SPI0,
++              .flags  = IORESOURCE_IRQ,
++      },
++};
++
++static struct platform_device at91sam9g45_spi0_device = {
++      .name           = "atmel_spi",
++      .id             = 0,
++      .dev            = {
++                              .dma_mask               = &spi_dmamask,
++                              .coherent_dma_mask      = DMA_BIT_MASK(32),
++      },
++      .resource       = spi0_resources,
++      .num_resources  = ARRAY_SIZE(spi0_resources),
++};
++
++static const unsigned spi0_standard_cs[4] = { AT91_PIN_PB3, AT91_PIN_PB18, AT91_PIN_PB19, AT91_PIN_PD27 };
++
++static struct resource spi1_resources[] = {
++      [0] = {
++              .start  = AT91SAM9G45_BASE_SPI1,
++              .end    = AT91SAM9G45_BASE_SPI1 + SZ_16K - 1,
++              .flags  = IORESOURCE_MEM,
++      },
++      [1] = {
++              .start  = AT91SAM9G45_ID_SPI1,
++              .end    = AT91SAM9G45_ID_SPI1,
++              .flags  = IORESOURCE_IRQ,
++      },
++};
++
++static struct platform_device at91sam9g45_spi1_device = {
++      .name           = "atmel_spi",
++      .id             = 1,
++      .dev            = {
++                              .dma_mask               = &spi_dmamask,
++                              .coherent_dma_mask      = DMA_BIT_MASK(32),
++      },
++      .resource       = spi1_resources,
++      .num_resources  = ARRAY_SIZE(spi1_resources),
++};
++
++static const unsigned spi1_standard_cs[4] = { AT91_PIN_PB17, AT91_PIN_PD28, AT91_PIN_PD18, AT91_PIN_PD19 };
++
++void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices)
++{
++      int i;
++      unsigned long cs_pin;
++      short enable_spi0 = 0;
++      short enable_spi1 = 0;
++
++      /* Choose SPI chip-selects */
++      for (i = 0; i < nr_devices; i++) {
++              if (devices[i].controller_data)
++                      cs_pin = (unsigned long) devices[i].controller_data;
++              else if (devices[i].bus_num == 0)
++                      cs_pin = spi0_standard_cs[devices[i].chip_select];
++              else
++                      cs_pin = spi1_standard_cs[devices[i].chip_select];
++
++              if (devices[i].bus_num == 0)
++                      enable_spi0 = 1;
++              else
++                      enable_spi1 = 1;
++
++              /* enable chip-select pin */
++              at91_set_gpio_output(cs_pin, 1);
++
++              /* pass chip-select pin to driver */
++              devices[i].controller_data = (void *) cs_pin;
++      }
++
++      spi_register_board_info(devices, nr_devices);
++
++      /* Configure SPI bus(es) */
++      if (enable_spi0) {
++              at91_set_A_periph(AT91_PIN_PB0, 0);     /* SPI0_MISO */
++              at91_set_A_periph(AT91_PIN_PB1, 0);     /* SPI0_MOSI */
++              at91_set_A_periph(AT91_PIN_PB2, 0);     /* SPI0_SPCK */
++
++              at91_clock_associate("spi0_clk", &at91sam9g45_spi0_device.dev, "spi_clk");
++              platform_device_register(&at91sam9g45_spi0_device);
++      }
++      if (enable_spi1) {
++              at91_set_A_periph(AT91_PIN_PB14, 0);    /* SPI1_MISO */
++              at91_set_A_periph(AT91_PIN_PB15, 0);    /* SPI1_MOSI */
++              at91_set_A_periph(AT91_PIN_PB16, 0);    /* SPI1_SPCK */
++
++              at91_clock_associate("spi1_clk", &at91sam9g45_spi1_device.dev, "spi_clk");
++              platform_device_register(&at91sam9g45_spi1_device);
++      }
++}
++#else
++void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices) {}
++#endif
++
++
++/* --------------------------------------------------------------------
++ *  AC97
++ * -------------------------------------------------------------------- */
++
++#if defined(CONFIG_SND_ATMEL_AC97C) || defined(CONFIG_SND_ATMEL_AC97C_MODULE)
++static u64 ac97_dmamask = DMA_BIT_MASK(32);
++static struct ac97c_platform_data ac97_data;
++
++static struct resource ac97_resources[] = {
++      [0] = {
++              .start  = AT91SAM9G45_BASE_AC97C,
++              .end    = AT91SAM9G45_BASE_AC97C + SZ_16K - 1,
++              .flags  = IORESOURCE_MEM,
++      },
++      [1] = {
++              .start  = AT91SAM9G45_ID_AC97C,
++              .end    = AT91SAM9G45_ID_AC97C,
++              .flags  = IORESOURCE_IRQ,
++      },
++};
++
++static struct platform_device at91sam9g45_ac97_device = {
++      .name           = "atmel_ac97c",
++      .id             = 0,
++      .dev            = {
++                              .dma_mask               = &ac97_dmamask,
++                              .coherent_dma_mask      = DMA_BIT_MASK(32),
++                              .platform_data          = &ac97_data,
++      },
++      .resource       = ac97_resources,
++      .num_resources  = ARRAY_SIZE(ac97_resources),
++};
++
++void __init at91_add_device_ac97(struct ac97c_platform_data *data)
++{
++      if (!data)
++              return;
++
++      at91_set_A_periph(AT91_PIN_PD8, 0);     /* AC97FS */
++      at91_set_A_periph(AT91_PIN_PD9, 0);     /* AC97CK */
++      at91_set_A_periph(AT91_PIN_PD7, 0);     /* AC97TX */
++      at91_set_A_periph(AT91_PIN_PD6, 0);     /* AC97RX */
++
++      /* reset */
++      if (data->reset_pin)
++              at91_set_gpio_output(data->reset_pin, 0);
++
++      ac97_data = *data;
++      platform_device_register(&at91sam9g45_ac97_device);
++}
++#else
++void __init at91_add_device_ac97(struct ac97c_platform_data *data) {}
++#endif
++
++
++/* --------------------------------------------------------------------
++ *  LCD Controller
++ * -------------------------------------------------------------------- */
++
++#if defined(CONFIG_FB_ATMEL) || defined(CONFIG_FB_ATMEL_MODULE)
++static u64 lcdc_dmamask = DMA_BIT_MASK(32);
++static struct atmel_lcdfb_info lcdc_data;
++
++static struct resource lcdc_resources[] = {
++      [0] = {
++              .start  = AT91SAM9G45_LCDC_BASE,
++              .end    = AT91SAM9G45_LCDC_BASE + SZ_4K - 1,
++              .flags  = IORESOURCE_MEM,
++      },
++      [1] = {
++              .start  = AT91SAM9G45_ID_LCDC,
++              .end    = AT91SAM9G45_ID_LCDC,
++              .flags  = IORESOURCE_IRQ,
++      },
++};
++
++static struct platform_device at91_lcdc_device = {
++      .name           = "atmel_lcdfb",
++      .id             = 0,
++      .dev            = {
++                              .dma_mask               = &lcdc_dmamask,
++                              .coherent_dma_mask      = DMA_BIT_MASK(32),
++                              .platform_data          = &lcdc_data,
++      },
++      .resource       = lcdc_resources,
++      .num_resources  = ARRAY_SIZE(lcdc_resources),
++};
++
++void __init at91_add_device_lcdc(struct atmel_lcdfb_info *data)
++{
++      if (!data)
++              return;
++
++      at91_set_A_periph(AT91_PIN_PE0, 0);     /* LCDDPWR */
++
++      at91_set_A_periph(AT91_PIN_PE2, 0);     /* LCDCC */
++      at91_set_A_periph(AT91_PIN_PE3, 0);     /* LCDVSYNC */
++      at91_set_A_periph(AT91_PIN_PE4, 0);     /* LCDHSYNC */
++      at91_set_A_periph(AT91_PIN_PE5, 0);     /* LCDDOTCK */
++      at91_set_A_periph(AT91_PIN_PE6, 0);     /* LCDDEN */
++      at91_set_A_periph(AT91_PIN_PE7, 0);     /* LCDD0 */
++      at91_set_A_periph(AT91_PIN_PE8, 0);     /* LCDD1 */
++      at91_set_A_periph(AT91_PIN_PE9, 0);     /* LCDD2 */
++      at91_set_A_periph(AT91_PIN_PE10, 0);    /* LCDD3 */
++      at91_set_A_periph(AT91_PIN_PE11, 0);    /* LCDD4 */
++      at91_set_A_periph(AT91_PIN_PE12, 0);    /* LCDD5 */
++      at91_set_A_periph(AT91_PIN_PE13, 0);    /* LCDD6 */
++      at91_set_A_periph(AT91_PIN_PE14, 0);    /* LCDD7 */
++      at91_set_A_periph(AT91_PIN_PE15, 0);    /* LCDD8 */
++      at91_set_A_periph(AT91_PIN_PE16, 0);    /* LCDD9 */
++      at91_set_A_periph(AT91_PIN_PE17, 0);    /* LCDD10 */
++      at91_set_A_periph(AT91_PIN_PE18, 0);    /* LCDD11 */
++      at91_set_A_periph(AT91_PIN_PE19, 0);    /* LCDD12 */
++      at91_set_A_periph(AT91_PIN_PE20, 0);    /* LCDD13 */
++      at91_set_A_periph(AT91_PIN_PE21, 0);    /* LCDD14 */
++      at91_set_A_periph(AT91_PIN_PE22, 0);    /* LCDD15 */
++      at91_set_A_periph(AT91_PIN_PE23, 0);    /* LCDD16 */
++      at91_set_A_periph(AT91_PIN_PE24, 0);    /* LCDD17 */
++      at91_set_A_periph(AT91_PIN_PE25, 0);    /* LCDD18 */
++      at91_set_A_periph(AT91_PIN_PE26, 0);    /* LCDD19 */
++      at91_set_A_periph(AT91_PIN_PE27, 0);    /* LCDD20 */
++      at91_set_A_periph(AT91_PIN_PE28, 0);    /* LCDD21 */
++      at91_set_A_periph(AT91_PIN_PE29, 0);    /* LCDD22 */
++      at91_set_A_periph(AT91_PIN_PE30, 0);    /* LCDD23 */
++
++      lcdc_data = *data;
++      platform_device_register(&at91_lcdc_device);
++}
++#else
++void __init at91_add_device_lcdc(struct atmel_lcdfb_info *data) {}
++#endif
++
++
++/* --------------------------------------------------------------------
++ *  Timer/Counter block
++ * -------------------------------------------------------------------- */
++
++#ifdef CONFIG_ATMEL_TCLIB
++static struct resource tcb0_resources[] = {
++      [0] = {
++              .start  = AT91SAM9G45_BASE_TCB0,
++              .end    = AT91SAM9G45_BASE_TCB0 + SZ_16K - 1,
++              .flags  = IORESOURCE_MEM,
++      },
++      [1] = {
++              .start  = AT91SAM9G45_ID_TCB,
++              .end    = AT91SAM9G45_ID_TCB,
++              .flags  = IORESOURCE_IRQ,
++      },
++};
++
++static struct platform_device at91sam9g45_tcb0_device = {
++      .name           = "atmel_tcb",
++      .id             = 0,
++      .resource       = tcb0_resources,
++      .num_resources  = ARRAY_SIZE(tcb0_resources),
++};
++
++/* TCB1 begins with TC3 */
++static struct resource tcb1_resources[] = {
++      [0] = {
++              .start  = AT91SAM9G45_BASE_TCB1,
++              .end    = AT91SAM9G45_BASE_TCB1 + SZ_16K - 1,
++              .flags  = IORESOURCE_MEM,
++      },
++      [1] = {
++              .start  = AT91SAM9G45_ID_TCB,
++              .end    = AT91SAM9G45_ID_TCB,
++              .flags  = IORESOURCE_IRQ,
++      },
++};
++
++static struct platform_device at91sam9g45_tcb1_device = {
++      .name           = "atmel_tcb",
++      .id             = 1,
++      .resource       = tcb1_resources,
++      .num_resources  = ARRAY_SIZE(tcb1_resources),
++};
++
++static void __init at91_add_device_tc(void)
++{
++      /* this chip has one clock and irq for all six TC channels */
++      at91_clock_associate("tcb_clk", &at91sam9g45_tcb0_device.dev, "t0_clk");
++      platform_device_register(&at91sam9g45_tcb0_device);
++      at91_clock_associate("tcb_clk", &at91sam9g45_tcb1_device.dev, "t0_clk");
++      platform_device_register(&at91sam9g45_tcb1_device);
++}
++#else
++static void __init at91_add_device_tc(void) { }
++#endif
++
++
++/* --------------------------------------------------------------------
++ *  RTC
++ * -------------------------------------------------------------------- */
++
++#if defined(CONFIG_RTC_DRV_AT91RM9200) || defined(CONFIG_RTC_DRV_AT91RM9200_MODULE)
++static struct platform_device at91sam9g45_rtc_device = {
++      .name           = "at91_rtc",
++      .id             = -1,
++      .num_resources  = 0,
++};
++
++static void __init at91_add_device_rtc(void)
++{
++      platform_device_register(&at91sam9g45_rtc_device);
++}
++#else
++static void __init at91_add_device_rtc(void) {}
++#endif
++
++
++/* --------------------------------------------------------------------
++ *  Touchscreen
++ * -------------------------------------------------------------------- */
++
++#if defined(CONFIG_TOUCHSCREEN_ATMEL_TSADCC) || defined(CONFIG_TOUCHSCREEN_ATMEL_TSADCC_MODULE)
++static u64 tsadcc_dmamask = DMA_BIT_MASK(32);
++static struct at91_tsadcc_data tsadcc_data;
++
++static struct resource tsadcc_resources[] = {
++      [0] = {
++              .start  = AT91SAM9G45_BASE_TSC,
++              .end    = AT91SAM9G45_BASE_TSC + SZ_16K - 1,
++              .flags  = IORESOURCE_MEM,
++      },
++      [1] = {
++              .start  = AT91SAM9G45_ID_TSC,
++              .end    = AT91SAM9G45_ID_TSC,
++              .flags  = IORESOURCE_IRQ,
++      }
++};
++
++static struct platform_device at91sam9g45_tsadcc_device = {
++      .name           = "atmel_tsadcc",
++      .id             = -1,
++      .dev            = {
++                              .dma_mask               = &tsadcc_dmamask,
++                              .coherent_dma_mask      = DMA_BIT_MASK(32),
++                              .platform_data          = &tsadcc_data,
++      },
++      .resource       = tsadcc_resources,
++      .num_resources  = ARRAY_SIZE(tsadcc_resources),
++};
++
++void __init at91_add_device_tsadcc(struct at91_tsadcc_data *data)
++{
++      if (!data)
++              return;
++
++      at91_set_gpio_input(AT91_PIN_PD20, 0);  /* AD0_XR */
++      at91_set_gpio_input(AT91_PIN_PD21, 0);  /* AD1_XL */
++      at91_set_gpio_input(AT91_PIN_PD22, 0);  /* AD2_YT */
++      at91_set_gpio_input(AT91_PIN_PD23, 0);  /* AD3_TB */
++
++      tsadcc_data = *data;
++      platform_device_register(&at91sam9g45_tsadcc_device);
++}
++#else
++void __init at91_add_device_tsadcc(struct at91_tsadcc_data *data) {}
++#endif
++
++
++/* --------------------------------------------------------------------
++ *  RTT
++ * -------------------------------------------------------------------- */
++
++static struct resource rtt_resources[] = {
++      {
++              .start  = AT91_BASE_SYS + AT91_RTT,
++              .end    = AT91_BASE_SYS + AT91_RTT + SZ_16 - 1,
++              .flags  = IORESOURCE_MEM,
++      }
++};
++
++static struct platform_device at91sam9g45_rtt_device = {
++      .name           = "at91_rtt",
++      .id             = 0,
++      .resource       = rtt_resources,
++      .num_resources  = ARRAY_SIZE(rtt_resources),
++};
++
++static void __init at91_add_device_rtt(void)
++{
++      platform_device_register(&at91sam9g45_rtt_device);
++}
++
++
++/* --------------------------------------------------------------------
++ *  Watchdog
++ * -------------------------------------------------------------------- */
++
++#if defined(CONFIG_AT91SAM9_WATCHDOG) || defined(CONFIG_AT91SAM9_WATCHDOG_MODULE)
++static struct platform_device at91sam9g45_wdt_device = {
++      .name           = "at91_wdt",
++      .id             = -1,
++      .num_resources  = 0,
++};
++
++static void __init at91_add_device_watchdog(void)
++{
++      platform_device_register(&at91sam9g45_wdt_device);
++}
++#else
++static void __init at91_add_device_watchdog(void) {}
++#endif
++
++
++/* --------------------------------------------------------------------
++ *  PWM
++ * --------------------------------------------------------------------*/
++
++#if defined(CONFIG_ATMEL_PWM) || defined(CONFIG_ATMEL_PWM_MODULE)
++static u32 pwm_mask;
++
++static struct resource pwm_resources[] = {
++      [0] = {
++              .start  = AT91SAM9G45_BASE_PWMC,
++              .end    = AT91SAM9G45_BASE_PWMC + SZ_16K - 1,
++              .flags  = IORESOURCE_MEM,
++      },
++      [1] = {
++              .start  = AT91SAM9G45_ID_PWMC,
++              .end    = AT91SAM9G45_ID_PWMC,
++              .flags  = IORESOURCE_IRQ,
++      },
++};
++
++static struct platform_device at91sam9g45_pwm0_device = {
++      .name   = "atmel_pwm",
++      .id     = -1,
++      .dev    = {
++              .platform_data          = &pwm_mask,
++      },
++      .resource       = pwm_resources,
++      .num_resources  = ARRAY_SIZE(pwm_resources),
++};
++
++void __init at91_add_device_pwm(u32 mask)
++{
++      if (mask & (1 << AT91_PWM0))
++              at91_set_B_periph(AT91_PIN_PD24, 1);    /* enable PWM0 */
++
++      if (mask & (1 << AT91_PWM1))
++              at91_set_B_periph(AT91_PIN_PD31, 1);    /* enable PWM1 */
++
++      if (mask & (1 << AT91_PWM2))
++              at91_set_B_periph(AT91_PIN_PD26, 1);    /* enable PWM2 */
++
++      if (mask & (1 << AT91_PWM3))
++              at91_set_B_periph(AT91_PIN_PD0, 1);     /* enable PWM3 */
++
++      pwm_mask = mask;
++
++      platform_device_register(&at91sam9g45_pwm0_device);
++}
++#else
++void __init at91_add_device_pwm(u32 mask) {}
++#endif
++
++
++/* --------------------------------------------------------------------
++ *  SSC -- Synchronous Serial Controller
++ * -------------------------------------------------------------------- */
++
++#if defined(CONFIG_ATMEL_SSC) || defined(CONFIG_ATMEL_SSC_MODULE)
++static u64 ssc0_dmamask = DMA_BIT_MASK(32);
++
++static struct resource ssc0_resources[] = {
++      [0] = {
++              .start  = AT91SAM9G45_BASE_SSC0,
++              .end    = AT91SAM9G45_BASE_SSC0 + SZ_16K - 1,
++              .flags  = IORESOURCE_MEM,
++      },
++      [1] = {
++              .start  = AT91SAM9G45_ID_SSC0,
++              .end    = AT91SAM9G45_ID_SSC0,
++              .flags  = IORESOURCE_IRQ,
++      },
++};
++
++static struct platform_device at91sam9g45_ssc0_device = {
++      .name   = "ssc",
++      .id     = 0,
++      .dev    = {
++              .dma_mask               = &ssc0_dmamask,
++              .coherent_dma_mask      = DMA_BIT_MASK(32),
++      },
++      .resource       = ssc0_resources,
++      .num_resources  = ARRAY_SIZE(ssc0_resources),
++};
++
++static inline void configure_ssc0_pins(unsigned pins)
++{
++      if (pins & ATMEL_SSC_TF)
++              at91_set_A_periph(AT91_PIN_PD1, 1);
++      if (pins & ATMEL_SSC_TK)
++              at91_set_A_periph(AT91_PIN_PD0, 1);
++      if (pins & ATMEL_SSC_TD)
++              at91_set_A_periph(AT91_PIN_PD2, 1);
++      if (pins & ATMEL_SSC_RD)
++              at91_set_A_periph(AT91_PIN_PD3, 1);
++      if (pins & ATMEL_SSC_RK)
++              at91_set_A_periph(AT91_PIN_PD4, 1);
++      if (pins & ATMEL_SSC_RF)
++              at91_set_A_periph(AT91_PIN_PD5, 1);
++}
++
++static u64 ssc1_dmamask = DMA_BIT_MASK(32);
++
++static struct resource ssc1_resources[] = {
++      [0] = {
++              .start  = AT91SAM9G45_BASE_SSC1,
++              .end    = AT91SAM9G45_BASE_SSC1 + SZ_16K - 1,
++              .flags  = IORESOURCE_MEM,
++      },
++      [1] = {
++              .start  = AT91SAM9G45_ID_SSC1,
++              .end    = AT91SAM9G45_ID_SSC1,
++              .flags  = IORESOURCE_IRQ,
++      },
++};
++
++static struct platform_device at91sam9g45_ssc1_device = {
++      .name   = "ssc",
++      .id     = 1,
++      .dev    = {
++              .dma_mask               = &ssc1_dmamask,
++              .coherent_dma_mask      = DMA_BIT_MASK(32),
++      },
++      .resource       = ssc1_resources,
++      .num_resources  = ARRAY_SIZE(ssc1_resources),
++};
++
++static inline void configure_ssc1_pins(unsigned pins)
++{
++      if (pins & ATMEL_SSC_TF)
++              at91_set_A_periph(AT91_PIN_PD14, 1);
++      if (pins & ATMEL_SSC_TK)
++              at91_set_A_periph(AT91_PIN_PD12, 1);
++      if (pins & ATMEL_SSC_TD)
++              at91_set_A_periph(AT91_PIN_PD10, 1);
++      if (pins & ATMEL_SSC_RD)
++              at91_set_A_periph(AT91_PIN_PD11, 1);
++      if (pins & ATMEL_SSC_RK)
++              at91_set_A_periph(AT91_PIN_PD13, 1);
++      if (pins & ATMEL_SSC_RF)
++              at91_set_A_periph(AT91_PIN_PD15, 1);
++}
++
++/*
++ * SSC controllers are accessed through library code, instead of any
++ * kind of all-singing/all-dancing driver.  For example one could be
++ * used by a particular I2S audio codec's driver, while another one
++ * on the same system might be used by a custom data capture driver.
++ */
++void __init at91_add_device_ssc(unsigned id, unsigned pins)
++{
++      struct platform_device *pdev;
++
++      /*
++       * NOTE: caller is responsible for passing information matching
++       * "pins" to whatever will be using each particular controller.
++       */
++      switch (id) {
++      case AT91SAM9G45_ID_SSC0:
++              pdev = &at91sam9g45_ssc0_device;
++              configure_ssc0_pins(pins);
++              at91_clock_associate("ssc0_clk", &pdev->dev, "pclk");
++              break;
++      case AT91SAM9G45_ID_SSC1:
++              pdev = &at91sam9g45_ssc1_device;
++              configure_ssc1_pins(pins);
++              at91_clock_associate("ssc1_clk", &pdev->dev, "pclk");
++              break;
++      default:
++              return;
++      }
++
++      platform_device_register(pdev);
++}
++
++#else
++void __init at91_add_device_ssc(unsigned id, unsigned pins) {}
++#endif
++
++
++/* --------------------------------------------------------------------
++ *  UART
++ * -------------------------------------------------------------------- */
++
++#if defined(CONFIG_SERIAL_ATMEL)
++static struct resource dbgu_resources[] = {
++      [0] = {
++              .start  = AT91_VA_BASE_SYS + AT91_DBGU,
++              .end    = AT91_VA_BASE_SYS + AT91_DBGU + SZ_512 - 1,
++              .flags  = IORESOURCE_MEM,
++      },
++      [1] = {
++              .start  = AT91_ID_SYS,
++              .end    = AT91_ID_SYS,
++              .flags  = IORESOURCE_IRQ,
++      },
++};
++
++static struct atmel_uart_data dbgu_data = {
++      .use_dma_tx     = 0,
++      .use_dma_rx     = 0,
++      .regs           = (void __iomem *)(AT91_VA_BASE_SYS + AT91_DBGU),
++};
++
++static u64 dbgu_dmamask = DMA_BIT_MASK(32);
++
++static struct platform_device at91sam9g45_dbgu_device = {
++      .name           = "atmel_usart",
++      .id             = 0,
++      .dev            = {
++                              .dma_mask               = &dbgu_dmamask,
++                              .coherent_dma_mask      = DMA_BIT_MASK(32),
++                              .platform_data          = &dbgu_data,
++      },
++      .resource       = dbgu_resources,
++      .num_resources  = ARRAY_SIZE(dbgu_resources),
++};
++
++static inline void configure_dbgu_pins(void)
++{
++      at91_set_A_periph(AT91_PIN_PB12, 0);            /* DRXD */
++      at91_set_A_periph(AT91_PIN_PB13, 1);            /* DTXD */
++}
++
++static struct resource uart0_resources[] = {
++      [0] = {
++              .start  = AT91SAM9G45_BASE_US0,
++              .end    = AT91SAM9G45_BASE_US0 + SZ_16K - 1,
++              .flags  = IORESOURCE_MEM,
++      },
++      [1] = {
++              .start  = AT91SAM9G45_ID_US0,
++              .end    = AT91SAM9G45_ID_US0,
++              .flags  = IORESOURCE_IRQ,
++      },
++};
++
++static struct atmel_uart_data uart0_data = {
++      .use_dma_tx     = 1,
++      .use_dma_rx     = 1,
++};
++
++static u64 uart0_dmamask = DMA_BIT_MASK(32);
++
++static struct platform_device at91sam9g45_uart0_device = {
++      .name           = "atmel_usart",
++      .id             = 1,
++      .dev            = {
++                              .dma_mask               = &uart0_dmamask,
++                              .coherent_dma_mask      = DMA_BIT_MASK(32),
++                              .platform_data          = &uart0_data,
++      },
++      .resource       = uart0_resources,
++      .num_resources  = ARRAY_SIZE(uart0_resources),
++};
++
++static inline void configure_usart0_pins(unsigned pins)
++{
++      at91_set_A_periph(AT91_PIN_PB19, 1);            /* TXD0 */
++      at91_set_A_periph(AT91_PIN_PB18, 0);            /* RXD0 */
++
++      if (pins & ATMEL_UART_RTS)
++              at91_set_B_periph(AT91_PIN_PB17, 0);    /* RTS0 */
++      if (pins & ATMEL_UART_CTS)
++              at91_set_B_periph(AT91_PIN_PB15, 0);    /* CTS0 */
++}
++
++static struct resource uart1_resources[] = {
++      [0] = {
++              .start  = AT91SAM9G45_BASE_US1,
++              .end    = AT91SAM9G45_BASE_US1 + SZ_16K - 1,
++              .flags  = IORESOURCE_MEM,
++      },
++      [1] = {
++              .start  = AT91SAM9G45_ID_US1,
++              .end    = AT91SAM9G45_ID_US1,
++              .flags  = IORESOURCE_IRQ,
++      },
++};
++
++static struct atmel_uart_data uart1_data = {
++      .use_dma_tx     = 1,
++      .use_dma_rx     = 1,
++};
++
++static u64 uart1_dmamask = DMA_BIT_MASK(32);
++
++static struct platform_device at91sam9g45_uart1_device = {
++      .name           = "atmel_usart",
++      .id             = 2,
++      .dev            = {
++                              .dma_mask               = &uart1_dmamask,
++                              .coherent_dma_mask      = DMA_BIT_MASK(32),
++                              .platform_data          = &uart1_data,
++      },
++      .resource       = uart1_resources,
++      .num_resources  = ARRAY_SIZE(uart1_resources),
++};
++
++static inline void configure_usart1_pins(unsigned pins)
++{
++      at91_set_A_periph(AT91_PIN_PB4, 1);             /* TXD1 */
++      at91_set_A_periph(AT91_PIN_PB5, 0);             /* RXD1 */
++
++      if (pins & ATMEL_UART_RTS)
++              at91_set_A_periph(AT91_PIN_PD16, 0);    /* RTS1 */
++      if (pins & ATMEL_UART_CTS)
++              at91_set_A_periph(AT91_PIN_PD17, 0);    /* CTS1 */
++}
++
++static struct resource uart2_resources[] = {
++      [0] = {
++              .start  = AT91SAM9G45_BASE_US2,
++              .end    = AT91SAM9G45_BASE_US2 + SZ_16K - 1,
++              .flags  = IORESOURCE_MEM,
++      },
++      [1] = {
++              .start  = AT91SAM9G45_ID_US2,
++              .end    = AT91SAM9G45_ID_US2,
++              .flags  = IORESOURCE_IRQ,
++      },
++};
++
++static struct atmel_uart_data uart2_data = {
++      .use_dma_tx     = 1,
++      .use_dma_rx     = 1,
++};
++
++static u64 uart2_dmamask = DMA_BIT_MASK(32);
++
++static struct platform_device at91sam9g45_uart2_device = {
++      .name           = "atmel_usart",
++      .id             = 3,
++      .dev            = {
++                              .dma_mask               = &uart2_dmamask,
++                              .coherent_dma_mask      = DMA_BIT_MASK(32),
++                              .platform_data          = &uart2_data,
++      },
++      .resource       = uart2_resources,
++      .num_resources  = ARRAY_SIZE(uart2_resources),
++};
++
++static inline void configure_usart2_pins(unsigned pins)
++{
++      at91_set_A_periph(AT91_PIN_PB6, 1);             /* TXD2 */
++      at91_set_A_periph(AT91_PIN_PB7, 0);             /* RXD2 */
++
++      if (pins & ATMEL_UART_RTS)
++              at91_set_B_periph(AT91_PIN_PC9, 0);     /* RTS2 */
++      if (pins & ATMEL_UART_CTS)
++              at91_set_B_periph(AT91_PIN_PC11, 0);    /* CTS2 */
++}
++
++static struct resource uart3_resources[] = {
++      [0] = {
++              .start  = AT91SAM9G45_BASE_US3,
++              .end    = AT91SAM9G45_BASE_US3 + SZ_16K - 1,
++              .flags  = IORESOURCE_MEM,
++      },
++      [1] = {
++              .start  = AT91SAM9G45_ID_US3,
++              .end    = AT91SAM9G45_ID_US3,
++              .flags  = IORESOURCE_IRQ,
++      },
++};
++
++static struct atmel_uart_data uart3_data = {
++      .use_dma_tx     = 1,
++      .use_dma_rx     = 1,
++};
++
++static u64 uart3_dmamask = DMA_BIT_MASK(32);
++
++static struct platform_device at91sam9g45_uart3_device = {
++      .name           = "atmel_usart",
++      .id             = 4,
++      .dev            = {
++                              .dma_mask               = &uart3_dmamask,
++                              .coherent_dma_mask      = DMA_BIT_MASK(32),
++                              .platform_data          = &uart3_data,
++      },
++      .resource       = uart3_resources,
++      .num_resources  = ARRAY_SIZE(uart3_resources),
++};
++
++static inline void configure_usart3_pins(unsigned pins)
++{
++      at91_set_A_periph(AT91_PIN_PB8, 1);             /* TXD3 */
++      at91_set_A_periph(AT91_PIN_PB9, 0);             /* RXD3 */
++
++      if (pins & ATMEL_UART_RTS)
++              at91_set_B_periph(AT91_PIN_PA23, 0);    /* RTS3 */
++      if (pins & ATMEL_UART_CTS)
++              at91_set_B_periph(AT91_PIN_PA24, 0);    /* CTS3 */
++}
++
++static struct platform_device *__initdata at91_uarts[ATMEL_MAX_UART]; /* the UARTs to use */
++struct platform_device *atmel_default_console_device; /* the serial console device */
++
++void __init at91_register_uart(unsigned id, unsigned portnr, unsigned pins)
++{
++      struct platform_device *pdev;
++
++      switch (id) {
++              case 0:         /* DBGU */
++                      pdev = &at91sam9g45_dbgu_device;
++                      configure_dbgu_pins();
++                      at91_clock_associate("mck", &pdev->dev, "usart");
++                      break;
++              case AT91SAM9G45_ID_US0:
++                      pdev = &at91sam9g45_uart0_device;
++                      configure_usart0_pins(pins);
++                      at91_clock_associate("usart0_clk", &pdev->dev, "usart");
++                      break;
++              case AT91SAM9G45_ID_US1:
++                      pdev = &at91sam9g45_uart1_device;
++                      configure_usart1_pins(pins);
++                      at91_clock_associate("usart1_clk", &pdev->dev, "usart");
++                      break;
++              case AT91SAM9G45_ID_US2:
++                      pdev = &at91sam9g45_uart2_device;
++                      configure_usart2_pins(pins);
++                      at91_clock_associate("usart2_clk", &pdev->dev, "usart");
++                      break;
++              case AT91SAM9G45_ID_US3:
++                      pdev = &at91sam9g45_uart3_device;
++                      configure_usart3_pins(pins);
++                      at91_clock_associate("usart3_clk", &pdev->dev, "usart");
++                      break;
++              default:
++                      return;
++      }
++      pdev->id = portnr;              /* update to mapped ID */
++
++      if (portnr < ATMEL_MAX_UART)
++              at91_uarts[portnr] = pdev;
++}
++
++void __init at91_set_serial_console(unsigned portnr)
++{
++      if (portnr < ATMEL_MAX_UART)
++              atmel_default_console_device = at91_uarts[portnr];
++}
++
++void __init at91_add_device_serial(void)
++{
++      int i;
++
++      for (i = 0; i < ATMEL_MAX_UART; i++) {
++              if (at91_uarts[i])
++                      platform_device_register(at91_uarts[i]);
++      }
++
++      if (!atmel_default_console_device)
++              printk(KERN_INFO "AT91: No default serial console defined.\n");
++}
++#else
++void __init at91_register_uart(unsigned id, unsigned portnr, unsigned pins) {}
++void __init at91_set_serial_console(unsigned portnr) {}
++void __init at91_add_device_serial(void) {}
++#endif
++
++
++/* -------------------------------------------------------------------- */
++/*
++ * These devices are always present and don't need any board-specific
++ * setup.
++ */
++static int __init at91_add_standard_devices(void)
++{
++      at91_add_device_hdmac();
++      at91_add_device_rtc();
++      at91_add_device_rtt();
++      at91_add_device_watchdog();
++      at91_add_device_tc();
++      return 0;
++}
++
++arch_initcall(at91_add_standard_devices);
+Index: linux-2.6.30/arch/arm/mach-at91/board-sam9m10g45ek.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.30/arch/arm/mach-at91/board-sam9m10g45ek.c       2011-02-01 16:40:30.165043750 +0100
+@@ -0,0 +1,436 @@
++/*
++ *  Board-specific setup code for the AT91SAM9M10G45 Evaluation Kit family
++ *
++ *  Covers: * AT91SAM9G45-EKES  board
++ *          * AT91SAM9M10G45-EK board
++ *
++ *  Copyright (C) 2009 Atmel 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.
++ *
++ */
++
++#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/fb.h>
++#include <linux/gpio_keys.h>
++#include <linux/input.h>
++#include <linux/leds.h>
++#include <linux/clk.h>
++#include <linux/atmel-mci.h>
++
++#include <mach/hardware.h>
++#include <video/atmel_lcdc.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 <mach/hardware.h>
++#include <mach/board.h>
++#include <mach/gpio.h>
++#include <mach/at91sam9_smc.h>
++#include <mach/at91_shdwc.h>
++
++#include "sam9_smc.h"
++#include "generic.h"
++
++
++static void __init ek_map_io(void)
++{
++      /* Initialize processor: 12.000 MHz crystal */
++      at91sam9g45_initialize(12000000);
++
++      /* DGBU on ttyS0. (Rx & Tx only) */
++      at91_register_uart(0, 0, 0);
++
++      /* USART0 not connected on the -EK board */
++      /* USART1 on ttyS2. (Rx, Tx, RTS, CTS) */
++      at91_register_uart(AT91SAM9G45_ID_US1, 2, ATMEL_UART_CTS | ATMEL_UART_RTS);
++
++      /* set serial console to ttyS0 (ie, DBGU) */
++      at91_set_serial_console(0);
++}
++
++static void __init ek_init_irq(void)
++{
++      at91sam9g45_init_interrupts(NULL);
++}
++
++
++/*
++ * USB HS Host port (common to OHCI & EHCI)
++ */
++static struct at91_usbh_data __initdata ek_usbh_hs_data = {
++      .ports          = 2,
++      .vbus_pin       = {AT91_PIN_PD1, AT91_PIN_PD3},
++};
++
++
++/*
++ * USB HS Device port
++ */
++static struct usba_platform_data __initdata ek_usba_udc_data = {
++      .vbus_pin       = AT91_PIN_PB19,
++};
++
++
++/*
++ * SPI devices.
++ */
++static struct spi_board_info ek_spi_devices[] = {
++      {       /* DataFlash chip */
++              .modalias       = "mtd_dataflash",
++              .chip_select    = 0,
++              .max_speed_hz   = 15 * 1000 * 1000,
++              .bus_num        = 0,
++      },
++};
++
++
++/*
++ * MCI (SD/MMC)
++ */
++static struct mci_platform_data __initdata mci0_data = {
++      .slot[0] = {
++              .bus_width      = 4,
++              .detect_pin     = AT91_PIN_PD10,
++              .wp_pin         = -1,
++      },
++};
++
++static struct mci_platform_data __initdata mci1_data = {
++      .slot[0] = {
++              .bus_width      = 4,
++              .detect_pin     = AT91_PIN_PD11,
++              .wp_pin         = AT91_PIN_PD29,
++      },
++};
++
++
++/*
++ * MACB Ethernet device
++ */
++static struct at91_eth_data __initdata ek_macb_data = {
++      .phy_irq_pin    = AT91_PIN_PD5,
++      .is_rmii        = 1,
++};
++
++
++/*
++ * NAND flash
++ */
++static struct mtd_partition __initdata ek_nand_partition[] = {
++      {
++              .name   = "Partition 1",
++              .offset = 0,
++              .size   = SZ_64M,
++      },
++      {
++              .name   = "Partition 2",
++              .offset = MTDPART_OFS_NXTBLK,
++              .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;
++}
++
++/* det_pin is not connected */
++static struct atmel_nand_data __initdata ek_nand_data = {
++      .ale            = 21,
++      .cle            = 22,
++      .rdy_pin        = AT91_PIN_PC8,
++      .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
++};
++
++static struct sam9_smc_config __initdata ek_nand_smc_config = {
++      .ncs_read_setup         = 0,
++      .nrd_setup              = 2,
++      .ncs_write_setup        = 0,
++      .nwe_setup              = 2,
++
++      .ncs_read_pulse         = 4,
++      .nrd_pulse              = 4,
++      .ncs_write_pulse        = 4,
++      .nwe_pulse              = 4,
++
++      .read_cycle             = 7,
++      .write_cycle            = 7,
++
++      .mode                   = AT91_SMC_READMODE | AT91_SMC_WRITEMODE | AT91_SMC_EXNWMODE_DISABLE,
++      .tdf_cycles             = 3,
++};
++
++static void __init ek_add_device_nand(void)
++{
++      /* setup bus-width (8 or 16) */
++      if (ek_nand_data.bus_width_16)
++              ek_nand_smc_config.mode |= AT91_SMC_DBW_16;
++      else
++              ek_nand_smc_config.mode |= AT91_SMC_DBW_8;
++
++      /* configure chip-select 3 (NAND) */
++      sam9_smc_configure(3, &ek_nand_smc_config);
++
++      at91_add_device_nand(&ek_nand_data);
++}
++
++
++/*
++ * LCD Controller
++ */
++#if defined(CONFIG_FB_ATMEL) || defined(CONFIG_FB_ATMEL_MODULE)
++static struct fb_videomode at91_tft_vga_modes[] = {
++      {
++              .name           = "LG",
++              .refresh        = 60,
++              .xres           = 480,          .yres           = 272,
++              .pixclock       = KHZ2PICOS(9000),
++
++              .left_margin    = 1,            .right_margin   = 1,
++              .upper_margin   = 40,           .lower_margin   = 1,
++              .hsync_len      = 45,           .vsync_len      = 1,
++
++              .sync           = 0,
++              .vmode          = FB_VMODE_NONINTERLACED,
++      },
++};
++
++static struct fb_monspecs at91fb_default_monspecs = {
++      .manufacturer   = "LG",
++      .monitor        = "LB043WQ1",
++
++      .modedb         = at91_tft_vga_modes,
++      .modedb_len     = ARRAY_SIZE(at91_tft_vga_modes),
++      .hfmin          = 15000,
++      .hfmax          = 17640,
++      .vfmin          = 57,
++      .vfmax          = 67,
++};
++
++#define AT91SAM9G45_DEFAULT_LCDCON2   (ATMEL_LCDC_MEMOR_LITTLE \
++                                      | ATMEL_LCDC_DISTYPE_TFT \
++                                      | ATMEL_LCDC_CLKMOD_ALWAYSACTIVE)
++
++/* Driver datas */
++static struct atmel_lcdfb_info __initdata ek_lcdc_data = {
++      .lcdcon_is_backlight            = true,
++      .default_bpp                    = 32,
++      .default_dmacon                 = ATMEL_LCDC_DMAEN,
++      .default_lcdcon2                = AT91SAM9G45_DEFAULT_LCDCON2,
++      .default_monspecs               = &at91fb_default_monspecs,
++      .guard_time                     = 9,
++      .lcd_wiring_mode                = ATMEL_LCDC_WIRING_RGB,
++};
++
++#else
++static struct atmel_lcdfb_info __initdata ek_lcdc_data;
++#endif
++
++
++/*
++ * Touchscreen
++ */
++static struct at91_tsadcc_data ek_tsadcc_data = {
++      .adc_clock              = 300000,
++      .pendet_debounce        = 0x0d,
++      .ts_sample_hold_time    = 0x0a,
++};
++
++
++/*
++ * GPIO Buttons
++ */
++#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
++static struct gpio_keys_button ek_buttons[] = {
++      {       /* BP1, "leftclic" */
++              .code           = BTN_LEFT,
++              .gpio           = AT91_PIN_PB6,
++              .active_low     = 1,
++              .desc           = "left_click",
++              .wakeup         = 1,
++      },
++      {       /* BP2, "rightclic" */
++              .code           = BTN_RIGHT,
++              .gpio           = AT91_PIN_PB7,
++              .active_low     = 1,
++              .desc           = "right_click",
++              .wakeup         = 1,
++      },
++              /* BP3, "joystick" */
++      {
++              .code           = KEY_LEFT,
++              .gpio           = AT91_PIN_PB14,
++              .active_low     = 1,
++              .desc           = "Joystick Left",
++      },
++      {
++              .code           = KEY_RIGHT,
++              .gpio           = AT91_PIN_PB15,
++              .active_low     = 1,
++              .desc           = "Joystick Right",
++      },
++      {
++              .code           = KEY_UP,
++              .gpio           = AT91_PIN_PB16,
++              .active_low     = 1,
++              .desc           = "Joystick Up",
++      },
++      {
++              .code           = KEY_DOWN,
++              .gpio           = AT91_PIN_PB17,
++              .active_low     = 1,
++              .desc           = "Joystick Down",
++      },
++      {
++              .code           = KEY_ENTER,
++              .gpio           = AT91_PIN_PB18,
++              .active_low     = 1,
++              .desc           = "Joystick Press",
++      },
++};
++
++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)
++{
++      int i;
++
++      for (i = 0; i < ARRAY_SIZE(ek_buttons); i++) {
++              at91_set_GPIO_periph(ek_buttons[i].gpio, 1);
++              at91_set_deglitch(ek_buttons[i].gpio, 1);
++      }
++
++      platform_device_register(&ek_button_device);
++}
++#else
++static void __init ek_add_device_buttons(void) {}
++#endif
++
++
++/*
++ * AC97
++ * reset_pin is not connected: NRST
++ */
++static struct ac97c_platform_data ek_ac97_data = {
++};
++
++
++/*
++ * LEDs ... these could all be PWM-driven, for variable brightness
++ */
++static struct gpio_led ek_leds[] = {
++      {       /* "top" led, red, powerled */
++              .name                   = "d8",
++              .gpio                   = AT91_PIN_PD30,
++              .default_trigger        = "heartbeat",
++      },
++      {       /* "left" led, green, userled2, pwm3 */
++              .name                   = "d6",
++              .gpio                   = AT91_PIN_PD0,
++              .active_low             = 1,
++              .default_trigger        = "nand-disk",
++      },
++#if !(defined(CONFIG_LEDS_ATMEL_PWM) || defined(CONFIG_LEDS_ATMEL_PWM_MODULE))
++      {       /* "right" led, green, userled1, pwm1 */
++              .name                   = "d7",
++              .gpio                   = AT91_PIN_PD31,
++              .active_low             = 1,
++              .default_trigger        = "mmc0",
++      },
++#endif
++};
++
++
++/*
++ * PWM Leds
++ */
++static struct gpio_led ek_pwm_led[] = {
++#if defined(CONFIG_LEDS_ATMEL_PWM) || defined(CONFIG_LEDS_ATMEL_PWM_MODULE)
++      {       /* "right" led, green, userled1, pwm1 */
++              .name                   = "d7",
++              .gpio                   = 1,    /* is PWM channel number */
++              .active_low             = 1,
++              .default_trigger        = "none",
++      },
++#endif
++};
++
++
++
++static void __init ek_board_init(void)
++{
++      /* Serial */
++      at91_add_device_serial();
++      /* USB HS Host */
++      at91_add_device_usbh_ohci(&ek_usbh_hs_data);
++      at91_add_device_usbh_ehci(&ek_usbh_hs_data);
++      /* USB HS Device */
++      at91_add_device_usba(&ek_usba_udc_data);
++      /* SPI */
++      at91_add_device_spi(ek_spi_devices, ARRAY_SIZE(ek_spi_devices));
++      /* MMC */
++      at91_add_device_mci(0, &mci0_data);
++      at91_add_device_mci(1, &mci1_data);
++      /* Ethernet */
++      at91_add_device_eth(&ek_macb_data);
++      /* NAND */
++      ek_add_device_nand();
++      /* I2C */
++      at91_add_device_i2c(0, NULL, 0);
++      /* LCD Controller */
++      at91_add_device_lcdc(&ek_lcdc_data);
++      /* Touch Screen */
++      at91_add_device_tsadcc(&ek_tsadcc_data);
++      /* Push Buttons */
++      ek_add_device_buttons();
++      /* AC97 */
++      at91_add_device_ac97(&ek_ac97_data);
++      /* LEDs */
++      at91_gpio_leds(ek_leds, ARRAY_SIZE(ek_leds));
++      at91_pwm_leds(ek_pwm_led, ARRAY_SIZE(ek_pwm_led));
++}
++
++MACHINE_START(AT91SAM9G45EKES, "Atmel AT91SAM9G45-EKES")
++      /* Maintainer: Atmel */
++      .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
+Index: linux-2.6.30/arch/arm/mach-at91/generic.h
+===================================================================
+--- linux-2.6.30.orig/arch/arm/mach-at91/generic.h     2011-02-01 16:40:18.000000000 +0100
++++ linux-2.6.30/arch/arm/mach-at91/generic.h  2011-02-01 16:40:30.141043034 +0100
+@@ -14,6 +14,7 @@
+ extern void __init at91sam9261_initialize(unsigned long main_clock);
+ extern void __init at91sam9263_initialize(unsigned long main_clock);
+ extern void __init at91sam9rl_initialize(unsigned long main_clock);
++extern void __init at91sam9g45_initialize(unsigned long main_clock);
+ extern void __init at91x40_initialize(unsigned long main_clock);
+ extern void __init at91cap9_initialize(unsigned long main_clock);
+ extern void __init at572d940hf_initialize(unsigned long main_clock);
+@@ -24,6 +25,7 @@
+ extern void __init at91sam9261_init_interrupts(unsigned int priority[]);
+ extern void __init at91sam9263_init_interrupts(unsigned int priority[]);
+ extern void __init at91sam9rl_init_interrupts(unsigned int priority[]);
++extern void __init at91sam9g45_init_interrupts(unsigned int priority[]);
+ extern void __init at91x40_init_interrupts(unsigned int priority[]);
+ extern void __init at91cap9_init_interrupts(unsigned int priority[]);
+ extern void __init at572d940hf_init_interrupts(unsigned int priority[]);
+Index: linux-2.6.30/arch/arm/mach-at91/include/mach/board.h
+===================================================================
+--- linux-2.6.30.orig/arch/arm/mach-at91/include/mach/board.h  2011-02-01 16:40:18.000000000 +0100
++++ linux-2.6.30/arch/arm/mach-at91/include/mach/board.h       2011-02-01 16:40:30.165043750 +0100
+@@ -37,6 +37,8 @@
+ #include <linux/leds.h>
+ #include <linux/spi/spi.h>
+ #include <linux/usb/atmel_usba_udc.h>
++#include <linux/atmel-mci.h>
++#include <sound/atmel-ac97c.h>
+  /* USB Device */
+ struct at91_udc_data {
+@@ -63,6 +65,7 @@
+ extern void __init at91_add_device_cf(struct at91_cf_data *data);
+  /* MMC / SD */
++  /* at91_mci platform config */
+ struct at91_mmc_data {
+       u8              det_pin;        /* card detect IRQ */
+       unsigned        slot_b:1;       /* uses Slot B */
+@@ -72,6 +75,9 @@
+ };
+ extern void __init at91_add_device_mmc(short mmc_id, struct at91_mmc_data *data);
++  /* atmel-mci platform config */
++extern void __init at91_add_device_mci(short mmc_id, struct mci_platform_data *data);
++
+  /* Ethernet (EMAC & MACB) */
+ struct at91_eth_data {
+       u32             phy_mask;
+@@ -80,7 +86,8 @@
+ };
+ extern void __init at91_add_device_eth(struct at91_eth_data *data);
+-#if defined(CONFIG_ARCH_AT91SAM9260) || defined(CONFIG_ARCH_AT91SAM9263) || defined(CONFIG_ARCH_AT91SAM9G20) || defined(CONFIG_ARCH_AT91CAP9) || defined(CONFIG_ARCH_AT572D940HF)
++#if defined(CONFIG_ARCH_AT91SAM9260) || defined(CONFIG_ARCH_AT91SAM9263) || defined(CONFIG_ARCH_AT91SAM9G20) || defined(CONFIG_ARCH_AT91CAP9) \
++      || defined(CONFIG_ARCH_AT91SAM9G45) || defined(CONFIG_ARCH_AT572D940HF)
+ #define eth_platform_data     at91_eth_data
+ #endif
+@@ -90,6 +97,8 @@
+       u8              vbus_pin[2];    /* port power-control pin */
+ };
+ extern void __init at91_add_device_usbh(struct at91_usbh_data *data);
++extern void __init at91_add_device_usbh_ohci(struct at91_usbh_data *data);
++extern void __init at91_add_device_usbh_ehci(struct at91_usbh_data *data);
+  /* NAND / SmartMedia */
+ struct atmel_nand_data {
+@@ -105,7 +114,11 @@
+ extern void __init at91_add_device_nand(struct atmel_nand_data *data);
+  /* I2C*/
++#if defined(CONFIG_ARCH_AT91SAM9G45)
++extern void __init at91_add_device_i2c(short i2c_id, struct i2c_board_info *devices, int nr_devices);
++#else
+ extern void __init at91_add_device_i2c(struct i2c_board_info *devices, int nr_devices);
++#endif
+  /* SPI */
+ extern void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices);
+@@ -168,16 +181,18 @@
+ extern void __init at91_add_device_lcdc(struct atmel_lcdfb_info *data);
+  /* AC97 */
+-struct atmel_ac97_data {
+-      u8              reset_pin;      /* reset */
+-};
+-extern void __init at91_add_device_ac97(struct atmel_ac97_data *data);
++extern void __init at91_add_device_ac97(struct ac97c_platform_data *data);
+  /* ISI */
+ extern void __init at91_add_device_isi(void);
+  /* Touchscreen Controller */
+-extern void __init at91_add_device_tsadcc(void);
++struct at91_tsadcc_data {
++      unsigned int    adc_clock;
++      u8              pendet_debounce;
++      u8              ts_sample_hold_time;
++};
++extern void __init at91_add_device_tsadcc(struct at91_tsadcc_data *data);
+  /* LEDs */
+ extern void __init at91_init_leds(u8 cpu_led, u8 timer_led);
+Index: linux-2.6.30/drivers/video/Kconfig
+===================================================================
+--- linux-2.6.30.orig/drivers/video/Kconfig    2011-02-01 16:40:18.000000000 +0100
++++ linux-2.6.30/drivers/video/Kconfig 2011-02-01 16:40:30.145073648 +0100
+@@ -944,7 +944,7 @@
+ config FB_ATMEL
+       tristate "AT91/AT32 LCD Controller support"
+-      depends on FB && (ARCH_AT91SAM9261 || ARCH_AT91SAM9263 || ARCH_AT91SAM9RL || ARCH_AT91CAP9 || AVR32)
++      depends on FB && (ARCH_AT91SAM9261 || ARCH_AT91SAM9G10 || ARCH_AT91SAM9263 || ARCH_AT91SAM9RL || ARCH_AT91SAM9G45 || ARCH_AT91CAP9 || AVR32)
+       select FB_CFB_FILLRECT
+       select FB_CFB_COPYAREA
+       select FB_CFB_IMAGEBLIT
+@@ -960,7 +960,7 @@
+ config FB_ATMEL_STN
+       bool "Use a STN display with AT91/AT32 LCD Controller"
+-      depends on FB_ATMEL && MACH_AT91SAM9261EK
++      depends on FB_ATMEL && (MACH_AT91SAM9261EK || MACH_AT91SAM9G10EK)
+       default n
+       help
+         Say Y if you want to connect a STN LCD display to the AT91/AT32 LCD
+Index: linux-2.6.30/arch/arm/mach-at91/include/mach/at91sam9261.h
+===================================================================
+--- linux-2.6.30.orig/arch/arm/mach-at91/include/mach/at91sam9261.h    2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/arch/arm/mach-at91/include/mach/at91sam9261.h 2011-02-01 16:40:30.141043034 +0100
+@@ -95,6 +95,9 @@
+ #define AT91SAM9261_SRAM_BASE 0x00300000      /* Internal SRAM base address */
+ #define AT91SAM9261_SRAM_SIZE 0x00028000      /* Internal SRAM size (160Kb) */
++#define AT91SAM9G10_SRAM_BASE AT91SAM9261_SRAM_BASE   /* Internal SRAM base address */
++#define AT91SAM9G10_SRAM_SIZE 0x00004000      /* Internal SRAM size (16Kb) */
++
+ #define AT91SAM9261_ROM_BASE  0x00400000      /* Internal ROM base address */
+ #define AT91SAM9261_ROM_SIZE  SZ_32K          /* Internal ROM size (32Kb) */
+Index: linux-2.6.30/arch/arm/mach-at91/at91sam9261.c
+===================================================================
+--- linux-2.6.30.orig/arch/arm/mach-at91/at91sam9261.c 2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/arch/arm/mach-at91/at91sam9261.c      2011-02-01 16:40:30.145073648 +0100
+@@ -16,6 +16,7 @@
+ #include <asm/irq.h>
+ #include <asm/mach/arch.h>
+ #include <asm/mach/map.h>
++#include <mach/cpu.h>
+ #include <mach/at91sam9261.h>
+ #include <mach/at91_pmc.h>
+ #include <mach/at91_rstc.h>
+@@ -30,7 +31,11 @@
+               .pfn            = __phys_to_pfn(AT91_BASE_SYS),
+               .length         = SZ_16K,
+               .type           = MT_DEVICE,
+-      }, {
++      },
++};
++
++static struct map_desc at91sam9261_sram_desc[] __initdata = {
++      {
+               .virtual        = AT91_IO_VIRT_BASE - AT91SAM9261_SRAM_SIZE,
+               .pfn            = __phys_to_pfn(AT91SAM9261_SRAM_BASE),
+               .length         = AT91SAM9261_SRAM_SIZE,
+@@ -38,6 +43,15 @@
+       },
+ };
++static struct map_desc at91sam9g10_sram_desc[] __initdata = {
++      {
++              .virtual        = AT91_IO_VIRT_BASE - AT91SAM9G10_SRAM_SIZE,
++              .pfn            = __phys_to_pfn(AT91SAM9G10_SRAM_BASE),
++              .length         = AT91SAM9G10_SRAM_SIZE,
++              .type           = MT_DEVICE,
++      },
++};
++
+ /* --------------------------------------------------------------------
+  *  Clocks
+  * -------------------------------------------------------------------- */
+@@ -263,6 +277,12 @@
+       /* Map peripherals */
+       iotable_init(at91sam9261_io_desc, ARRAY_SIZE(at91sam9261_io_desc));
++      if (cpu_is_at91sam9g10())
++              iotable_init(at91sam9g10_sram_desc, ARRAY_SIZE(at91sam9g10_sram_desc));
++      else
++              iotable_init(at91sam9261_sram_desc, ARRAY_SIZE(at91sam9261_sram_desc));
++
++
+       at91_arch_reset = at91sam9261_reset;
+       pm_power_off = at91sam9261_poweroff;
+       at91_extern_irq = (1 << AT91SAM9261_ID_IRQ0) | (1 << AT91SAM9261_ID_IRQ1)
+Index: linux-2.6.30/arch/arm/mach-at91/pm.c
+===================================================================
+--- linux-2.6.30.orig/arch/arm/mach-at91/pm.c  2011-02-01 16:40:18.000000000 +0100
++++ linux-2.6.30/arch/arm/mach-at91/pm.c       2011-02-01 16:40:30.165043750 +0100
+@@ -40,9 +40,11 @@
+ #define sdram_selfrefresh_enable()    at91_sys_write(AT91_SDRAMC_SRR, 1)
+ #define sdram_selfrefresh_disable()   do {} while (0)
+-#elif defined(CONFIG_ARCH_AT91CAP9)
++#elif defined(CONFIG_ARCH_AT91CAP9) || defined(CONFIG_ARCH_AT91SAM9G45)
+ #include <mach/at91cap9_ddrsdr.h>
+-
++#if defined(CONFIG_ARCH_AT91SAM9G45)
++#define AT91_DDRSDRC  AT91_DDRSDRC1
++#endif
+ static u32 saved_lpr;
+ static inline void sdram_selfrefresh_enable(void)
+@@ -202,7 +204,8 @@
+                       pr_err("AT91: PM - Suspend-to-RAM with USB still active\n");
+                       return 0;
+               }
+-      } else if (cpu_is_at91sam9260() || cpu_is_at91sam9261() || cpu_is_at91sam9263() || cpu_is_at91sam9g20()) {
++      } else if (cpu_is_at91sam9260() || cpu_is_at91sam9261() || cpu_is_at91sam9263()
++                      || cpu_is_at91sam9g20() || cpu_is_at91sam9g10()) {
+               if ((scsr & (AT91SAM926x_PMC_UHP | AT91SAM926x_PMC_UDP)) != 0) {
+                       pr_err("AT91: PM - Suspend-to-RAM with USB still active\n");
+                       return 0;
+Index: linux-2.6.30/drivers/video/atmel_lcdfb.c
+===================================================================
+--- linux-2.6.30.orig/drivers/video/atmel_lcdfb.c      2011-02-01 16:40:18.000000000 +0100
++++ linux-2.6.30/drivers/video/atmel_lcdfb.c   2011-02-01 16:40:30.165043750 +0100
+@@ -182,7 +182,8 @@
+ {
+       unsigned long value;
+-      if (!(cpu_is_at91sam9261() || cpu_is_at32ap7000()))
++      if (!(cpu_is_at91sam9261() || cpu_is_at91sam9g10()
++              || cpu_is_at32ap7000()))
+               return xres;
+       value = xres;
+@@ -480,6 +481,7 @@
+       unsigned long value;
+       unsigned long clk_value_khz;
+       unsigned long bits_per_line;
++      unsigned long pix_factor = 2;
+       might_sleep();
+@@ -512,20 +514,24 @@
+       /* Now, the LCDC core... */
+       /* Set pixel clock */
++      if (cpu_is_at91sam9g45() && !cpu_is_at91sam9g45es())
++              pix_factor = 1;
++
+       clk_value_khz = clk_get_rate(sinfo->lcdc_clk) / 1000;
+       value = DIV_ROUND_UP(clk_value_khz, PICOS2KHZ(info->var.pixclock));
+-      if (value < 2) {
++      if (value < pix_factor) {
+               dev_notice(info->device, "Bypassing pixel clock divider\n");
+               lcdc_writel(sinfo, ATMEL_LCDC_LCDCON1, ATMEL_LCDC_BYPASS);
+       } else {
+-              value = (value / 2) - 1;
++              value = (value / pix_factor) - 1;
+               dev_dbg(info->device, "  * programming CLKVAL = 0x%08lx\n",
+                               value);
+               lcdc_writel(sinfo, ATMEL_LCDC_LCDCON1,
+                               value << ATMEL_LCDC_CLKVAL_OFFSET);
+-              info->var.pixclock = KHZ2PICOS(clk_value_khz / (2 * (value + 1)));
++              info->var.pixclock =
++                      KHZ2PICOS(clk_value_khz / (pix_factor * (value + 1)));
+               dev_dbg(info->device, "  updated pixclk:     %lu KHz\n",
+                                       PICOS2KHZ(info->var.pixclock));
+       }
+@@ -821,7 +827,8 @@
+       info->fix = atmel_lcdfb_fix;
+       /* Enable LCDC Clocks */
+-      if (cpu_is_at91sam9261() || cpu_is_at32ap7000()) {
++      if (cpu_is_at91sam9261() || cpu_is_at91sam9g10()
++       || cpu_is_at32ap7000()) {
+               sinfo->bus_clk = clk_get(dev, "hck1");
+               if (IS_ERR(sinfo->bus_clk)) {
+                       ret = PTR_ERR(sinfo->bus_clk);
+Index: linux-2.6.30/drivers/video/backlight/Kconfig
+===================================================================
+--- linux-2.6.30.orig/drivers/video/backlight/Kconfig  2011-02-01 16:40:18.000000000 +0100
++++ linux-2.6.30/drivers/video/backlight/Kconfig       2011-02-01 16:40:30.149044200 +0100
+@@ -110,7 +110,7 @@
+ config BACKLIGHT_ATMEL_LCDC
+       bool "Atmel LCDC Contrast-as-Backlight control"
+       depends on BACKLIGHT_CLASS_DEVICE && FB_ATMEL
+-      default y if MACH_SAM9261EK || MACH_SAM9263EK
++      default y if MACH_SAM9261EK || MACH_SAM9G10EK || MACH_SAM9263EK
+       help
+         This provides a backlight control internal to the Atmel LCDC
+         driver.  If the LCD "contrast control" on your board is wired
+Index: linux-2.6.30/drivers/usb/Kconfig
+===================================================================
+--- linux-2.6.30.orig/drivers/usb/Kconfig      2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/drivers/usb/Kconfig   2011-02-01 16:40:30.149044200 +0100
+@@ -57,6 +57,7 @@
+       default y if PPC_83xx
+       default y if SOC_AU1200
+       default y if ARCH_IXP4XX
++      default y if ARCH_AT91SAM9G45
+       default PCI
+ # ARM SA1111 chips have a non-PCI based "OHCI-compatible" USB host interface.
+Index: linux-2.6.30/drivers/usb/host/ehci-atmel.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.30/drivers/usb/host/ehci-atmel.c 2011-02-01 16:40:30.149044200 +0100
+@@ -0,0 +1,230 @@
++/*
++ * Driver for EHCI UHP on Atmel chips
++ *
++ *  Copyright (C) 2009 Atmel Corporation,
++ *                     Nicolas Ferre <nicolas.ferre@atmel.com>
++ *
++ *  Based on various ehci-*.c drivers
++ *
++ * 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/clk.h>
++#include <linux/platform_device.h>
++
++/* interface and function clocks */
++static struct clk *iclk, *fclk;
++static int clocked;
++
++/*-------------------------------------------------------------------------*/
++
++static void atmel_start_clock(void)
++{
++      clk_enable(iclk);
++      clk_enable(fclk);
++      clocked = 1;
++}
++
++static void atmel_stop_clock(void)
++{
++      clk_disable(fclk);
++      clk_disable(iclk);
++      clocked = 0;
++}
++
++static void atmel_start_ehci(struct platform_device *pdev)
++{
++      dev_dbg(&pdev->dev, "start\n");
++      atmel_start_clock();
++}
++
++static void atmel_stop_ehci(struct platform_device *pdev)
++{
++      dev_dbg(&pdev->dev, "stop\n");
++      atmel_stop_clock();
++}
++
++/*-------------------------------------------------------------------------*/
++
++static int ehci_atmel_setup(struct usb_hcd *hcd)
++{
++      struct ehci_hcd *ehci = hcd_to_ehci(hcd);
++      int retval = 0;
++
++      /* registers start at offset 0x0 */
++      ehci->caps = hcd->regs;
++      ehci->regs = hcd->regs +
++              HC_LENGTH(ehci_readl(ehci, &ehci->caps->hc_capbase));
++      dbg_hcs_params(ehci, "reset");
++      dbg_hcc_params(ehci, "reset");
++
++      /* cache this readonly data; minimize chip reads */
++      ehci->hcs_params = ehci_readl(ehci, &ehci->caps->hcs_params);
++
++      retval = ehci_halt(ehci);
++      if (retval)
++              return retval;
++
++      /* data structure init */
++      retval = ehci_init(hcd);
++      if (retval)
++              return retval;
++
++      ehci->sbrn = 0x20;
++
++      ehci_reset(ehci);
++      ehci_port_power(ehci, 0);
++
++      return retval;
++}
++
++static const struct hc_driver ehci_atmel_hc_driver = {
++      .description            = hcd_name,
++      .product_desc           = "Atmel EHCI UHP HS",
++      .hcd_priv_size          = sizeof(struct ehci_hcd),
++
++      /* generic hardware linkage */
++      .irq                    = ehci_irq,
++      .flags                  = HCD_MEMORY | HCD_USB2,
++
++      /* basic lifecycle operations */
++      .reset                  = ehci_atmel_setup,
++      .start                  = ehci_run,
++      .stop                   = ehci_stop,
++      .shutdown               = ehci_shutdown,
++
++      /* managing i/o requests and associated device resources */
++      .urb_enqueue            = ehci_urb_enqueue,
++      .urb_dequeue            = ehci_urb_dequeue,
++      .endpoint_disable       = ehci_endpoint_disable,
++
++      /* scheduling support */
++      .get_frame_number       = ehci_get_frame,
++
++      /* root hub support */
++      .hub_status_data        = ehci_hub_status_data,
++      .hub_control            = ehci_hub_control,
++      .bus_suspend            = ehci_bus_suspend,
++      .bus_resume             = ehci_bus_resume,
++      .relinquish_port        = ehci_relinquish_port,
++      .port_handed_over       = ehci_port_handed_over,
++};
++
++static int __init ehci_atmel_drv_probe(struct platform_device *pdev)
++{
++      struct usb_hcd *hcd;
++      const struct hc_driver *driver = &ehci_atmel_hc_driver;
++      struct resource *res;
++      int irq;
++      int retval;
++
++      if (usb_disabled())
++              return -ENODEV;
++
++      pr_debug("Initializing Atmel-SoC USB Host Controller\n");
++
++      irq = platform_get_irq(pdev, 0);
++      if (irq <= 0) {
++              dev_err(&pdev->dev,
++                      "Found HC with no IRQ. Check %s setup!\n",
++                      dev_name(&pdev->dev));
++              retval = -ENODEV;
++              goto fail_create_hcd;
++      }
++
++      hcd = usb_create_hcd(driver, &pdev->dev, dev_name(&pdev->dev));
++      if (!hcd) {
++              retval = -ENOMEM;
++              goto fail_create_hcd;
++      }
++
++      res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
++      if (!res) {
++              dev_err(&pdev->dev,
++                      "Found HC with no register addr. Check %s setup!\n",
++                      dev_name(&pdev->dev));
++              retval = -ENODEV;
++              goto fail_request_resource;
++      }
++      hcd->rsrc_start = res->start;
++      hcd->rsrc_len = res->end - res->start + 1;
++
++      if (!request_mem_region(hcd->rsrc_start, hcd->rsrc_len,
++                              driver->description)) {
++              dev_dbg(&pdev->dev, "controller already in use\n");
++              retval = -EBUSY;
++              goto fail_request_resource;
++      }
++
++      hcd->regs = ioremap_nocache(hcd->rsrc_start, hcd->rsrc_len);
++      if (hcd->regs == NULL) {
++              dev_dbg(&pdev->dev, "error mapping memory\n");
++              retval = -EFAULT;
++              goto fail_ioremap;
++      }
++
++      iclk = clk_get(&pdev->dev, "ehci_clk");
++      if (IS_ERR(iclk)) {
++              dev_err(&pdev->dev, "Error getting interface clock\n");
++              retval = -ENOENT;
++              goto fail_get_iclk;
++      }
++      fclk = clk_get(&pdev->dev, "uhpck");
++      if (IS_ERR(fclk)) {
++              dev_err(&pdev->dev, "Error getting function clock\n");
++              retval = -ENOENT;
++              goto fail_get_fclk;
++      }
++
++      atmel_start_ehci(pdev);
++
++      retval = usb_add_hcd(hcd, irq, IRQF_SHARED);
++      if (retval)
++              goto fail_add_hcd;
++
++      return retval;
++
++fail_add_hcd:
++      atmel_stop_ehci(pdev);
++      clk_put(fclk);
++fail_get_fclk:
++      clk_put(iclk);
++fail_get_iclk:
++      iounmap(hcd->regs);
++fail_ioremap:
++      release_mem_region(hcd->rsrc_start, hcd->rsrc_len);
++fail_request_resource:
++      usb_put_hcd(hcd);
++fail_create_hcd:
++      dev_err(&pdev->dev, "init %s fail, %d\n",
++              dev_name(&pdev->dev), retval);
++
++      return retval;
++}
++
++static int __exit ehci_atmel_drv_remove(struct platform_device *pdev)
++{
++      struct usb_hcd *hcd = platform_get_drvdata(pdev);
++
++      ehci_shutdown(hcd);
++      usb_remove_hcd(hcd);
++      iounmap(hcd->regs);
++      release_mem_region(hcd->rsrc_start, hcd->rsrc_len);
++      usb_put_hcd(hcd);
++
++      atmel_stop_ehci(pdev);
++      clk_put(fclk);
++      clk_put(iclk);
++      fclk = iclk = NULL;
++
++      return 0;
++}
++
++static struct platform_driver ehci_atmel_driver = {
++      .probe          = ehci_atmel_drv_probe,
++      .remove         = __exit_p(ehci_atmel_drv_remove),
++      .shutdown       = usb_hcd_platform_shutdown,
++      .driver.name    = "atmel-ehci",
++};
+Index: linux-2.6.30/drivers/usb/host/ehci-hcd.c
+===================================================================
+--- linux-2.6.30.orig/drivers/usb/host/ehci-hcd.c      2011-02-01 16:39:20.000000000 +0100
++++ linux-2.6.30/drivers/usb/host/ehci-hcd.c   2011-02-01 16:40:30.149044200 +0100
+@@ -1075,6 +1075,11 @@
+ #define       PLATFORM_DRIVER         ixp4xx_ehci_driver
+ #endif
++#ifdef CONFIG_ARCH_AT91
++#include "ehci-atmel.c"
++#define       PLATFORM_DRIVER         ehci_atmel_driver
++#endif
++
+ #if !defined(PCI_DRIVER) && !defined(PLATFORM_DRIVER) && \
+     !defined(PS3_SYSTEM_BUS_DRIVER) && !defined(OF_PLATFORM_DRIVER)
+ #error "missing bus glue for ehci-hcd"
+Index: linux-2.6.30/drivers/usb/gadget/Kconfig
+===================================================================
+--- linux-2.6.30.orig/drivers/usb/gadget/Kconfig       2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/drivers/usb/gadget/Kconfig    2011-02-01 16:40:30.149044200 +0100
+@@ -124,7 +124,7 @@
+ config USB_GADGET_AT91
+       boolean "Atmel AT91 USB Device Port"
+-      depends on ARCH_AT91 && !ARCH_AT91SAM9RL && !ARCH_AT91CAP9
++      depends on ARCH_AT91 && !ARCH_AT91SAM9RL && !ARCH_AT91CAP9 && !ARCH_AT91SAM9G45
+       select USB_GADGET_SELECTED
+       help
+          Many Atmel AT91 processors (such as the AT91RM2000) have a
+@@ -143,7 +143,7 @@
+ config USB_GADGET_ATMEL_USBA
+       boolean "Atmel USBA"
+       select USB_GADGET_DUALSPEED
+-      depends on AVR32 || ARCH_AT91CAP9 || ARCH_AT91SAM9RL
++      depends on AVR32 || ARCH_AT91CAP9 || ARCH_AT91SAM9RL || ARCH_AT91SAM9G45
+       help
+         USBA is the integrated high-speed USB Device controller on
+         the AT32AP700x, some AT91SAM9 and AT91CAP9 processors from Atmel.
+Index: linux-2.6.30/drivers/usb/host/ohci-at91.c
+===================================================================
+--- linux-2.6.30.orig/drivers/usb/host/ohci-at91.c     2011-02-01 16:40:18.000000000 +0100
++++ linux-2.6.30/drivers/usb/host/ohci-at91.c  2011-02-01 16:40:30.149044200 +0100
+@@ -35,7 +35,7 @@
+ static void at91_start_clock(void)
+ {
+-      if (cpu_is_at91sam9261())
++      if (cpu_is_at91sam9261() || cpu_is_at91sam9g10())
+               clk_enable(hclk);
+       clk_enable(iclk);
+       clk_enable(fclk);
+@@ -46,7 +46,7 @@
+ {
+       clk_disable(fclk);
+       clk_disable(iclk);
+-      if (cpu_is_at91sam9261())
++      if (cpu_is_at91sam9261() || cpu_is_at91sam9g10())
+               clk_disable(hclk);
+       clocked = 0;
+ }
+@@ -142,20 +142,20 @@
+       iclk = clk_get(&pdev->dev, "ohci_clk");
+       fclk = clk_get(&pdev->dev, "uhpck");
+-      if (cpu_is_at91sam9261())
++      if (cpu_is_at91sam9261() || cpu_is_at91sam9g10())
+               hclk = clk_get(&pdev->dev, "hck0");
+       at91_start_hc(pdev);
+       ohci_hcd_init(hcd_to_ohci(hcd));
+-      retval = usb_add_hcd(hcd, pdev->resource[1].start, IRQF_DISABLED);
++      retval = usb_add_hcd(hcd, pdev->resource[1].start, IRQF_SHARED);
+       if (retval == 0)
+               return retval;
+       /* Error handling */
+       at91_stop_hc(pdev);
+-      if (cpu_is_at91sam9261())
++      if (cpu_is_at91sam9261() || cpu_is_at91sam9g10())
+               clk_put(hclk);
+       clk_put(fclk);
+       clk_put(iclk);
+@@ -192,7 +192,7 @@
+       release_mem_region(hcd->rsrc_start, hcd->rsrc_len);
+       usb_put_hcd(hcd);
+-      if (cpu_is_at91sam9261())
++      if (cpu_is_at91sam9261() || cpu_is_at91sam9g10())
+               clk_put(hclk);
+       clk_put(fclk);
+       clk_put(iclk);
+Index: linux-2.6.30/drivers/usb/gadget/at91_udc.c
+===================================================================
+--- linux-2.6.30.orig/drivers/usb/gadget/at91_udc.c    2011-02-01 16:40:18.000000000 +0100
++++ linux-2.6.30/drivers/usb/gadget/at91_udc.c 2011-02-01 16:40:30.149044200 +0100
+@@ -892,7 +892,7 @@
+                       txvc |= AT91_UDP_TXVC_PUON;
+                       at91_udp_write(udc, AT91_UDP_TXVC, txvc);
+-              } else if (cpu_is_at91sam9261()) {
++              } else if (cpu_is_at91sam9261() || cpu_is_at91sam9g10()) {
+                       u32     usbpucr;
+                       usbpucr = at91_sys_read(AT91_MATRIX_USBPUCR);
+@@ -910,7 +910,7 @@
+                       txvc &= ~AT91_UDP_TXVC_PUON;
+                       at91_udp_write(udc, AT91_UDP_TXVC, txvc);
+-              } else if (cpu_is_at91sam9261()) {
++              } else if (cpu_is_at91sam9261() || cpu_is_at91sam9g10()) {
+                       u32     usbpucr;
+                       usbpucr = at91_sys_read(AT91_MATRIX_USBPUCR);
+@@ -1692,7 +1692,7 @@
+               udc->ep[3].maxpacket = 64;
+               udc->ep[4].maxpacket = 512;
+               udc->ep[5].maxpacket = 512;
+-      } else if (cpu_is_at91sam9261()) {
++      } else if (cpu_is_at91sam9261() || cpu_is_at91sam9g10()) {
+               udc->ep[3].maxpacket = 64;
+       } else if (cpu_is_at91sam9263()) {
+               udc->ep[0].maxpacket = 64;
+Index: linux-2.6.30/arch/arm/mach-at91/include/mach/at_hdmac.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.30/arch/arm/mach-at91/include/mach/at_hdmac.h    2011-02-01 16:40:30.152108635 +0100
+@@ -0,0 +1,102 @@
++/*
++ * Header file for the Atmel AHB DMA Controller driver
++ *
++ * Copyright (C) 2008 Atmel 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.
++ */
++#ifndef AT_HDMAC_H
++#define AT_HDMAC_H
++
++#include <linux/dmaengine.h>
++
++/**
++ * struct at_dma_platform_data - Controller configuration parameters
++ * @nr_channels: Number of channels supported by hardware (max 8)
++ * @cap_mask: dma_capability flags supported by the platform
++ */
++struct at_dma_platform_data {
++      unsigned int    nr_channels;
++      dma_cap_mask_t  cap_mask;
++};
++
++/**
++ * enum at_dma_slave_width - DMA slave register access width.
++ * @AT_DMA_SLAVE_WIDTH_8BIT: Do 8-bit slave register accesses
++ * @AT_DMA_SLAVE_WIDTH_16BIT: Do 16-bit slave register accesses
++ * @AT_DMA_SLAVE_WIDTH_32BIT: Do 32-bit slave register accesses
++ */
++enum at_dma_slave_width {
++      AT_DMA_SLAVE_WIDTH_8BIT = 0,
++      AT_DMA_SLAVE_WIDTH_16BIT,
++      AT_DMA_SLAVE_WIDTH_32BIT,
++};
++
++/**
++ * struct at_dma_slave - Controller-specific information about a slave
++ * @dma_dev: required DMA master device
++ * @tx_reg: physical address of data register used for
++ *    memory-to-peripheral transfers
++ * @rx_reg: physical address of data register used for
++ *    peripheral-to-memory transfers
++ * @reg_width: peripheral register width
++ * @cfg: Platform-specific initializer for the CFG register
++ * @ctrla: Platform-specific initializer for the CTRLA register
++ */
++struct at_dma_slave {
++      struct device           *dma_dev;
++      dma_addr_t              tx_reg;
++      dma_addr_t              rx_reg;
++      enum at_dma_slave_width reg_width;
++      u32                     cfg;
++      u32                     ctrla;
++};
++
++
++/* Platform-configurable bits in CFG */
++#define       ATC_SRC_PER(h)          (0xFU & (h))    /* Channel src rq associated with periph handshaking ifc h */
++#define       ATC_DST_PER(h)          ((0xFU & (h)) <<  4)    /* Channel dst rq associated with periph handshaking ifc h */
++#define       ATC_SRC_REP             (0x1 <<  8)     /* Source Replay Mod */
++#define       ATC_SRC_H2SEL           (0x1 <<  9)     /* Source Handshaking Mod */
++#define               ATC_SRC_H2SEL_SW        (0x0 <<  9)
++#define               ATC_SRC_H2SEL_HW        (0x1 <<  9)
++#define       ATC_DST_REP             (0x1 << 12)     /* Destination Replay Mod */
++#define       ATC_DST_H2SEL           (0x1 << 13)     /* Destination Handshaking Mod */
++#define               ATC_DST_H2SEL_SW        (0x0 << 13)
++#define               ATC_DST_H2SEL_HW        (0x1 << 13)
++#define       ATC_SOD                 (0x1 << 16)     /* Stop On Done */
++#define       ATC_LOCK_IF             (0x1 << 20)     /* Interface Lock */
++#define       ATC_LOCK_B              (0x1 << 21)     /* AHB Bus Lock */
++#define       ATC_LOCK_IF_L           (0x1 << 22)     /* Master Interface Arbiter Lock */
++#define               ATC_LOCK_IF_L_CHUNK     (0x0 << 22)
++#define               ATC_LOCK_IF_L_BUFFER    (0x1 << 22)
++#define       ATC_AHB_PROT_MASK       (0x7 << 24)     /* AHB Protection */
++#define       ATC_FIFOCFG_MASK        (0x3 << 28)     /* FIFO Request Configuration */
++#define               ATC_FIFOCFG_LARGESTBURST        (0x0 << 28)
++#define               ATC_FIFOCFG_HALFFIFO            (0x1 << 28)
++#define               ATC_FIFOCFG_ENOUGHSPACE         (0x2 << 28)
++
++/* Platform-configurable bits in CTRLA */
++#define       ATC_SCSIZE_MASK         (0x7 << 16)     /* Source Chunk Transfer Size */
++#define               ATC_SCSIZE_1            (0x0 << 16)
++#define               ATC_SCSIZE_4            (0x1 << 16)
++#define               ATC_SCSIZE_8            (0x2 << 16)
++#define               ATC_SCSIZE_16           (0x3 << 16)
++#define               ATC_SCSIZE_32           (0x4 << 16)
++#define               ATC_SCSIZE_64           (0x5 << 16)
++#define               ATC_SCSIZE_128          (0x6 << 16)
++#define               ATC_SCSIZE_256          (0x7 << 16)
++#define       ATC_DCSIZE_MASK         (0x7 << 20)     /* Destination Chunk Transfer Size */
++#define               ATC_DCSIZE_1            (0x0 << 20)
++#define               ATC_DCSIZE_4            (0x1 << 20)
++#define               ATC_DCSIZE_8            (0x2 << 20)
++#define               ATC_DCSIZE_16           (0x3 << 20)
++#define               ATC_DCSIZE_32           (0x4 << 20)
++#define               ATC_DCSIZE_64           (0x5 << 20)
++#define               ATC_DCSIZE_128          (0x6 << 20)
++#define               ATC_DCSIZE_256          (0x7 << 20)
++
++#endif /* AT_HDMAC_H */
+Index: linux-2.6.30/drivers/dma/Kconfig
+===================================================================
+--- linux-2.6.30.orig/drivers/dma/Kconfig      2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/drivers/dma/Kconfig   2011-02-01 16:40:30.152108635 +0100
+@@ -46,6 +46,14 @@
+         Support the Synopsys DesignWare AHB DMA controller.  This
+         can be integrated in chips such as the Atmel AT32ap7000.
++config AT_HDMAC
++      tristate "Atmel AHB DMA support"
++      depends on ARCH_AT91SAM9RL || ARCH_AT91SAM9G45
++      select DMA_ENGINE
++      help
++        Support the Atmel AHB DMA controller.  This can be integrated in
++        chips such as the Atmel AT91SAM9RL.
++
+ config FSL_DMA
+       tristate "Freescale Elo and Elo Plus DMA support"
+       depends on FSL_SOC
+Index: linux-2.6.30/drivers/dma/Makefile
+===================================================================
+--- linux-2.6.30.orig/drivers/dma/Makefile     2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/drivers/dma/Makefile  2011-02-01 16:40:30.152108635 +0100
+@@ -7,4 +7,5 @@
+ obj-$(CONFIG_FSL_DMA) += fsldma.o
+ obj-$(CONFIG_MV_XOR) += mv_xor.o
+ obj-$(CONFIG_DW_DMAC) += dw_dmac.o
++obj-$(CONFIG_AT_HDMAC) += at_hdmac.o
+ obj-$(CONFIG_MX3_IPU) += ipu/
+Index: linux-2.6.30/drivers/dma/at_hdmac.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.30/drivers/dma/at_hdmac.c        2011-02-01 16:40:30.161007816 +0100
+@@ -0,0 +1,1214 @@
++/*
++ * Driver for the Atmel AHB DMA Controller (aka HDMA or DMAC on AT91 systems)
++ *
++ * Copyright (C) 2008 Atmel 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 supports the Atmel AHB DMA Controller,
++ *
++ * The driver has currently been tested with the Atmel AT91SAM9RL
++ * and AT91SAM9G45 series.
++ */
++
++#include <linux/clk.h>
++#include <linux/dmaengine.h>
++#include <linux/dma-mapping.h>
++#include <linux/dmapool.h>
++#include <linux/interrupt.h>
++#include <linux/module.h>
++#include <linux/platform_device.h>
++
++#include "at_hdmac_regs.h"
++
++/*
++ * Glossary
++ * --------
++ *
++ * at_hdmac           : Name of the ATmel AHB DMA Controller
++ * at_dma_ / atdma    : ATmel DMA controller entity related
++ * atc_       / atchan        : ATmel DMA Channel entity related
++ */
++
++#define       ATC_DEFAULT_CFG         (ATC_FIFOCFG_HALFFIFO)
++#define       ATC_DEFAULT_CTRLA       (0)
++#define       ATC_DEFAULT_CTRLB       (ATC_SIF(0)     \
++                              |ATC_DIF(1))
++
++/*
++ * Initial number of descriptors to allocate for each channel. This could
++ * be increased during dma usage.
++ */
++static unsigned int init_nr_desc_per_channel = 64;
++module_param(init_nr_desc_per_channel, uint, 0644);
++MODULE_PARM_DESC(init_nr_desc_per_channel,
++               "initial descriptors per channel (default: 64)");
++
++
++/* prototypes */
++static dma_cookie_t atc_tx_submit(struct dma_async_tx_descriptor *tx);
++
++
++/*----------------------------------------------------------------------*/
++
++static struct at_desc *atc_first_active(struct at_dma_chan *atchan)
++{
++      return list_first_entry(&atchan->active_list,
++                              struct at_desc, desc_node);
++}
++
++static struct at_desc *atc_first_queued(struct at_dma_chan *atchan)
++{
++      return list_first_entry(&atchan->queue,
++                              struct at_desc, desc_node);
++}
++
++/**
++ * atc_alloc_descriptor - allocate and return an initilized descriptor
++ * @chan: the channel to allocate descriptors for
++ * @gfp_flags: GFP allocation flags
++ *
++ * Note: The ack-bit is positioned in the descriptor flag at creation time
++ *       to make initial allocation more convenient. This bit will be cleared
++ *       and control will be given to client at usage time (during
++ *       preparation functions).
++ */
++static struct at_desc *atc_alloc_descriptor(struct dma_chan *chan,
++                                          gfp_t gfp_flags)
++{
++      struct at_desc  *desc = NULL;
++      struct at_dma   *atdma = to_at_dma(chan->device);
++      dma_addr_t phys;
++
++      desc = dma_pool_alloc(atdma->dma_desc_pool, gfp_flags, &phys);
++      if (desc) {
++              memset(desc, 0, sizeof(struct at_desc));
++              dma_async_tx_descriptor_init(&desc->txd, chan);
++              /* txd.flags will be overwritten in prep functions */
++              desc->txd.flags = DMA_CTRL_ACK;
++              desc->txd.tx_submit = atc_tx_submit;
++              desc->txd.phys = phys;
++      }
++
++      return desc;
++}
++
++/**
++ * atc_desc_get - get a unsused descriptor from free_list
++ * @atchan: channel we want a new descriptor for
++ */
++static struct at_desc *atc_desc_get(struct at_dma_chan *atchan)
++{
++      struct at_desc *desc, *_desc;
++      struct at_desc *ret = NULL;
++      unsigned int i = 0;
++      LIST_HEAD(tmp_list);
++
++      spin_lock_bh(&atchan->lock);
++      list_for_each_entry_safe(desc, _desc, &atchan->free_list, desc_node) {
++              i++;
++              if (async_tx_test_ack(&desc->txd)) {
++                      list_del(&desc->desc_node);
++                      ret = desc;
++                      break;
++              }
++              dev_dbg(chan2dev(&atchan->chan_common),
++                              "desc %p not ACKed\n", desc);
++      }
++      spin_unlock_bh(&atchan->lock);
++      dev_vdbg(chan2dev(&atchan->chan_common),
++              "scanned %u descriptors on freelist\n", i);
++
++      /* no more descriptor available in initial pool: create one more */
++      if (!ret) {
++              ret = atc_alloc_descriptor(&atchan->chan_common, GFP_ATOMIC);
++              if (ret) {
++                      spin_lock_bh(&atchan->lock);
++                      atchan->descs_allocated++;
++                      spin_unlock_bh(&atchan->lock);
++              } else {
++                      dev_err(chan2dev(&atchan->chan_common),
++                                      "not enough descriptors available\n");
++              }
++      }
++
++      return ret;
++}
++
++/**
++ * atc_desc_put - move a descriptor, including any children, to the free list
++ * @atchan: channel we work on
++ * @desc: descriptor, at the head of a chain, to move to free list
++ */
++static void atc_desc_put(struct at_dma_chan *atchan, struct at_desc *desc)
++{
++      if (desc) {
++              struct at_desc *child;
++
++              spin_lock_bh(&atchan->lock);
++              list_for_each_entry(child, &desc->txd.tx_list, desc_node)
++                      dev_vdbg(chan2dev(&atchan->chan_common),
++                                      "moving child desc %p to freelist\n",
++                                      child);
++              list_splice_init(&desc->txd.tx_list, &atchan->free_list);
++              dev_vdbg(chan2dev(&atchan->chan_common),
++                       "moving desc %p to freelist\n", desc);
++              list_add(&desc->desc_node, &atchan->free_list);
++              spin_unlock_bh(&atchan->lock);
++      }
++}
++
++/**
++ * atc_assign_cookie - compute and assign new cookie
++ * @atchan: channel we work on
++ * @desc: descriptor to asign cookie for
++ *
++ * Called with atchan->lock held and bh disabled
++ */
++static dma_cookie_t
++atc_assign_cookie(struct at_dma_chan *atchan, struct at_desc *desc)
++{
++      dma_cookie_t cookie = atchan->chan_common.cookie;
++
++      if (++cookie < 0)
++              cookie = 1;
++
++      atchan->chan_common.cookie = cookie;
++      desc->txd.cookie = cookie;
++
++      return cookie;
++}
++
++/**
++ * atc_dostart - starts the DMA engine for real
++ * @atchan: the channel we want to start
++ * @first: first descriptor in the list we want to begin with
++ *
++ * Called with atchan->lock held and bh disabled
++ */
++static void atc_dostart(struct at_dma_chan *atchan, struct at_desc *first)
++{
++      struct at_dma   *atdma = to_at_dma(atchan->chan_common.device);
++
++      /* ASSERT:  channel is idle */
++      if (atc_chan_is_enabled(atchan)) {
++              dev_err(chan2dev(&atchan->chan_common),
++                      "BUG: Attempted to start non-idle channel\n");
++              dev_err(chan2dev(&atchan->chan_common),
++                      "  channel: s0x%x d0x%x ctrl0x%x:0x%x l0x%x\n",
++                      channel_readl(atchan, SADDR),
++                      channel_readl(atchan, DADDR),
++                      channel_readl(atchan, CTRLA),
++                      channel_readl(atchan, CTRLB),
++                      channel_readl(atchan, DSCR));
++
++              /* The tasklet will hopefully advance the queue... */
++              return;
++      }
++
++      vdbg_dump_regs(atchan);
++
++      /* clear any pending interrupt */
++      while (dma_readl(atdma, EBCISR))
++              cpu_relax();
++
++      channel_writel(atchan, SADDR, 0);
++      channel_writel(atchan, DADDR, 0);
++      channel_writel(atchan, CTRLA, 0);
++      channel_writel(atchan, CTRLB, 0);
++      channel_writel(atchan, DSCR, first->txd.phys);
++      dma_writel(atdma, CHER, atchan->mask);
++
++      vdbg_dump_regs(atchan);
++}
++
++/**
++ * atc_chain_complete - finish work for one transaction chain
++ * @atchan: channel we work on
++ * @desc: descriptor at the head of the chain we want do complete
++ *
++ * Called with atchan->lock held and bh disabled */
++static void
++atc_chain_complete(struct at_dma_chan *atchan, struct at_desc *desc)
++{
++      dma_async_tx_callback           callback;
++      void                            *param;
++      struct dma_async_tx_descriptor  *txd = &desc->txd;
++
++      dev_vdbg(chan2dev(&atchan->chan_common),
++              "descriptor %u complete\n", txd->cookie);
++
++      atchan->completed_cookie = txd->cookie;
++      callback = txd->callback;
++      param = txd->callback_param;
++
++      /* move children to free_list */
++      list_splice_init(&txd->tx_list, &atchan->free_list);
++      /* move myself to free_list */
++      list_move(&desc->desc_node, &atchan->free_list);
++
++      /* unmap dma addresses */
++      if (!atchan->chan_common.private) {
++              struct device *parent = chan2parent(&atchan->chan_common);
++              if (!(txd->flags & DMA_COMPL_SKIP_DEST_UNMAP)) {
++                      if (txd->flags & DMA_COMPL_DEST_UNMAP_SINGLE)
++                              dma_unmap_single(parent,
++                                              desc->lli.daddr,
++                                              desc->len, DMA_FROM_DEVICE);
++                      else
++                              dma_unmap_page(parent,
++                                              desc->lli.daddr,
++                                              desc->len, DMA_FROM_DEVICE);
++              }
++              if (!(txd->flags & DMA_COMPL_SKIP_SRC_UNMAP)) {
++                      if (txd->flags & DMA_COMPL_SRC_UNMAP_SINGLE)
++                              dma_unmap_single(parent,
++                                              desc->lli.saddr,
++                                              desc->len, DMA_TO_DEVICE);
++                      else
++                              dma_unmap_page(parent,
++                                              desc->lli.saddr,
++                                              desc->len, DMA_TO_DEVICE);
++              }
++      }
++
++      /*
++       * The API requires that no submissions are done from a
++       * callback, so we don't need to drop the lock here
++       */
++      if (callback)
++              callback(param);
++
++      dma_run_dependencies(txd);
++}
++
++/**
++ * atc_complete_all - finish work for all transactions
++ * @atchan: channel to complete transactions for
++ *
++ * Eventually submit queued descriptors if any
++ *
++ * Assume channel is idle while calling this function
++ * Called with atchan->lock held and bh disabled
++ */
++static void atc_complete_all(struct at_dma_chan *atchan)
++{
++      struct at_desc *desc, *_desc;
++      LIST_HEAD(list);
++
++      dev_vdbg(chan2dev(&atchan->chan_common), "complete all\n");
++
++      BUG_ON(atc_chan_is_enabled(atchan));
++
++      /*
++       * Submit queued descriptors ASAP, i.e. before we go through
++       * the completed ones.
++       */
++      if (!list_empty(&atchan->queue))
++              atc_dostart(atchan, atc_first_queued(atchan));
++      /* empty active_list now it is completed */
++      list_splice_init(&atchan->active_list, &list);
++      /* empty queue list by moving descriptors (if any) to active_list */
++      list_splice_init(&atchan->queue, &atchan->active_list);
++
++      list_for_each_entry_safe(desc, _desc, &list, desc_node)
++              atc_chain_complete(atchan, desc);
++}
++
++/**
++ * atc_cleanup_descriptors - cleanup up finished descriptors in active_list
++ * @atchan: channel to be cleaned up
++ *
++ * Called with atchan->lock held and bh disabled
++ */
++static void atc_cleanup_descriptors(struct at_dma_chan *atchan)
++{
++      struct at_desc  *desc, *_desc;
++      struct at_desc  *child;
++
++      dev_vdbg(chan2dev(&atchan->chan_common), "cleanup descriptors\n");
++
++      list_for_each_entry_safe(desc, _desc, &atchan->active_list, desc_node) {
++              if (!(desc->lli.ctrla & ATC_DONE))
++                      /* This one is currently in progress */
++                      return;
++
++              list_for_each_entry(child, &desc->txd.tx_list, desc_node)
++                      if (!(child->lli.ctrla & ATC_DONE))
++                              /* Currently in progress */
++                              return;
++
++              /*
++               * No descriptors so far seem to be in progress, i.e.
++               * this chain must be done.
++               */
++              atc_chain_complete(atchan, desc);
++      }
++}
++
++/**
++ * atc_advance_work - at the end of a transaction, move forward
++ * @atchan: channel where the transaction ended
++ *
++ * Called with atchan->lock held and bh disabled
++ */
++static void atc_advance_work(struct at_dma_chan *atchan)
++{
++      dev_vdbg(chan2dev(&atchan->chan_common), "advance_work\n");
++
++      if (list_empty(&atchan->active_list) ||
++          list_is_singular(&atchan->active_list)) {
++              atc_complete_all(atchan);
++      } else {
++              atc_chain_complete(atchan, atc_first_active(atchan));
++              /* advance work */
++              atc_dostart(atchan, atc_first_active(atchan));
++      }
++}
++
++
++/**
++ * atc_handle_error - handle errors reported by DMA controller
++ * @atchan: channel where error occurs
++ *
++ * Called with atchan->lock held and bh disabled
++ */
++static void atc_handle_error(struct at_dma_chan *atchan)
++{
++      struct at_desc *bad_desc;
++      struct at_desc *child;
++
++      /*
++       * The descriptor currently at the head of the active list is
++       * broked. Since we don't have any way to report errors, we'll
++       * just have to scream loudly and try to carry on.
++       */
++      bad_desc = atc_first_active(atchan);
++      list_del_init(&bad_desc->desc_node);
++
++      /* As we are stopped, take advantage to push queued descriptors
++       * in active_list */
++      list_splice_init(&atchan->queue, atchan->active_list.prev);
++
++      /* Try to restart the controller */
++      if (!list_empty(&atchan->active_list))
++              atc_dostart(atchan, atc_first_active(atchan));
++
++      /*
++       * KERN_CRITICAL may seem harsh, but since this only happens
++       * when someone submits a bad physical address in a
++       * descriptor, we should consider ourselves lucky that the
++       * controller flagged an error instead of scribbling over
++       * random memory locations.
++       */
++      dev_crit(chan2dev(&atchan->chan_common),
++                      "Bad descriptor submitted for DMA!\n");
++      dev_crit(chan2dev(&atchan->chan_common),
++                      "  cookie: %d\n", bad_desc->txd.cookie);
++      atc_dump_lli(atchan, &bad_desc->lli);
++      list_for_each_entry(child, &bad_desc->txd.tx_list, desc_node)
++              atc_dump_lli(atchan, &child->lli);
++
++      /* Pretend the descriptor completed successfully */
++      atc_chain_complete(atchan, bad_desc);
++}
++
++
++/*--  IRQ & Tasklet  ---------------------------------------------------*/
++
++static void atc_tasklet(unsigned long data)
++{
++      struct at_dma_chan *atchan = (struct at_dma_chan *)data;
++
++      /* Channel cannot be enabled here */
++      if (atc_chan_is_enabled(atchan)) {
++              dev_err(chan2dev(&atchan->chan_common),
++                      "BUG: channel enabled in tasklet\n");
++              return;
++      }
++
++      spin_lock(&atchan->lock);
++      if (test_and_clear_bit(0, &atchan->error_status))
++              atc_handle_error(atchan);
++      else
++              atc_advance_work(atchan);
++
++      spin_unlock(&atchan->lock);
++}
++
++static irqreturn_t at_dma_interrupt(int irq, void *dev_id)
++{
++      struct at_dma           *atdma = (struct at_dma *)dev_id;
++      struct at_dma_chan      *atchan;
++      int                     i;
++      u32                     status, pending, imr;
++      int                     ret = IRQ_NONE;
++
++      do {
++              imr = dma_readl(atdma, EBCIMR);
++              status = dma_readl(atdma, EBCISR);
++              pending = status & imr;
++
++              if (!pending)
++                      break;
++
++              dev_vdbg(atdma->dma_common.dev,
++                      "interrupt: status = 0x%08x, 0x%08x, 0x%08x\n",
++                       status, imr, pending);
++
++              for (i = 0; i < atdma->dma_common.chancnt; i++) {
++                      atchan = &atdma->chan[i];
++                      if (pending & (AT_DMA_CBTC(i) | AT_DMA_ERR(i))) {
++                              if (pending & AT_DMA_ERR(i)) {
++                                      /* Disable channel on AHB error */
++                                      dma_writel(atdma, CHDR, atchan->mask);
++                                      /* Give information to tasklet */
++                                      set_bit(0, &atchan->error_status);
++                              }
++                              tasklet_schedule(&atchan->tasklet);
++                              ret = IRQ_HANDLED;
++                      }
++              }
++
++      } while (pending);
++
++      return ret;
++}
++
++
++/*--  DMA Engine API  --------------------------------------------------*/
++
++/**
++ * atc_tx_submit - set the prepared descriptor(s) to be executed by the engine
++ * @desc: descriptor at the head of the transaction chain
++ *
++ * Queue chain if DMA engine is working already
++ *
++ * Cookie increment and adding to active_list or queue must be atomic
++ */
++static dma_cookie_t atc_tx_submit(struct dma_async_tx_descriptor *tx)
++{
++      struct at_desc          *desc = txd_to_at_desc(tx);
++      struct at_dma_chan      *atchan = to_at_dma_chan(tx->chan);
++      dma_cookie_t            cookie;
++
++      spin_lock_bh(&atchan->lock);
++      cookie = atc_assign_cookie(atchan, desc);
++
++      if (list_empty(&atchan->active_list)) {
++              dev_vdbg(chan2dev(tx->chan), "tx_submit: started %u\n",
++                              desc->txd.cookie);
++              atc_dostart(atchan, desc);
++              list_add_tail(&desc->desc_node, &atchan->active_list);
++      } else {
++              dev_vdbg(chan2dev(tx->chan), "tx_submit: queued %u\n",
++                              desc->txd.cookie);
++              list_add_tail(&desc->desc_node, &atchan->queue);
++      }
++
++      spin_unlock_bh(&atchan->lock);
++
++      return cookie;
++}
++
++/**
++ * atc_prep_dma_memcpy - prepare a memcpy operation
++ * @chan: the channel to prepare operation on
++ * @dest: operation virtual destination address
++ * @src: operation virtual source address
++ * @len: operation length
++ * @flags: tx descriptor status flags
++ */
++static struct dma_async_tx_descriptor *
++atc_prep_dma_memcpy(struct dma_chan *chan, dma_addr_t dest, dma_addr_t src,
++              size_t len, unsigned long flags)
++{
++      struct at_dma_chan      *atchan = to_at_dma_chan(chan);
++      struct at_desc          *desc = NULL;
++      struct at_desc          *first = NULL;
++      struct at_desc          *prev = NULL;
++      size_t                  xfer_count;
++      size_t                  offset;
++      unsigned int            src_width;
++      unsigned int            dst_width;
++      u32                     ctrla;
++      u32                     ctrlb;
++
++      dev_vdbg(chan2dev(chan), "prep_dma_memcpy: d0x%x s0x%x l0x%zx f0x%lx\n",
++                      dest, src, len, flags);
++
++      if (unlikely(!len)) {
++              dev_dbg(chan2dev(chan), "prep_dma_memcpy: length is zero!\n");
++              return NULL;
++      }
++
++      ctrla =   ATC_DEFAULT_CTRLA;
++      ctrlb =   ATC_DEFAULT_CTRLB
++              | ATC_SRC_ADDR_MODE_INCR
++              | ATC_DST_ADDR_MODE_INCR
++              | ATC_FC_MEM2MEM;
++
++      /*
++       * We can be a lot more clever here, but this should take care
++       * of the most common optimization.
++       */
++      if (!((src | dest  | len) & 3)) {
++              ctrla |= ATC_SRC_WIDTH_WORD | ATC_DST_WIDTH_WORD;
++              src_width = dst_width = 2;
++      } else if (!((src | dest | len) & 1)) {
++              ctrla |= ATC_SRC_WIDTH_HALFWORD | ATC_DST_WIDTH_HALFWORD;
++              src_width = dst_width = 1;
++      } else {
++              ctrla |= ATC_SRC_WIDTH_BYTE | ATC_DST_WIDTH_BYTE;
++              src_width = dst_width = 0;
++      }
++
++      for (offset = 0; offset < len; offset += xfer_count << src_width) {
++              xfer_count = min_t(size_t, (len - offset) >> src_width,
++                              ATC_BTSIZE_MAX);
++
++              desc = atc_desc_get(atchan);
++              if (!desc)
++                      goto err_desc_get;
++
++              desc->lli.saddr = src + offset;
++              desc->lli.daddr = dest + offset;
++              desc->lli.ctrla = ctrla | xfer_count;
++              desc->lli.ctrlb = ctrlb;
++
++              desc->txd.cookie = 0;
++              async_tx_ack(&desc->txd);
++
++              if (!first) {
++                      first = desc;
++              } else {
++                      /* inform the HW lli about chaining */
++                      prev->lli.dscr = desc->txd.phys;
++                      /* insert the link descriptor to the LD ring */
++                      list_add_tail(&desc->desc_node,
++                                      &first->txd.tx_list);
++              }
++              prev = desc;
++      }
++
++      /* First descriptor of the chain embedds additional information */
++      first->txd.cookie = -EBUSY;
++      first->len = len;
++
++      /* set end-of-link to the last link descriptor of list*/
++      set_desc_eol(desc);
++
++      desc->txd.flags = flags; /* client is in control of this ack */
++
++      return &first->txd;
++
++err_desc_get:
++      atc_desc_put(atchan, first);
++      return NULL;
++}
++
++
++/**
++ * atc_prep_slave_sg - prepare descriptors for a DMA_SLAVE transaction
++ * @chan: DMA channel
++ * @sgl: scatterlist to transfer to/from
++ * @sg_len: number of entries in @scatterlist
++ * @direction: DMA direction
++ * @flags: tx descriptor status flags
++ */
++static struct dma_async_tx_descriptor *
++atc_prep_slave_sg(struct dma_chan *chan, struct scatterlist *sgl,
++              unsigned int sg_len, enum dma_data_direction direction,
++              unsigned long flags)
++{
++      struct at_dma_chan      *atchan = to_at_dma_chan(chan);
++      struct at_dma_slave     *atslave = chan->private;
++      struct at_desc          *first = NULL;
++      struct at_desc          *prev = NULL;
++      u32                     ctrla;
++      u32                     ctrlb;
++      dma_addr_t              reg;
++      unsigned int            reg_width;
++      unsigned int            mem_width;
++      unsigned int            i;
++      struct scatterlist      *sg;
++      size_t                  total_len = 0;
++
++      dev_vdbg(chan2dev(chan), "prep_slave_sg: %s f0x%lx\n",
++                      direction == DMA_TO_DEVICE ? "TO DEVICE" : "FROM DEVICE",
++                      flags);
++
++      if (unlikely(!atslave || !sg_len)) {
++              dev_dbg(chan2dev(chan), "prep_dma_memcpy: length is zero!\n");
++              return NULL;
++      }
++
++      reg_width = atslave->reg_width;
++
++      ctrla = ATC_DEFAULT_CTRLA | atslave->ctrla;
++      ctrlb = ATC_DEFAULT_CTRLB | ATC_IEN;
++
++      switch (direction) {
++      case DMA_TO_DEVICE:
++              ctrla |=  ATC_DST_WIDTH(reg_width);
++              ctrlb |=  ATC_DST_ADDR_MODE_FIXED
++                      | ATC_SRC_ADDR_MODE_INCR
++                      | ATC_FC_MEM2PER;
++              reg = atslave->tx_reg;
++              for_each_sg(sgl, sg, sg_len, i) {
++                      struct at_desc  *desc;
++                      u32             len;
++                      u32             mem;
++
++                      desc = atc_desc_get(atchan);
++                      if (!desc)
++                              goto err_desc_get;
++
++                      mem = sg_phys(sg);
++                      len = sg_dma_len(sg);
++                      mem_width = 2;
++                      if (unlikely(mem & 3 || len & 3))
++                              mem_width = 0;
++
++                      desc->lli.saddr = mem;
++                      desc->lli.daddr = reg;
++                      desc->lli.ctrla = ctrla
++                                      | ATC_SRC_WIDTH(mem_width)
++                                      | len >> mem_width;
++                      desc->lli.ctrlb = ctrlb;
++
++                      if (!first) {
++                              first = desc;
++                      } else {
++                              /* inform the HW lli about chaining */
++                              prev->lli.dscr = desc->txd.phys;
++                              /* insert the link descriptor to the LD ring */
++                              list_add_tail(&desc->desc_node,
++                                              &first->txd.tx_list);
++                      }
++                      prev = desc;
++                      total_len += len;
++              }
++              break;
++      case DMA_FROM_DEVICE:
++              ctrla |=  ATC_SRC_WIDTH(reg_width);
++              ctrlb |=  ATC_DST_ADDR_MODE_INCR
++                      | ATC_SRC_ADDR_MODE_FIXED
++                      | ATC_FC_PER2MEM;
++
++              reg = atslave->rx_reg;
++              for_each_sg(sgl, sg, sg_len, i) {
++                      struct at_desc  *desc;
++                      u32             len;
++                      u32             mem;
++
++                      desc = atc_desc_get(atchan);
++                      if (!desc)
++                              goto err_desc_get;
++
++                      mem = sg_phys(sg);
++                      len = sg_dma_len(sg);
++                      mem_width = 2;
++                      if (unlikely(mem & 3 || len & 3))
++                              mem_width = 0;
++
++                      desc->lli.saddr = reg;
++                      desc->lli.daddr = mem;
++                      desc->lli.ctrla = ctrla
++                                      | ATC_DST_WIDTH(mem_width)
++                                      | len >> mem_width;
++                      desc->lli.ctrlb = ctrlb;
++
++                      if (!first) {
++                              first = desc;
++                      } else {
++                              /* inform the HW lli about chaining */
++                              prev->lli.dscr = desc->txd.phys;
++                              /* insert the link descriptor to the LD ring */
++                              list_add_tail(&desc->desc_node,
++                                              &first->txd.tx_list);
++                      }
++                      prev = desc;
++                      total_len += len;
++              }
++              break;
++      default:
++              return NULL;
++      }
++
++      /* set end-of-link to the last link descriptor of list*/
++      set_desc_eol(prev);
++
++      /* First descriptor of the chain embedds additional information */
++      first->txd.cookie = -EBUSY;
++      first->len = total_len;
++
++      /* last link descriptor of list is responsible of flags */
++      prev->txd.flags = flags; /* client is in control of this ack */
++
++      return &first->txd;
++
++err_desc_get:
++      dev_err(chan2dev(chan), "not enough descriptors available\n");
++      atc_desc_put(atchan, first);
++      return NULL;
++}
++
++static void atc_terminate_all(struct dma_chan *chan)
++{
++      struct at_dma_chan      *atchan = to_at_dma_chan(chan);
++      struct at_dma           *atdma = to_at_dma(chan->device);
++      struct at_desc          *desc, *_desc;
++      LIST_HEAD(list);
++
++      /*
++       * This is only called when something went wrong elsewhere, so
++       * we don't really care about the data. Just disable the
++       * channel. We still have to poll the channel enable bit due
++       * to AHB/HSB limitations.
++       */
++      spin_lock_bh(&atchan->lock);
++
++      dma_writel(atdma, CHDR, atchan->mask);
++
++      /* confirm that this channel is disabled */
++      while (dma_readl(atdma, CHSR) & atchan->mask)
++              cpu_relax();
++
++      /* active_list entries will end up before queued entries */
++      list_splice_init(&atchan->queue, &list);
++      list_splice_init(&atchan->active_list, &list);
++
++      spin_unlock_bh(&atchan->lock);
++
++      /* Flush all pending and queued descriptors */
++      list_for_each_entry_safe(desc, _desc, &list, desc_node)
++              atc_chain_complete(atchan, desc);
++}
++
++/**
++ * atc_is_tx_complete - poll for transaction completion
++ * @chan: DMA channel
++ * @cookie: transaction identifier to check status of
++ * @done: if not %NULL, updated with last completed transaction
++ * @used: if not %NULL, updated with last used transaction
++ *
++ * If @done and @used are passed in, upon return they reflect the driver
++ * internal state and can be used with dma_async_is_complete() to check
++ * the status of multiple cookies without re-checking hardware state.
++ */
++static enum dma_status
++atc_is_tx_complete(struct dma_chan *chan,
++              dma_cookie_t cookie,
++              dma_cookie_t *done, dma_cookie_t *used)
++{
++      struct at_dma_chan      *atchan = to_at_dma_chan(chan);
++      dma_cookie_t            last_used;
++      dma_cookie_t            last_complete;
++      enum dma_status         ret;
++
++      dev_vdbg(chan2dev(chan), "is_tx_complete: %d (d%d, u%d)\n",
++                      cookie, done ? *done : 0, used ? *used : 0);
++
++      spin_lock_bh(atchan->lock);
++
++      last_complete = atchan->completed_cookie;
++      last_used = chan->cookie;
++
++      ret = dma_async_is_complete(cookie, last_complete, last_used);
++      if (ret != DMA_SUCCESS) {
++              atc_cleanup_descriptors(atchan);
++
++              last_complete = atchan->completed_cookie;
++              last_used = chan->cookie;
++
++              ret = dma_async_is_complete(cookie, last_complete, last_used);
++      }
++
++      spin_unlock_bh(atchan->lock);
++
++      if (done)
++              *done = last_complete;
++      if (used)
++              *used = last_used;
++
++      return ret;
++}
++
++/**
++ * atc_issue_pending - try to finish work
++ * @chan: target DMA channel
++ */
++static void atc_issue_pending(struct dma_chan *chan)
++{
++      struct at_dma_chan      *atchan = to_at_dma_chan(chan);
++
++      dev_vdbg(chan2dev(chan), "issue_pending\n");
++
++      if (!atc_chan_is_enabled(atchan)) {
++              spin_lock_bh(&atchan->lock);
++              atc_advance_work(atchan);
++              spin_unlock_bh(&atchan->lock);
++      }
++}
++
++/**
++ * atc_alloc_chan_resources - allocate resources for DMA channel
++ * @chan: allocate descriptor resources for this channel
++ * @client: current client requesting the channel be ready for requests
++ *
++ * return - the number of allocated descriptors
++ */
++static int atc_alloc_chan_resources(struct dma_chan *chan)
++{
++      struct at_dma_chan      *atchan = to_at_dma_chan(chan);
++      struct at_dma           *atdma = to_at_dma(chan->device);
++      struct at_desc          *desc;
++      struct at_dma_slave     *atslave;
++      int                     i;
++      u32                     cfg;
++      LIST_HEAD(tmp_list);
++
++      dev_vdbg(chan2dev(chan), "alloc_chan_resources\n");
++
++      /* ASSERT:  channel is idle */
++      if (atc_chan_is_enabled(atchan)) {
++              dev_dbg(chan2dev(chan), "DMA channel not idle ?\n");
++              return -EIO;
++      }
++
++      cfg = ATC_DEFAULT_CFG;
++
++      atslave = chan->private;
++      if (atslave) {
++              /*
++               * We need controller-specific data to set up slave
++               * transfers.
++               */
++              BUG_ON(!atslave->dma_dev || atslave->dma_dev != atdma->dma_common.dev);
++
++              /* if cfg configuration specified take it instad of default */
++              if (atslave->cfg)
++                      cfg = atslave->cfg;
++      }
++
++      /* have we already been set up?
++       * reconfigure channel but no need to reallocate descriptors */
++      if (!list_empty(&atchan->free_list))
++              return atchan->descs_allocated;
++
++      /* Allocate initial pool of descriptors */
++      for (i = 0; i < init_nr_desc_per_channel; i++) {
++              desc = atc_alloc_descriptor(chan, GFP_KERNEL);
++              if (!desc) {
++                      dev_err(atdma->dma_common.dev,
++                              "Only %d initial descriptors\n", i);
++                      break;
++              }
++              list_add_tail(&desc->desc_node, &tmp_list);
++      }
++
++      spin_lock_bh(&atchan->lock);
++      atchan->descs_allocated = i;
++      list_splice(&tmp_list, &atchan->free_list);
++      atchan->completed_cookie = chan->cookie = 1;
++      spin_unlock_bh(&atchan->lock);
++
++      /* channel parameters */
++      channel_writel(atchan, CFG, cfg);
++
++      dev_dbg(chan2dev(chan),
++              "alloc_chan_resources: allocated %d descriptors\n",
++              atchan->descs_allocated);
++
++      return atchan->descs_allocated;
++}
++
++/**
++ * atc_free_chan_resources - free all channel resources
++ * @chan: DMA channel
++ */
++static void atc_free_chan_resources(struct dma_chan *chan)
++{
++      struct at_dma_chan      *atchan = to_at_dma_chan(chan);
++      struct at_dma           *atdma = to_at_dma(chan->device);
++      struct at_desc          *desc, *_desc;
++      LIST_HEAD(list);
++
++      dev_dbg(chan2dev(chan), "free_chan_resources: (descs allocated=%u)\n",
++              atchan->descs_allocated);
++
++      /* ASSERT:  channel is idle */
++      BUG_ON(!list_empty(&atchan->active_list));
++      BUG_ON(!list_empty(&atchan->queue));
++      BUG_ON(atc_chan_is_enabled(atchan));
++
++      list_for_each_entry_safe(desc, _desc, &atchan->free_list, desc_node) {
++              dev_vdbg(chan2dev(chan), "  freeing descriptor %p\n", desc);
++              list_del(&desc->desc_node);
++              /* free link descriptor */
++              dma_pool_free(atdma->dma_desc_pool, desc, desc->txd.phys);
++      }
++      list_splice_init(&atchan->free_list, &list);
++      atchan->descs_allocated = 0;
++
++      dev_vdbg(chan2dev(chan), "free_chan_resources: done\n");
++}
++
++
++/*--  Module Management  -----------------------------------------------*/
++
++/**
++ * at_dma_off - disable DMA controller
++ * @atdma: the Atmel HDAMC device
++ */
++static void at_dma_off(struct at_dma *atdma)
++{
++      dma_writel(atdma, EN, 0);
++
++      /* disable all interrupts */
++      dma_writel(atdma, EBCIDR, -1L);
++
++      /* confirm that all channels are disabled */
++      while (dma_readl(atdma, CHSR) & atdma->all_chan_mask)
++              cpu_relax();
++}
++
++static int __init at_dma_probe(struct platform_device *pdev)
++{
++      struct at_dma_platform_data *pdata;
++      struct resource         *io;
++      struct at_dma           *atdma;
++      size_t                  size;
++      int                     irq;
++      int                     err;
++      int                     i;
++
++      /* get DMA Controller parameters from platform */
++      pdata = pdev->dev.platform_data;
++      if (!pdata || pdata->nr_channels > AT_DMA_MAX_NR_CHANNELS)
++              return -EINVAL;
++
++      io = platform_get_resource(pdev, IORESOURCE_MEM, 0);
++      if (!io)
++              return -EINVAL;
++
++      irq = platform_get_irq(pdev, 0);
++      if (irq < 0)
++              return irq;
++
++      size = sizeof(struct at_dma);
++      size += pdata->nr_channels * sizeof(struct at_dma_chan);
++      atdma = kzalloc(size, GFP_KERNEL);
++      if (!atdma)
++              return -ENOMEM;
++
++      /* discover transaction capabilites from the platform data */
++      atdma->dma_common.cap_mask = pdata->cap_mask;
++      atdma->all_chan_mask = (1 << pdata->nr_channels) - 1;
++
++      size = io->end - io->start + 1;
++      if (!request_mem_region(io->start, size, pdev->dev.driver->name)) {
++              err = -EBUSY;
++              goto err_kfree;
++      }
++
++      atdma->regs = ioremap(io->start, size);
++      if (!atdma->regs) {
++              err = -ENOMEM;
++              goto err_release_r;
++      }
++
++      atdma->clk = clk_get(&pdev->dev, "dma_clk");
++      if (IS_ERR(atdma->clk)) {
++              err = PTR_ERR(atdma->clk);
++              goto err_clk;
++      }
++      clk_enable(atdma->clk);
++
++      /* force dma off, just in case */
++      at_dma_off(atdma);
++
++      err = request_irq(irq, at_dma_interrupt, 0, "at_hdmac", atdma);
++      if (err)
++              goto err_irq;
++
++      platform_set_drvdata(pdev, atdma);
++
++      /* create a pool of consistent memory blocks for hardware descriptors */
++      atdma->dma_desc_pool = dma_pool_create("at_hdmac_desc_pool",
++                      &pdev->dev, sizeof(struct at_desc),
++                      4 /* word alignment */, 0);
++      if (!atdma->dma_desc_pool) {
++              dev_err(&pdev->dev, "No memory for descriptors dma pool\n");
++              err = -ENOMEM;
++              goto err_pool_create;
++      }
++
++      /* clear any pending interrupt */
++      while (dma_readl(atdma, EBCISR))
++              cpu_relax();
++
++      /* initialize channels related values */
++      INIT_LIST_HEAD(&atdma->dma_common.channels);
++      for (i = 0; i < pdata->nr_channels; i++, atdma->dma_common.chancnt++) {
++              struct at_dma_chan      *atchan = &atdma->chan[i];
++
++              atchan->chan_common.device = &atdma->dma_common;
++              atchan->chan_common.cookie = atchan->completed_cookie = 1;
++              atchan->chan_common.chan_id = i;
++              list_add_tail(&atchan->chan_common.device_node,
++                              &atdma->dma_common.channels);
++
++              atchan->ch_regs = atdma->regs + ch_regs(i);
++              spin_lock_init(&atchan->lock);
++              atchan->mask = 1 << i;
++
++              INIT_LIST_HEAD(&atchan->active_list);
++              INIT_LIST_HEAD(&atchan->queue);
++              INIT_LIST_HEAD(&atchan->free_list);
++
++              tasklet_init(&atchan->tasklet, atc_tasklet,
++                              (unsigned long)atchan);
++              atc_enable_irq(atchan);
++      }
++
++      /* set base routines */
++      atdma->dma_common.device_alloc_chan_resources = atc_alloc_chan_resources;
++      atdma->dma_common.device_free_chan_resources = atc_free_chan_resources;
++      atdma->dma_common.device_is_tx_complete = atc_is_tx_complete;
++      atdma->dma_common.device_issue_pending = atc_issue_pending;
++      atdma->dma_common.dev = &pdev->dev;
++
++      /* set prep routines based on capability */
++      if (dma_has_cap(DMA_MEMCPY, atdma->dma_common.cap_mask))
++              atdma->dma_common.device_prep_dma_memcpy = atc_prep_dma_memcpy;
++
++      if (dma_has_cap(DMA_SLAVE, atdma->dma_common.cap_mask)) {
++              atdma->dma_common.device_prep_slave_sg = atc_prep_slave_sg;
++              atdma->dma_common.device_terminate_all = atc_terminate_all;
++      }
++
++      dma_writel(atdma, EN, AT_DMA_ENABLE);
++
++      dev_info(&pdev->dev, "Atmel AHB DMA Controller ( %s%s), %d channels\n",
++        dma_has_cap(DMA_MEMCPY, atdma->dma_common.cap_mask) ? "cpy " : "",
++        dma_has_cap(DMA_SLAVE, atdma->dma_common.cap_mask)  ? "slave " : "",
++        atdma->dma_common.chancnt);
++
++      dma_async_device_register(&atdma->dma_common);
++
++      return 0;
++
++err_pool_create:
++      platform_set_drvdata(pdev, NULL);
++      free_irq(platform_get_irq(pdev, 0), atdma);
++err_irq:
++      clk_disable(atdma->clk);
++      clk_put(atdma->clk);
++err_clk:
++      iounmap(atdma->regs);
++      atdma->regs = NULL;
++err_release_r:
++      release_mem_region(io->start, size);
++err_kfree:
++      kfree(atdma);
++      return err;
++}
++
++static int __exit at_dma_remove(struct platform_device *pdev)
++{
++      struct at_dma           *atdma = platform_get_drvdata(pdev);
++      struct dma_chan         *chan, *_chan;
++      struct resource         *io;
++
++      at_dma_off(atdma);
++      dma_async_device_unregister(&atdma->dma_common);
++
++      dma_pool_destroy(atdma->dma_desc_pool);
++      platform_set_drvdata(pdev, NULL);
++      free_irq(platform_get_irq(pdev, 0), atdma);
++
++      list_for_each_entry_safe(chan, _chan, &atdma->dma_common.channels,
++                      device_node) {
++              struct at_dma_chan      *atchan = to_at_dma_chan(chan);
++
++              /* Disable interrupts */
++              atc_disable_irq(atchan);
++              tasklet_disable(&atchan->tasklet);
++
++              tasklet_kill(&atchan->tasklet);
++              list_del(&chan->device_node);
++      }
++
++      clk_disable(atdma->clk);
++      clk_put(atdma->clk);
++
++      iounmap(atdma->regs);
++      atdma->regs = NULL;
++
++      io = platform_get_resource(pdev, IORESOURCE_MEM, 0);
++      release_mem_region(io->start, io->end - io->start + 1);
++
++      kfree(atdma);
++
++      return 0;
++}
++
++static void at_dma_shutdown(struct platform_device *pdev)
++{
++      struct at_dma   *atdma = platform_get_drvdata(pdev);
++
++      at_dma_off(platform_get_drvdata(pdev));
++      clk_disable(atdma->clk);
++}
++
++static int at_dma_suspend_late(struct platform_device *pdev, pm_message_t mesg)
++{
++      struct at_dma   *atdma = platform_get_drvdata(pdev);
++
++      at_dma_off(platform_get_drvdata(pdev));
++      clk_disable(atdma->clk);
++      return 0;
++}
++
++static int at_dma_resume_early(struct platform_device *pdev)
++{
++      struct at_dma   *atdma = platform_get_drvdata(pdev);
++
++      clk_enable(atdma->clk);
++      dma_writel(atdma, EN, AT_DMA_ENABLE);
++      return 0;
++
++}
++
++static struct platform_driver at_dma_driver = {
++      .remove         = __exit_p(at_dma_remove),
++      .shutdown       = at_dma_shutdown,
++      .suspend_late   = at_dma_suspend_late,
++      .resume_early   = at_dma_resume_early,
++      .driver = {
++              .name   = "at_hdmac",
++      },
++};
++
++static int __init at_dma_init(void)
++{
++      return platform_driver_probe(&at_dma_driver, at_dma_probe);
++}
++module_init(at_dma_init);
++
++static void __exit at_dma_exit(void)
++{
++      platform_driver_unregister(&at_dma_driver);
++}
++module_exit(at_dma_exit);
++
++MODULE_DESCRIPTION("Atmel AHB DMA Controller driver");
++MODULE_AUTHOR("Nicolas Ferre <nicolas.ferre@atmel.com>");
++MODULE_LICENSE("GPL");
++MODULE_ALIAS("platform:at_hdmac");
+Index: linux-2.6.30/drivers/dma/at_hdmac_regs.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.30/drivers/dma/at_hdmac_regs.h   2011-02-01 16:40:30.152108635 +0100
+@@ -0,0 +1,353 @@
++/*
++ * Header file for the Atmel AHB DMA Controller driver
++ *
++ * Copyright (C) 2008 Atmel 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.
++ */
++#ifndef AT_HDMAC_REGS_H
++#define       AT_HDMAC_REGS_H
++
++#include <mach/at_hdmac.h>
++
++#define       AT_DMA_MAX_NR_CHANNELS  8
++
++
++#define       AT_DMA_GCFG     0x00    /* Global Configuration Register */
++#define               AT_DMA_IF_BIGEND(i)     (0x1 << (i))    /* AHB-Lite Interface i in Big-endian mode */
++#define               AT_DMA_ARB_CFG  (0x1 << 4)      /* Arbiter mode. */
++#define                       AT_DMA_ARB_CFG_FIXED            (0x0 << 4)
++#define                       AT_DMA_ARB_CFG_ROUND_ROBIN      (0x1 << 4)
++
++#define       AT_DMA_EN       0x04    /* Controller Enable Register */
++#define               AT_DMA_ENABLE   (0x1 << 0)
++
++#define       AT_DMA_SREQ     0x08    /* Software Single Request Register */
++#define               AT_DMA_SSREQ(x) (0x1 << ((x) << 1))             /* Request a source single transfer on channel x */
++#define               AT_DMA_DSREQ(x) (0x1 << (1 + ((x) << 1)))       /* Request a destination single transfer on channel x */
++
++#define       AT_DMA_CREQ     0x0C    /* Software Chunk Transfer Request Register */
++#define               AT_DMA_SCREQ(x) (0x1 << ((x) << 1))             /* Request a source chunk transfer on channel x */
++#define               AT_DMA_DCREQ(x) (0x1 << (1 + ((x) << 1)))       /* Request a destination chunk transfer on channel x */
++
++#define       AT_DMA_LAST     0x10    /* Software Last Transfer Flag Register */
++#define               AT_DMA_SLAST(x) (0x1 << ((x) << 1))             /* This src rq is last tx of buffer on channel x */
++#define               AT_DMA_DLAST(x) (0x1 << (1 + ((x) << 1)))       /* This dst rq is last tx of buffer on channel x */
++
++#define       AT_DMA_SYNC     0x14    /* Request Synchronization Register */
++#define               AT_DMA_SYR(h)   (0x1 << (h))                    /* Synchronize handshake line h */
++
++/* Error, Chained Buffer transfer completed and Buffer transfer completed Interrupt registers */
++#define       AT_DMA_EBCIER   0x18    /* Enable register */
++#define       AT_DMA_EBCIDR   0x1C    /* Disable register */
++#define       AT_DMA_EBCIMR   0x20    /* Mask Register */
++#define       AT_DMA_EBCISR   0x24    /* Status Register */
++#define               AT_DMA_CBTC_OFFSET      8
++#define               AT_DMA_ERR_OFFSET       16
++#define               AT_DMA_BTC(x)   (0x1 << (x))
++#define               AT_DMA_CBTC(x)  (0x1 << (AT_DMA_CBTC_OFFSET + (x)))
++#define               AT_DMA_ERR(x)   (0x1 << (AT_DMA_ERR_OFFSET + (x)))
++
++#define       AT_DMA_CHER     0x28    /* Channel Handler Enable Register */
++#define               AT_DMA_ENA(x)   (0x1 << (x))
++#define               AT_DMA_SUSP(x)  (0x1 << ( 8 + (x)))
++#define               AT_DMA_KEEP(x)  (0x1 << (24 + (x)))
++
++#define       AT_DMA_CHDR     0x2C    /* Channel Handler Disable Register */
++#define               AT_DMA_DIS(x)   (0x1 << (x))
++#define               AT_DMA_RES(x)   (0x1 << ( 8 + (x)))
++
++#define       AT_DMA_CHSR     0x30    /* Channel Handler Status Register */
++#define               AT_DMA_EMPT(x)  (0x1 << (16 + (x)))
++#define               AT_DMA_STAL(x)  (0x1 << (24 + (x)))
++
++
++#define       AT_DMA_CH_REGS_BASE     0x3C    /* Channel registers base address */
++#define       ch_regs(x)      (AT_DMA_CH_REGS_BASE + (x) * 0x28) /* Channel x base addr */
++
++/* Hardware register offset for each channel */
++#define       ATC_SADDR_OFFSET        0x00    /* Source Address Register */
++#define       ATC_DADDR_OFFSET        0x04    /* Destination Address Register */
++#define       ATC_DSCR_OFFSET         0x08    /* Descriptor Address Register */
++#define       ATC_CTRLA_OFFSET        0x0C    /* Control A Register */
++#define       ATC_CTRLB_OFFSET        0x10    /* Control B Register */
++#define       ATC_CFG_OFFSET          0x14    /* Configuration Register */
++#define       ATC_SPIP_OFFSET         0x18    /* Src PIP Configuration Register */
++#define       ATC_DPIP_OFFSET         0x1C    /* Dst PIP Configuration Register */
++
++
++/* Bitfield definitions */
++
++/* Bitfields in DSCR */
++#define       ATC_DSCR_IF(i)          (0x3 & (i))     /* Dsc feched via AHB-Lite Interface i */
++
++/* Bitfields in CTRLA */
++#define       ATC_BTSIZE_MAX          0xFFFFUL        /* Maximum Buffer Transfer Size */
++#define       ATC_BTSIZE(x)           (ATC_BTSIZE_MAX & (x)) /* Buffer Transfer Size */
++/* Chunck Tranfer size definitions are in at_hdmac.h */
++#define       ATC_SRC_WIDTH_MASK      (0x3 << 24)     /* Source Single Transfer Size */
++#define               ATC_SRC_WIDTH(x)        ((x) << 24)
++#define               ATC_SRC_WIDTH_BYTE      (0x0 << 24)
++#define               ATC_SRC_WIDTH_HALFWORD  (0x1 << 24)
++#define               ATC_SRC_WIDTH_WORD      (0x2 << 24)
++#define       ATC_DST_WIDTH_MASK      (0x3 << 28)     /* Destination Single Transfer Size */
++#define               ATC_DST_WIDTH(x)        ((x) << 28)
++#define               ATC_DST_WIDTH_BYTE      (0x0 << 28)
++#define               ATC_DST_WIDTH_HALFWORD  (0x1 << 28)
++#define               ATC_DST_WIDTH_WORD      (0x2 << 28)
++#define       ATC_DONE                (0x1 << 31)     /* Tx Done (only written back in descriptor) */
++
++/* Bitfields in CTRLB */
++#define       ATC_SIF(i)              (0x3 & (i))     /* Src tx done via AHB-Lite Interface i */
++#define       ATC_DIF(i)              ((0x3 & (i)) <<  4)     /* Dst tx done via AHB-Lite Interface i */
++#define       ATC_SRC_PIP             (0x1 <<  8)     /* Source Picture-in-Picture enabled */
++#define       ATC_DST_PIP             (0x1 << 12)     /* Destination Picture-in-Picture enabled */
++#define       ATC_SRC_DSCR_DIS        (0x1 << 16)     /* Src Descriptor fetch disable */
++#define       ATC_DST_DSCR_DIS        (0x1 << 20)     /* Dst Descriptor fetch disable */
++#define       ATC_FC_MASK             (0x7 << 21)     /* Choose Flow Controller */
++#define               ATC_FC_MEM2MEM          (0x0 << 21)     /* Mem-to-Mem (DMA) */
++#define               ATC_FC_MEM2PER          (0x1 << 21)     /* Mem-to-Periph (DMA) */
++#define               ATC_FC_PER2MEM          (0x2 << 21)     /* Periph-to-Mem (DMA) */
++#define               ATC_FC_PER2PER          (0x3 << 21)     /* Periph-to-Periph (DMA) */
++#define               ATC_FC_PER2MEM_PER      (0x4 << 21)     /* Periph-to-Mem (Peripheral) */
++#define               ATC_FC_MEM2PER_PER      (0x5 << 21)     /* Mem-to-Periph (Peripheral) */
++#define               ATC_FC_PER2PER_SRCPER   (0x6 << 21)     /* Periph-to-Periph (Src Peripheral) */
++#define               ATC_FC_PER2PER_DSTPER   (0x7 << 21)     /* Periph-to-Periph (Dst Peripheral) */
++#define       ATC_SRC_ADDR_MODE_MASK  (0x3 << 24)
++#define               ATC_SRC_ADDR_MODE_INCR  (0x0 << 24)     /* Incrementing Mode */
++#define               ATC_SRC_ADDR_MODE_DECR  (0x1 << 24)     /* Decrementing Mode */
++#define               ATC_SRC_ADDR_MODE_FIXED (0x2 << 24)     /* Fixed Mode */
++#define       ATC_DST_ADDR_MODE_MASK  (0x3 << 28)
++#define               ATC_DST_ADDR_MODE_INCR  (0x0 << 28)     /* Incrementing Mode */
++#define               ATC_DST_ADDR_MODE_DECR  (0x1 << 28)     /* Decrementing Mode */
++#define               ATC_DST_ADDR_MODE_FIXED (0x2 << 28)     /* Fixed Mode */
++#define       ATC_IEN                 (0x1 << 30)     /* BTC interrupt enable (active low) */
++#define       ATC_AUTO                (0x1 << 31)     /* Auto multiple buffer tx enable */
++
++/* Bitfields in CFG */
++/* are in at_hdmac.h */
++
++/* Bitfields in SPIP */
++#define       ATC_SPIP_HOLE(x)        (0xFFFFU & (x))
++#define       ATC_SPIP_BOUNDARY(x)    ((0x3FF & (x)) << 16)
++
++/* Bitfields in DPIP */
++#define       ATC_DPIP_HOLE(x)        (0xFFFFU & (x))
++#define       ATC_DPIP_BOUNDARY(x)    ((0x3FF & (x)) << 16)
++
++
++/*--  descriptors  -----------------------------------------------------*/
++
++/* LLI == Linked List Item; aka DMA buffer descriptor */
++struct at_lli {
++      /* values that are not changed by hardware */
++      dma_addr_t      saddr;
++      dma_addr_t      daddr;
++      /* value that may get written back: */
++      u32             ctrla;
++      /* more values that are not changed by hardware */
++      u32             ctrlb;
++      dma_addr_t      dscr;   /* chain to next lli */
++};
++
++/**
++ * struct at_desc - software descriptor
++ * @at_lli: hardware lli structure
++ * @txd: support for the async_tx api
++ * @desc_node: node on the channed descriptors list
++ * @len: total transaction bytecount
++ */
++struct at_desc {
++      /* FIRST values the hardware uses */
++      struct at_lli                   lli;
++
++      /* THEN values for driver housekeeping */
++      struct dma_async_tx_descriptor  txd;
++      struct list_head                desc_node;
++      size_t                          len;
++};
++
++static inline struct at_desc *
++txd_to_at_desc(struct dma_async_tx_descriptor *txd)
++{
++      return container_of(txd, struct at_desc, txd);
++}
++
++
++/*--  Channels  --------------------------------------------------------*/
++
++/**
++ * struct at_dma_chan - internal representation of an Atmel HDMAC channel
++ * @chan_common: common dmaengine channel object members
++ * @device: parent device
++ * @ch_regs: memory mapped register base
++ * @mask: channel index in a mask
++ * @error_status: transmit error status information from irq handler
++ *                to tasklet (use atomic operations)
++ * @tasklet: bottom half to finish transaction work
++ * @lock: serializes enqueue/dequeue operations to descriptors lists
++ * @completed_cookie: identifier for the most recently completed operation
++ * @active_list: list of descriptors dmaengine is being running on
++ * @queue: list of descriptors ready to be submitted to engine
++ * @free_list: list of descriptors usable by the channel
++ * @descs_allocated: records the actual size of the descriptor pool
++ */
++struct at_dma_chan {
++      struct dma_chan         chan_common;
++      struct at_dma           *device;
++      void __iomem            *ch_regs;
++      u8                      mask;
++      unsigned long           error_status;
++      struct tasklet_struct   tasklet;
++
++      spinlock_t              lock;
++
++      /* these other elements are all protected by lock */
++      dma_cookie_t            completed_cookie;
++      struct list_head        active_list;
++      struct list_head        queue;
++      struct list_head        free_list;
++      unsigned int            descs_allocated;
++};
++
++#define       channel_readl(atchan, name) \
++      __raw_readl((atchan)->ch_regs + ATC_##name##_OFFSET)
++
++#define       channel_writel(atchan, name, val) \
++      __raw_writel((val), (atchan)->ch_regs + ATC_##name##_OFFSET)
++
++static inline struct at_dma_chan *to_at_dma_chan(struct dma_chan *dchan)
++{
++      return container_of(dchan, struct at_dma_chan, chan_common);
++}
++
++
++/*--  Controller  ------------------------------------------------------*/
++
++/**
++ * struct at_dma - internal representation of an Atmel HDMA Controller
++ * @chan_common: common dmaengine dma_device object members
++ * @ch_regs: memory mapped register base
++ * @clk: dma controller clock
++ * @all_chan_mask: all channels availlable in a mask
++ * @dma_desc_pool: base of DMA descriptor region (DMA address)
++ * @chan: channels table to store at_dma_chan structures
++ */
++struct at_dma {
++      struct dma_device       dma_common;
++      void __iomem            *regs;
++      struct clk              *clk;
++
++      u8                      all_chan_mask;
++
++      struct dma_pool         *dma_desc_pool;
++      /* AT THE END channels table */
++      struct at_dma_chan      chan[0];
++};
++
++#define       dma_readl(atdma, name) \
++      __raw_readl((atdma)->regs + AT_DMA_##name)
++#define       dma_writel(atdma, name, val) \
++      __raw_writel((val), (atdma)->regs + AT_DMA_##name)
++
++static inline struct at_dma *to_at_dma(struct dma_device *ddev)
++{
++      return container_of(ddev, struct at_dma, dma_common);
++}
++
++
++/*--  Helper functions  ------------------------------------------------*/
++
++static struct device *chan2dev(struct dma_chan *chan)
++{
++      return &chan->dev->device;
++}
++static struct device *chan2parent(struct dma_chan *chan)
++{
++      return chan->dev->device.parent;
++}
++
++#if defined(VERBOSE_DEBUG)
++static void vdbg_dump_regs(struct at_dma_chan *atchan)
++{
++      struct at_dma   *atdma = to_at_dma(atchan->chan_common.device);
++
++      dev_err(chan2dev(&atchan->chan_common),
++              "  channel %d : imr = 0x%x, chsr = 0x%x\n",
++              atchan->chan_common.chan_id,
++              dma_readl(atdma, EBCIMR),
++              dma_readl(atdma, CHSR));
++
++      dev_err(chan2dev(&atchan->chan_common),
++              "  channel: s0x%x d0x%x ctrl0x%x:0x%x cfg0x%x l0x%x\n",
++              channel_readl(atchan, SADDR),
++              channel_readl(atchan, DADDR),
++              channel_readl(atchan, CTRLA),
++              channel_readl(atchan, CTRLB),
++              channel_readl(atchan, CFG),
++              channel_readl(atchan, DSCR));
++}
++#else
++static void vdbg_dump_regs(struct at_dma_chan *atchan) {}
++#endif
++
++static void atc_dump_lli(struct at_dma_chan *atchan, struct at_lli *lli)
++{
++      dev_printk(KERN_CRIT, chan2dev(&atchan->chan_common),
++                      "  desc: s0x%x d0x%x ctrl0x%x:0x%x l0x%x\n",
++                      lli->saddr, lli->daddr,
++                      lli->ctrla, lli->ctrlb, lli->dscr);
++}
++
++
++static void atc_setup_irq(struct at_dma_chan *atchan, int on)
++{
++      struct at_dma   *atdma = to_at_dma(atchan->chan_common.device);
++      u32             ebci;
++
++      /* enable interrupts on buffer chain completion & error */
++      ebci =    AT_DMA_CBTC(atchan->chan_common.chan_id)
++              | AT_DMA_ERR(atchan->chan_common.chan_id);
++      if (on)
++              dma_writel(atdma, EBCIER, ebci);
++      else
++              dma_writel(atdma, EBCIDR, ebci);
++}
++
++static inline void atc_enable_irq(struct at_dma_chan *atchan)
++{
++      atc_setup_irq(atchan, 1);
++}
++
++static inline void atc_disable_irq(struct at_dma_chan *atchan)
++{
++      atc_setup_irq(atchan, 0);
++}
++
++
++/**
++ * atc_chan_is_enabled - test if given channel is enabled
++ * @atchan: channel we want to test status
++ */
++static inline int atc_chan_is_enabled(struct at_dma_chan *atchan)
++{
++      struct at_dma   *atdma = to_at_dma(atchan->chan_common.device);
++
++      return !!(dma_readl(atdma, CHSR) & atchan->mask);
++}
++
++
++/**
++ * set_desc_eol - set end-of-link to descriptor so it will end transfer
++ * @desc: descriptor, signle or at the end of a chain, to end chain on
++ */
++static void set_desc_eol(struct at_desc *desc)
++{
++      desc->lli.ctrlb |= ATC_SRC_DSCR_DIS | ATC_DST_DSCR_DIS;
++      desc->lli.dscr = 0;
++}
++
++#endif /* AT_HDMAC_REGS_H */
+Index: linux-2.6.30/arch/arm/mach-at91/at91sam9rl_devices.c
+===================================================================
+--- linux-2.6.30.orig/arch/arm/mach-at91/at91sam9rl_devices.c  2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/arch/arm/mach-at91/at91sam9rl_devices.c       2011-02-01 16:40:30.165043750 +0100
+@@ -21,11 +21,57 @@
+ #include <mach/at91sam9rl.h>
+ #include <mach/at91sam9rl_matrix.h>
+ #include <mach/at91sam9_smc.h>
++#include <mach/at_hdmac.h>
+ #include "generic.h"
+ /* --------------------------------------------------------------------
++ *  HDMAC - AHB DMA Controller
++ * -------------------------------------------------------------------- */
++
++#if defined(CONFIG_AT_HDMAC) || defined(CONFIG_AT_HDMAC_MODULE)
++static u64 hdmac_dmamask = DMA_BIT_MASK(32);
++
++static struct at_dma_platform_data atdma_pdata = {
++      .nr_channels    = 2,
++};
++
++static struct resource hdmac_resources[] = {
++      [0] = {
++              .start  = AT91_BASE_SYS + AT91_DMA,
++              .end    = AT91_BASE_SYS + AT91_DMA + SZ_512 - 1,
++              .flags  = IORESOURCE_MEM,
++      },
++      [2] = {
++              .start  = AT91SAM9RL_ID_DMA,
++              .end    = AT91SAM9RL_ID_DMA,
++              .flags  = IORESOURCE_IRQ,
++      },
++};
++
++static struct platform_device at_hdmac_device = {
++      .name           = "at_hdmac",
++      .id             = -1,
++      .dev            = {
++                              .dma_mask               = &hdmac_dmamask,
++                              .coherent_dma_mask      = DMA_BIT_MASK(32),
++                              .platform_data          = &atdma_pdata,
++      },
++      .resource       = hdmac_resources,
++      .num_resources  = ARRAY_SIZE(hdmac_resources),
++};
++
++void __init at91_add_device_hdmac(void)
++{
++      dma_cap_set(DMA_MEMCPY, atdma_pdata.cap_mask);
++      platform_device_register(&at_hdmac_device);
++}
++#else
++void __init at91_add_device_hdmac(void) {}
++#endif
++
++/* --------------------------------------------------------------------
+  *  USB HS Device (Gadget)
+  * -------------------------------------------------------------------- */
+@@ -398,6 +444,61 @@
+ /* --------------------------------------------------------------------
++ *  AC97
++ * -------------------------------------------------------------------- */
++
++#if defined(CONFIG_SND_ATMEL_AC97C) || defined(CONFIG_SND_ATMEL_AC97C_MODULE)
++static u64 ac97_dmamask = DMA_BIT_MASK(32);
++static struct ac97c_platform_data ac97_data;
++
++static struct resource ac97_resources[] = {
++      [0] = {
++              .start  = AT91SAM9RL_BASE_AC97C,
++              .end    = AT91SAM9RL_BASE_AC97C + SZ_16K - 1,
++              .flags  = IORESOURCE_MEM,
++      },
++      [1] = {
++              .start  = AT91SAM9RL_ID_AC97C,
++              .end    = AT91SAM9RL_ID_AC97C,
++              .flags  = IORESOURCE_IRQ,
++      },
++};
++
++static struct platform_device at91sam9rl_ac97_device = {
++      .name           = "atmel_ac97c",
++      .id             = 0,
++      .dev            = {
++                              .dma_mask               = &ac97_dmamask,
++                              .coherent_dma_mask      = DMA_BIT_MASK(32),
++                              .platform_data          = &ac97_data,
++      },
++      .resource       = ac97_resources,
++      .num_resources  = ARRAY_SIZE(ac97_resources),
++};
++
++void __init at91_add_device_ac97(struct ac97c_platform_data *data)
++{
++      if (!data)
++              return;
++
++      at91_set_A_periph(AT91_PIN_PD1, 0);     /* AC97FS */
++      at91_set_A_periph(AT91_PIN_PD2, 0);     /* AC97CK */
++      at91_set_A_periph(AT91_PIN_PD3, 0);     /* AC97TX */
++      at91_set_A_periph(AT91_PIN_PD4, 0);     /* AC97RX */
++
++      /* reset */
++      if (data->reset_pin)
++              at91_set_gpio_output(data->reset_pin, 0);
++
++      ac97_data = *data;
++      platform_device_register(&at91sam9rl_ac97_device);
++}
++#else
++void __init at91_add_device_ac97(struct ac97c_platform_data *data) {}
++#endif
++
++
++/* --------------------------------------------------------------------
+  *  LCD Controller
+  * -------------------------------------------------------------------- */
+@@ -521,6 +622,7 @@
+ #if defined(CONFIG_TOUCHSCREEN_ATMEL_TSADCC) || defined(CONFIG_TOUCHSCREEN_ATMEL_TSADCC_MODULE)
+ static u64 tsadcc_dmamask = DMA_BIT_MASK(32);
++static struct at91_tsadcc_data tsadcc_data;
+ static struct resource tsadcc_resources[] = {
+       [0] = {
+@@ -541,22 +643,27 @@
+       .dev            = {
+                               .dma_mask               = &tsadcc_dmamask,
+                               .coherent_dma_mask      = DMA_BIT_MASK(32),
++                              .platform_data          = &tsadcc_data,
+       },
+       .resource       = tsadcc_resources,
+       .num_resources  = ARRAY_SIZE(tsadcc_resources),
+ };
+-void __init at91_add_device_tsadcc(void)
++void __init at91_add_device_tsadcc(struct at91_tsadcc_data *data)
+ {
++      if (!data)
++              return;
++
+       at91_set_A_periph(AT91_PIN_PA17, 0);    /* AD0_XR */
+       at91_set_A_periph(AT91_PIN_PA18, 0);    /* AD1_XL */
+       at91_set_A_periph(AT91_PIN_PA19, 0);    /* AD2_YT */
+       at91_set_A_periph(AT91_PIN_PA20, 0);    /* AD3_TB */
++      tsadcc_data = *data;
+       platform_device_register(&at91sam9rl_tsadcc_device);
+ }
+ #else
+-void __init at91_add_device_tsadcc(void) {}
++void __init at91_add_device_tsadcc(struct at91_tsadcc_data *data) {}
+ #endif
+@@ -1103,6 +1210,7 @@
+  */
+ static int __init at91_add_standard_devices(void)
+ {
++      at91_add_device_hdmac();
+       at91_add_device_rtc();
+       at91_add_device_rtt();
+       at91_add_device_watchdog();
+Index: linux-2.6.30/drivers/mmc/host/atmel-mci-regs.h
+===================================================================
+--- linux-2.6.30.orig/drivers/mmc/host/atmel-mci-regs.h        2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/drivers/mmc/host/atmel-mci-regs.h     2011-02-01 16:40:30.152108635 +0100
+@@ -7,6 +7,12 @@
+  * it under the terms of the GNU General Public License version 2 as
+  * published by the Free Software Foundation.
+  */
++
++/*
++ * Superset of MCI IP registers integrated in Atmel AVR32 and AT91 Processors
++ * Registers and bitfields marked with [2] are only available in MCI2
++ */
++
+ #ifndef __DRIVERS_MMC_ATMEL_MCI_H__
+ #define __DRIVERS_MMC_ATMEL_MCI_H__
+@@ -14,11 +20,17 @@
+ #define MCI_CR                        0x0000  /* Control */
+ # define MCI_CR_MCIEN         (  1 <<  0)     /* MCI Enable */
+ # define MCI_CR_MCIDIS                (  1 <<  1)     /* MCI Disable */
++# define MCI_CR_PWSEN         (  1 <<  2)     /* Power Save Enable */
++# define MCI_CR_PWSDIS                (  1 <<  3)     /* Power Save Disable */
+ # define MCI_CR_SWRST         (  1 <<  7)     /* Software Reset */
+ #define MCI_MR                        0x0004  /* Mode */
+ # define MCI_MR_CLKDIV(x)     ((x) <<  0)     /* Clock Divider */
++# define MCI_MR_PWSDIV(x)     ((x) <<  8)     /* Power Saving Divider */
+ # define MCI_MR_RDPROOF               (  1 << 11)     /* Read Proof */
+ # define MCI_MR_WRPROOF               (  1 << 12)     /* Write Proof */
++# define MCI_MR_PDCFBYTE      (  1 << 13)     /* Force Byte Transfer */
++# define MCI_MR_PDCPADV               (  1 << 14)     /* Padding Value */
++# define MCI_MR_PDCMODE               (  1 << 15)     /* PDC-oriented Mode */
+ #define MCI_DTOR              0x0008  /* Data Timeout */
+ # define MCI_DTOCYC(x)                ((x) <<  0)     /* Data Timeout Cycles */
+ # define MCI_DTOMUL(x)                ((x) <<  4)     /* Data Timeout Multiplier */
+@@ -28,6 +40,7 @@
+ # define MCI_SDCSEL_MASK      (  3 <<  0)
+ # define MCI_SDCBUS_1BIT      (  0 <<  6)     /* 1-bit data bus */
+ # define MCI_SDCBUS_4BIT      (  2 <<  6)     /* 4-bit data bus */
++# define MCI_SDCBUS_8BIT      (  3 <<  6)     /* 8-bit data bus[2] */
+ # define MCI_SDCBUS_MASK      (  3 <<  6)
+ #define MCI_ARGR              0x0010  /* Command Argument */
+ #define MCI_CMDR              0x0014  /* Command */
+@@ -56,6 +69,9 @@
+ #define MCI_BLKR              0x0018  /* Block */
+ # define MCI_BCNT(x)          ((x) <<  0)     /* Data Block Count */
+ # define MCI_BLKLEN(x)                ((x) << 16)     /* Data Block Length */
++#define MCI_CSTOR             0x001c  /* Completion Signal Timeout[2] */
++# define MCI_CSTOCYC(x)               ((x) <<  0)     /* CST cycles */
++# define MCI_CSTOMUL(x)               ((x) <<  4)     /* CST multiplier */
+ #define MCI_RSPR              0x0020  /* Response 0 */
+ #define MCI_RSPR1             0x0024  /* Response 1 */
+ #define MCI_RSPR2             0x0028  /* Response 2 */
+@@ -83,7 +99,24 @@
+ # define MCI_DTOE             (  1 <<  22)    /* Data Time-Out Error */
+ # define MCI_OVRE             (  1 <<  30)    /* RX Overrun Error */
+ # define MCI_UNRE             (  1 <<  31)    /* TX Underrun Error */
++#define MCI_DMA                       0x0050  /* DMA Configuration[2] */
++# define MCI_DMA_OFFSET(x)    ((x) <<  0)     /* DMA Write Buffer Offset */
++# define MCI_DMA_CHKSIZE(x)   ((x) <<  4)     /* DMA Channel Read and Write Chunk Size */
++# define MCI_DMAEN            (  1 <<  8)     /* DMA Hardware Handshaking Enable */
++#define MCI_CFG                       0x0054  /* Configuration[2] */
++# define MCI_CFG_FIFOMODE_1DATA       (  1 <<  0)     /* MCI Internal FIFO control mode */
++# define MCI_CFG_FERRCTRL_COR (  1 <<  4)     /* Flow Error flag reset control mode */
++# define MCI_CFG_HSMODE               (  1 <<  8)     /* High Speed Mode */
++# define MCI_CFG_LSYNC                (  1 << 12)     /* Synchronize on the last block */
++#define MCI_WPMR              0x00e4  /* Write Protection Mode[2] */
++# define MCI_WP_EN            (  1 <<  0)     /* WP Enable */
++# define MCI_WP_KEY           (0x4d4349 << 8) /* WP Key */
++#define MCI_WPSR              0x00e8  /* Write Protection Status[2] */
++# define MCI_GET_WP_VS(x)     ((x) & 0x0f)
++# define MCI_GET_WP_VSRC(x)   (((x) >> 8) & 0xffff)
++#define MCI_FIFO_APERTURE     0x0200  /* FIFO Aperture[2] */
++/* This is not including the FIFO Aperture on MCI2 */
+ #define MCI_REGS_SIZE         0x100
+ /* Register access macros */
+Index: linux-2.6.30/drivers/mmc/host/Kconfig
+===================================================================
+--- linux-2.6.30.orig/drivers/mmc/host/Kconfig 2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/drivers/mmc/host/Kconfig      2011-02-01 16:40:30.157049210 +0100
+@@ -124,6 +124,12 @@
+         If unsure, say N.
++choice
++      prompt "Atmel SD/MMC Driver"
++      default MMC_ATMELMCI if AVR32
++      help
++        Choose which driver to use for the Atmel MCI Silicon
++
+ config MMC_AT91
+       tristate "AT91 SD/MMC Card Interface support"
+       depends on ARCH_AT91
+@@ -134,17 +140,19 @@
+ config MMC_ATMELMCI
+       tristate "Atmel Multimedia Card Interface support"
+-      depends on AVR32
++      depends on AVR32 || ARCH_AT91
+       help
+         This selects the Atmel Multimedia Card Interface driver. If
+-        you have an AT32 (AVR32) platform with a Multimedia Card
+-        slot, say Y or M here.
++        you have an AT32 (AVR32) or AT91 platform with a Multimedia
++        Card slot, say Y or M here.
+         If unsure, say N.
++endchoice
++
+ config MMC_ATMELMCI_DMA
+       bool "Atmel MCI DMA support (EXPERIMENTAL)"
+-      depends on MMC_ATMELMCI && DMA_ENGINE && EXPERIMENTAL
++      depends on MMC_ATMELMCI && (AVR32 || ARCH_AT91SAM9G45) && DMA_ENGINE && EXPERIMENTAL
+       help
+         Say Y here to have the Atmel MCI driver use a DMA engine to
+         do data transfers and thus increase the throughput and
+Index: linux-2.6.30/drivers/mmc/host/atmel-mci.c
+===================================================================
+--- linux-2.6.30.orig/drivers/mmc/host/atmel-mci.c     2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/drivers/mmc/host/atmel-mci.c  2011-02-01 16:40:30.161007816 +0100
+@@ -7,6 +7,10 @@
+  * it under the terms of the GNU General Public License version 2 as
+  * published by the Free Software Foundation.
+  */
++
++/* High speed mode setting on host & SD card */
++/*#define AT91_HSMODE 1*/
++
+ #include <linux/blkdev.h>
+ #include <linux/clk.h>
+ #include <linux/debugfs.h>
+@@ -30,6 +34,7 @@
+ #include <asm/io.h>
+ #include <asm/unaligned.h>
++#include <mach/cpu.h>
+ #include <mach/board.h>
+ #include "atmel-mci-regs.h"
+@@ -91,6 +96,7 @@
+  * @need_clock_update: Update the clock rate before the next request.
+  * @need_reset: Reset controller before next request.
+  * @mode_reg: Value of the MR register.
++ * @cfg_reg: Value of the CFG register.
+  * @bus_hz: The rate of @mck in Hz. This forms the basis for MMC bus
+  *    rate and timeout calculations.
+  * @mapbase: Physical address of the MMIO registers.
+@@ -154,6 +160,7 @@
+       bool                    need_clock_update;
+       bool                    need_reset;
+       u32                     mode_reg;
++      u32                     cfg_reg;
+       unsigned long           bus_hz;
+       unsigned long           mapbase;
+       struct clk              *mck;
+@@ -208,6 +215,31 @@
+       set_bit(event, &host->pending_events)
+ /*
++ * Enable or disable features/registers based on
++ * whether the processor supports them
++ */
++static bool mci_has_rwproof(void)
++{
++      if (cpu_is_at91sam9261() || cpu_is_at91rm9200())
++              return false;
++      else
++              return true;
++}
++
++/*
++ * The new MCI2 module isn't 100% compatible with the old MCI module,
++ * and it has a few nice features which we want to use...
++ */
++static inline bool atmci_is_mci2(void)
++{
++      if (cpu_is_at91sam9g45())
++              return true;
++
++      return false;
++}
++
++
++/*
+  * The debugfs stuff below is mostly optimized away when
+  * CONFIG_DEBUG_FS is not set.
+  */
+@@ -274,8 +306,13 @@
+               [3]     = "BLKE",
+               [4]     = "DTIP",
+               [5]     = "NOTBUSY",
++              [6]     = "ENDRX",
++              [7]     = "ENDTX",
+               [8]     = "SDIOIRQA",
+               [9]     = "SDIOIRQB",
++              [12]    = "SDIOWAIT",
++              [14]    = "RXBUFF",
++              [15]    = "TXBUFE",
+               [16]    = "RINDE",
+               [17]    = "RDIRE",
+               [18]    = "RCRCE",
+@@ -283,6 +320,11 @@
+               [20]    = "RTOE",
+               [21]    = "DCRCE",
+               [22]    = "DTOE",
++              [23]    = "CSTOE",
++              [24]    = "BLKOVRE",
++              [25]    = "DMADONE",
++              [26]    = "FIFOEMPTY",
++              [27]    = "XFRDONE",
+               [30]    = "OVRE",
+               [31]    = "UNRE",
+       };
+@@ -332,12 +374,33 @@
+                       buf[MCI_BLKR / 4],
+                       buf[MCI_BLKR / 4] & 0xffff,
+                       (buf[MCI_BLKR / 4] >> 16) & 0xffff);
++      if (atmci_is_mci2())
++              seq_printf(s, "CSTOR:\t0x%08x\n", buf[MCI_CSTOR / 4]);
+       /* Don't read RSPR and RDR; it will consume the data there */
+       atmci_show_status_reg(s, "SR", buf[MCI_SR / 4]);
+       atmci_show_status_reg(s, "IMR", buf[MCI_IMR / 4]);
++      if (atmci_is_mci2()) {
++              u32 val;
++
++              val = buf[MCI_DMA / 4];
++              seq_printf(s, "DMA:\t0x%08x OFFSET=%u CHKSIZE=%u%s\n",
++                              val, val & 3,
++                              ((val >> 4) & 3) ?
++                                      1 << (((val >> 4) & 3) + 1) : 1,
++                              val & MCI_DMAEN ? " DMAEN" : "");
++
++              val = buf[MCI_CFG / 4];
++              seq_printf(s, "CFG:\t0x%08x%s%s%s%s\n",
++                              val,
++                              val & MCI_CFG_FIFOMODE_1DATA ? " FIFOMODE_ONE_DATA" : "",
++                              val & MCI_CFG_FERRCTRL_COR ? " FERRCTRL_CLEAR_ON_READ" : "",
++                              val & MCI_CFG_HSMODE ? " HSMODE" : "",
++                              val & MCI_CFG_LSYNC ? " LSYNC" : "");
++      }
++
+       kfree(buf);
+       return 0;
+@@ -532,6 +595,10 @@
+       dev_vdbg(&host->pdev->dev, "DMA complete\n");
++      if (atmci_is_mci2())
++              /* Disable DMA hardware handshaking on MCI */
++              mci_writel(host, DMA, mci_readl(host, DMA) & ~MCI_DMAEN);
++
+       atmci_dma_cleanup(host);
+       /*
+@@ -567,13 +634,14 @@
+ }
+ static int
+-atmci_submit_data_dma(struct atmel_mci *host, struct mmc_data *data)
++atmci_prepare_data_dma(struct atmel_mci *host, struct mmc_data *data)
+ {
+       struct dma_chan                 *chan;
+       struct dma_async_tx_descriptor  *desc;
+       struct scatterlist              *sg;
+       unsigned int                    i;
+       enum dma_data_direction         direction;
++      unsigned int                    sglen;
+       /*
+        * We don't do DMA on "complex" transfers, i.e. with
+@@ -598,35 +666,54 @@
+       if (!chan)
+               return -ENODEV;
++      if (atmci_is_mci2())
++              mci_writel(host, DMA, MCI_DMA_CHKSIZE(3) | MCI_DMAEN);
++
+       if (data->flags & MMC_DATA_READ)
+               direction = DMA_FROM_DEVICE;
+       else
+               direction = DMA_TO_DEVICE;
++      sglen = dma_map_sg(&host->pdev->dev, data->sg, data->sg_len, direction);
++      if (sglen != data->sg_len)
++              goto unmap_exit;
++
+       desc = chan->device->device_prep_slave_sg(chan,
+                       data->sg, data->sg_len, direction,
+                       DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
+       if (!desc)
+-              return -ENOMEM;
++              goto unmap_exit;
+       host->dma.data_desc = desc;
+       desc->callback = atmci_dma_complete;
+       desc->callback_param = host;
+-      desc->tx_submit(desc);
+-
+-      /* Go! */
+-      chan->device->device_issue_pending(chan);
+       return 0;
++unmap_exit:
++      dma_unmap_sg(&host->pdev->dev, data->sg, sglen, direction);
++      return -ENOMEM;
++}
++
++static void atmci_submit_data(struct atmel_mci *host)
++{
++      struct dma_chan                 *chan = host->data_chan;
++      struct dma_async_tx_descriptor  *desc = host->dma.data_desc;
++
++      if (chan) {
++              desc->tx_submit(desc);
++              chan->device->device_issue_pending(chan);
++      }
+ }
+ #else /* CONFIG_MMC_ATMELMCI_DMA */
+-static int atmci_submit_data_dma(struct atmel_mci *host, struct mmc_data *data)
++static int atmci_prepare_data_dma(struct atmel_mci *host, struct mmc_data *data)
+ {
+       return -ENOSYS;
+ }
++static void atmci_submit_data(struct atmel_mci *host) {}
++
+ static void atmci_stop_dma(struct atmel_mci *host)
+ {
+       /* Data transfer was stopped by the interrupt handler */
+@@ -640,7 +727,7 @@
+  * Returns a mask of interrupt flags to be enabled after the whole
+  * request has been prepared.
+  */
+-static u32 atmci_submit_data(struct atmel_mci *host, struct mmc_data *data)
++static u32 atmci_prepare_data(struct atmel_mci *host, struct mmc_data *data)
+ {
+       u32 iflags;
+@@ -651,7 +738,7 @@
+       host->data = data;
+       iflags = ATMCI_DATA_ERROR_FLAGS;
+-      if (atmci_submit_data_dma(host, data)) {
++      if (atmci_prepare_data_dma(host, data)) {
+               host->data_chan = NULL;
+               /*
+@@ -697,6 +784,8 @@
+               mci_writel(host, CR, MCI_CR_SWRST);
+               mci_writel(host, CR, MCI_CR_MCIEN);
+               mci_writel(host, MR, host->mode_reg);
++              if (atmci_is_mci2())
++                      mci_writel(host, CFG, host->cfg_reg);
+               host->need_reset = false;
+       }
+       mci_writel(host, SDCR, slot->sdc_reg);
+@@ -712,6 +801,7 @@
+               while (!(mci_readl(host, SR) & MCI_CMDRDY))
+                       cpu_relax();
+       }
++      iflags = 0;
+       data = mrq->data;
+       if (data) {
+               atmci_set_timeout(host, slot, data);
+@@ -721,15 +811,17 @@
+                               | MCI_BLKLEN(data->blksz));
+               dev_vdbg(&slot->mmc->class_dev, "BLKR=0x%08x\n",
+                       MCI_BCNT(data->blocks) | MCI_BLKLEN(data->blksz));
++
++              iflags |= atmci_prepare_data(host, data);
+       }
+-      iflags = MCI_CMDRDY;
++      iflags |= MCI_CMDRDY;
+       cmd = mrq->cmd;
+       cmdflags = atmci_prepare_command(slot->mmc, cmd);
+       atmci_start_command(host, cmd, cmdflags);
+       if (data)
+-              iflags |= atmci_submit_data(host, data);
++              atmci_submit_data(host);
+       if (mrq->stop) {
+               host->stop_cmdr = atmci_prepare_command(slot->mmc, mrq->stop);
+@@ -825,6 +917,8 @@
+                       clk_enable(host->mck);
+                       mci_writel(host, CR, MCI_CR_SWRST);
+                       mci_writel(host, CR, MCI_CR_MCIEN);
++                      if (atmci_is_mci2())
++                              mci_writel(host, CFG, host->cfg_reg);
+               }
+               /*
+@@ -847,18 +941,56 @@
+                       clkdiv = 255;
+               }
++#if defined(AT91_HSMODE)
++              /* Not needed for normal operation previous calculation
++               * takes 50MHz into account */
++#if 0
++              /* fake clkdiv for tests @ 16,6MHz || 12,5MHz */
++              if (ios->clock >= 25000000) {
++                      clkdiv = 3;
++              }
++#endif
++#if 0
++              /* fake clkdiv for tests @ 33MHz || 25MHz */
++              if (ios->clock >= 25000000) {
++                      clkdiv = 1;
++              }
++#endif
++#if 0
++              /* fake clkdiv for tests @ 66MHz || 50MHz */
++              if (ios->clock >= 25000000) {
++                      clkdiv = 0;
++              }
++#endif
++#endif
++
++              host->mode_reg = MCI_MR_CLKDIV(clkdiv);
++
+               /*
+                * WRPROOF and RDPROOF prevent overruns/underruns by
+                * stopping the clock when the FIFO is full/empty.
+                * This state is not expected to last for long.
+                */
+-              host->mode_reg = MCI_MR_CLKDIV(clkdiv) | MCI_MR_WRPROOF
+-                                      | MCI_MR_RDPROOF;
++              if (mci_has_rwproof())
++                      host->mode_reg |= (MCI_MR_WRPROOF | MCI_MR_RDPROOF);
+-              if (list_empty(&host->queue))
++#if defined(AT91_HSMODE)
++              if (atmci_is_mci2()) {
++                      /* setup High Speed mode in relation with card capacity */
++                      if (ios->timing == MMC_TIMING_SD_HS)
++                              host->cfg_reg |= MCI_CFG_HSMODE;
++                      else
++                              host->cfg_reg &= ~MCI_CFG_HSMODE;
++              }
++#endif
++
++              if (list_empty(&host->queue)) {
+                       mci_writel(host, MR, host->mode_reg);
+-              else
++                      if (atmci_is_mci2())
++                              mci_writel(host, CFG, host->cfg_reg);
++              } else {
+                       host->need_clock_update = true;
++              }
+               spin_unlock_bh(&host->lock);
+       } else {
+@@ -954,8 +1086,11 @@
+        * necessary if set_ios() is called when a different slot is
+        * busy transfering data.
+        */
+-      if (host->need_clock_update)
++      if (host->need_clock_update) {
+               mci_writel(host, MR, host->mode_reg);
++              if (atmci_is_mci2())
++                      mci_writel(host, CFG, host->cfg_reg);
++      }
+       host->cur_slot->mrq = NULL;
+       host->mrq = NULL;
+@@ -1059,6 +1194,8 @@
+                               mci_writel(host, CR, MCI_CR_SWRST);
+                               mci_writel(host, CR, MCI_CR_MCIEN);
+                               mci_writel(host, MR, host->mode_reg);
++                              if (atmci_is_mci2())
++                                      mci_writel(host, CFG, host->cfg_reg);
+                               host->data = NULL;
+                               host->cmd = NULL;
+@@ -1462,6 +1599,10 @@
+       mmc->f_min = DIV_ROUND_UP(host->bus_hz, 512);
+       mmc->f_max = host->bus_hz / 2;
+       mmc->ocr_avail  = MMC_VDD_32_33 | MMC_VDD_33_34;
++#if defined(AT91_HSMODE)
++      if (atmci_is_mci2())
++              mmc->caps |= MMC_CAP_SD_HIGHSPEED;
++#endif
+       if (slot_data->bus_width >= 4)
+               mmc->caps |= MMC_CAP_4_BIT_DATA;
+@@ -1544,16 +1685,75 @@
+ }
+ #ifdef CONFIG_MMC_ATMELMCI_DMA
+-static bool filter(struct dma_chan *chan, void *slave)
++static struct device *find_slave_dev(void *slave)
+ {
+-      struct dw_dma_slave *dws = slave;
++      if (!slave)
++              return NULL;
++
++      if (cpu_is_at32ap7000())
++              return ((struct dw_dma_slave *)slave)->dma_dev;
++      else
++              return ((struct at_dma_slave *)slave)->dma_dev;
++}
+-      if (dws->dma_dev == chan->device->dev) {
+-              chan->private = dws;
++static void setup_dma_addr(struct mci_platform_data *pdata,
++                      dma_addr_t tx_addr, dma_addr_t rx_addr)
++{
++      if (!pdata)
++              return;
++
++      if (cpu_is_at32ap7000()) {
++              struct dw_dma_slave *dws = pdata->dma_slave;
++
++              dws->tx_reg = tx_addr;
++              dws->rx_reg = rx_addr;
++      } else {
++              struct at_dma_slave *ats = pdata->dma_slave;
++
++              ats->tx_reg = tx_addr;
++              ats->rx_reg = rx_addr;
++      }
++}
++
++static bool filter(struct dma_chan *chan, void *slave)
++{
++      if (find_slave_dev(slave) == chan->device->dev) {
++              chan->private = slave;
+               return true;
+-      } else
++      } else {
+               return false;
++      }
+ }
++
++static void atmci_configure_dma(struct atmel_mci *host)
++{
++      struct mci_platform_data        *pdata;
++
++      if (host == NULL)
++              return;
++
++      pdata = host->pdev->dev.platform_data;
++
++      if (pdata && find_slave_dev(pdata->dma_slave)) {
++              dma_cap_mask_t mask;
++
++              setup_dma_addr(pdata, host->mapbase + MCI_TDR,
++                                    host->mapbase + MCI_RDR);
++
++              /* Try to grab a DMA channel */
++              dma_cap_zero(mask);
++              dma_cap_set(DMA_SLAVE, mask);
++              host->dma.chan = dma_request_channel(mask, filter, pdata->dma_slave);
++      }
++      if (!host->dma.chan)
++              dev_notice(&host->pdev->dev, "DMA not available, using PIO\n");
++      else
++              dev_info(&host->pdev->dev,
++                                      "Using %s for DMA transfers\n",
++                                      dma_chan_name(host->dma.chan));
++}
++#else
++static void atmci_configure_dma(struct atmel_mci *host) {}
+ #endif
+ static int __init atmci_probe(struct platform_device *pdev)
+@@ -1607,22 +1807,7 @@
+       if (ret)
+               goto err_request_irq;
+-#ifdef CONFIG_MMC_ATMELMCI_DMA
+-      if (pdata->dma_slave.dma_dev) {
+-              struct dw_dma_slave *dws = &pdata->dma_slave;
+-              dma_cap_mask_t mask;
+-
+-              dws->tx_reg = regs->start + MCI_TDR;
+-              dws->rx_reg = regs->start + MCI_RDR;
+-
+-              /* Try to grab a DMA channel */
+-              dma_cap_zero(mask);
+-              dma_cap_set(DMA_SLAVE, mask);
+-              host->dma.chan = dma_request_channel(mask, filter, dws);
+-      }
+-      if (!host->dma.chan)
+-              dev_notice(&pdev->dev, "DMA not available, using PIO\n");
+-#endif /* CONFIG_MMC_ATMELMCI_DMA */
++      atmci_configure_dma(host);
+       platform_set_drvdata(pdev, host);
+@@ -1642,8 +1827,10 @@
+                       nr_slots++;
+       }
+-      if (!nr_slots)
++      if (!nr_slots) {
++              dev_err(&pdev->dev, "init failed: no slot defined\n");
+               goto err_init_slot;
++      }
+       dev_info(&pdev->dev,
+                       "Atmel MCI controller at 0x%08lx irq %d, %u slots\n",
+Index: linux-2.6.30/arch/arm/mach-at91/at91sam9260_devices.c
+===================================================================
+--- linux-2.6.30.orig/arch/arm/mach-at91/at91sam9260_devices.c 2011-02-01 16:40:18.000000000 +0100
++++ linux-2.6.30/arch/arm/mach-at91/at91sam9260_devices.c      2011-02-01 16:40:30.152108635 +0100
+@@ -424,6 +424,102 @@
+ void __init at91_add_device_mmc(short mmc_id, struct at91_mmc_data *data) {}
+ #endif
++/* --------------------------------------------------------------------
++ *  MMC / SD Slot for Atmel MCI Driver
++ * -------------------------------------------------------------------- */
++
++#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE)
++static u64 mmc_dmamask = DMA_BIT_MASK(32);
++static struct mci_platform_data mmc_data;
++
++static struct resource mmc_resources[] = {
++      [0] = {
++              .start  = AT91SAM9260_BASE_MCI,
++              .end    = AT91SAM9260_BASE_MCI + SZ_16K - 1,
++              .flags  = IORESOURCE_MEM,
++      },
++      [1] = {
++              .start  = AT91SAM9260_ID_MCI,
++              .end    = AT91SAM9260_ID_MCI,
++              .flags  = IORESOURCE_IRQ,
++      },
++};
++
++static struct platform_device at91sam9260_mmc_device = {
++      .name           = "atmel_mci",
++      .id             = -1,
++      .dev            = {
++                              .dma_mask               = &mmc_dmamask,
++                              .coherent_dma_mask      = DMA_BIT_MASK(32),
++                              .platform_data          = &mmc_data,
++      },
++      .resource       = mmc_resources,
++      .num_resources  = ARRAY_SIZE(mmc_resources),
++};
++
++void __init at91_add_device_mci(short mmc_id, struct mci_platform_data *data)
++{
++      unsigned int i;
++      unsigned int slot_count = 0;
++
++      if (!data)
++              return;
++
++      for (i = 0; i < ATMEL_MCI_MAX_NR_SLOTS; i++) {
++              if (data->slot[i].bus_width) {
++                      /* input/irq */
++                      if (data->slot[i].detect_pin) {
++                              at91_set_gpio_input(data->slot[i].detect_pin, 1);
++                              at91_set_deglitch(data->slot[i].detect_pin, 1);
++                      }
++                      if (data->slot[i].wp_pin)
++                              at91_set_gpio_input(data->slot[i].wp_pin, 1);
++
++                      switch(i) {
++                      case 0:
++                              /* CMD */
++                              at91_set_A_periph(AT91_PIN_PA7, 1);
++                              /* DAT0, maybe DAT1..DAT3 */
++                              at91_set_A_periph(AT91_PIN_PA6, 1);
++                              if (data->slot[i].bus_width == 4) {
++                                      at91_set_A_periph(AT91_PIN_PA9, 1);
++                                      at91_set_A_periph(AT91_PIN_PA10, 1);
++                                      at91_set_A_periph(AT91_PIN_PA11, 1);
++                              }
++                              slot_count++;
++                              break;
++                      case 1:
++                              /* CMD */
++                              at91_set_B_periph(AT91_PIN_PA1, 1);
++                              /* DAT0, maybe DAT1..DAT3 */
++                              at91_set_B_periph(AT91_PIN_PA0, 1);
++                              if (data->slot[i].bus_width == 4) {
++                                      at91_set_B_periph(AT91_PIN_PA5, 1);
++                                      at91_set_B_periph(AT91_PIN_PA4, 1);
++                                      at91_set_B_periph(AT91_PIN_PA3, 1);
++                              }
++                              slot_count++;
++                              break;
++                      default:
++                              printk(KERN_ERR
++                                      "AT91: SD/MMC slot %d not available\n", i);
++                              break;
++                      }
++              }
++      }
++
++      if (slot_count) {
++              /* CLK */
++              at91_set_A_periph(AT91_PIN_PA8, 0);
++
++              mmc_data = *data;
++              platform_device_register(&at91sam9260_mmc_device);
++      }
++}
++#else
++void __init at91_add_device_mci(short mmc_id, struct mci_platform_data *data) {}
++#endif
++
+ /* --------------------------------------------------------------------
+  *  NAND / SmartMedia
+Index: linux-2.6.30/arch/arm/mach-at91/board-sam9g20ek-2slot-mmc.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.30/arch/arm/mach-at91/board-sam9g20ek-2slot-mmc.c        2011-02-01 16:40:30.193007582 +0100
+@@ -0,0 +1,338 @@
++/*
++ *  Copyright (C) 2005 SAN People
++ *  Copyright (C) 2008 Atmel
++ *  Copyright (C) 2009 Rob Emanuele
++ *
++ * 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/at73c213.h>
++#include <linux/clk.h>
++
++#include <mach/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 <mach/board.h>
++#include <mach/gpio.h>
++#include <linux/gpio_keys.h>
++#include <linux/input.h>
++#include <mach/at91sam9_smc.h>
++
++#include "sam9_smc.h"
++#include "generic.h"
++
++
++static void __init ek_map_io(void)
++{
++      /* Initialize processor: 18.432 MHz crystal */
++      at91sam9260_initialize(18432000);
++
++      /* DGBU on ttyS0. (Rx & Tx only) */
++      at91_register_uart(0, 0, 0);
++
++      /* USART0 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */
++      at91_register_uart(AT91SAM9260_ID_US0, 1, ATMEL_UART_CTS | ATMEL_UART_RTS
++                         | ATMEL_UART_DTR | ATMEL_UART_DSR | ATMEL_UART_DCD
++                         | ATMEL_UART_RI);
++
++      /* USART1 on ttyS2. (Rx, Tx, RTS, CTS) */
++      at91_register_uart(AT91SAM9260_ID_US1, 2, ATMEL_UART_CTS | ATMEL_UART_RTS);
++
++      /* set serial console to ttyS0 (ie, DBGU) */
++      at91_set_serial_console(0);
++}
++
++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_ATMELMCI) || 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_PB0,
++      .is_rmii        = 1,
++};
++
++
++/*
++ * NAND flash
++ */
++static struct mtd_partition __initdata ek_nand_partition[] = {
++      {
++              .name   = "Bootstrap",
++              .offset = 0,
++              .size   = 4 * SZ_1M,
++      },
++      {
++              .name   = "Partition 1",
++              .offset = MTDPART_OFS_NXTBLK,
++              .size   = 60 * SZ_1M,
++      },
++      {
++              .name   = "Partition 2",
++              .offset = MTDPART_OFS_NXTBLK,
++              .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;
++}
++
++/* det_pin is not connected */
++static struct atmel_nand_data __initdata ek_nand_data = {
++      .ale            = 21,
++      .cle            = 22,
++      .rdy_pin        = AT91_PIN_PC13,
++      .enable_pin     = AT91_PIN_PC14,
++      .partition_info = nand_partitions,
++#if defined(CONFIG_MTD_NAND_ATMEL_BUSWIDTH_16)
++      .bus_width_16   = 1,
++#else
++      .bus_width_16   = 0,
++#endif
++};
++
++static struct sam9_smc_config __initdata ek_nand_smc_config = {
++      .ncs_read_setup         = 0,
++      .nrd_setup              = 2,
++      .ncs_write_setup        = 0,
++      .nwe_setup              = 2,
++
++      .ncs_read_pulse         = 4,
++      .nrd_pulse              = 4,
++      .ncs_write_pulse        = 4,
++      .nwe_pulse              = 4,
++
++      .read_cycle             = 7,
++      .write_cycle            = 7,
++
++      .mode                   = AT91_SMC_READMODE | AT91_SMC_WRITEMODE | AT91_SMC_EXNWMODE_DISABLE,
++      .tdf_cycles             = 3,
++};
++
++static void __init ek_add_device_nand(void)
++{
++      /* setup bus-width (8 or 16) */
++      if (ek_nand_data.bus_width_16)
++              ek_nand_smc_config.mode |= AT91_SMC_DBW_16;
++      else
++              ek_nand_smc_config.mode |= AT91_SMC_DBW_8;
++
++      /* configure chip-select 3 (NAND) */
++      sam9_smc_configure(3, &ek_nand_smc_config);
++
++      at91_add_device_nand(&ek_nand_data);
++}
++
++
++/*
++ * MCI (SD/MMC)
++ * wp_pin is not connected
++ */
++#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE)
++static struct mci_platform_data __initdata ek_mmc_data = {
++      .slot[0] = {
++              .bus_width      = 4,
++              .detect_pin     = AT91_PIN_PC2,
++              .wp_pin         = -ENODEV,
++      },
++      .slot[1] = {
++              .bus_width      = 4,
++              .detect_pin     = AT91_PIN_PC9,
++              .wp_pin         = -ENODEV,
++      },
++
++};
++#else
++static struct at91_mmc_data __initdata ek_mmc_data = {
++      .slot_b         = 1,    /* Only one slot so use slot B */
++      .wire4          = 1,
++      .det_pin        = AT91_PIN_PC9,
++};
++#endif
++
++/*
++ * LEDs
++ */
++static struct gpio_led ek_leds[] = {
++      {       /* "bottom" led, green, userled1 to be defined */
++              .name                   = "ds5",
++              .gpio                   = AT91_PIN_PB8,
++              .active_low             = 1,
++              .default_trigger        = "none",
++      },
++      {       /* "power" led, yellow */
++              .name                   = "ds1",
++              .gpio                   = AT91_PIN_PB9,
++              .default_trigger        = "heartbeat",
++      }
++};
++
++/*
++ * GPIO Buttons
++ */
++#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
++static struct gpio_keys_button ek_buttons[] = {
++      {
++              .gpio           = AT91_PIN_PA30,
++              .code           = BTN_3,
++              .desc           = "Button 3",
++              .active_low     = 1,
++              .wakeup         = 1,
++      },
++      {
++              .gpio           = AT91_PIN_PA31,
++              .code           = BTN_4,
++              .desc           = "Button 4",
++              .active_low     = 1,
++              .wakeup         = 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_PA30, 1);  /* btn3 */
++      at91_set_deglitch(AT91_PIN_PA30, 1);
++      at91_set_gpio_input(AT91_PIN_PA31, 1);  /* btn4 */
++      at91_set_deglitch(AT91_PIN_PA31, 1);
++
++      platform_device_register(&ek_button_device);
++}
++#else
++static void __init ek_add_device_buttons(void) {}
++#endif
++
++
++static struct i2c_board_info __initdata ek_i2c_devices[] = {
++      {
++              I2C_BOARD_INFO("24c512", 0x50),
++              I2C_BOARD_INFO("wm8731", 0x1b),
++      },
++};
++
++
++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 */
++      ek_add_device_nand();
++      /* Ethernet */
++      at91_add_device_eth(&ek_macb_data);
++      /* MMC */
++#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE)
++      at91_add_device_mci(0, &ek_mmc_data);
++#else
++      at91_add_device_mmc(0, &ek_mmc_data);
++#endif
++      /* I2C */
++      at91_add_device_i2c(ek_i2c_devices, ARRAY_SIZE(ek_i2c_devices));
++      /* LEDs */
++      at91_gpio_leds(ek_leds, ARRAY_SIZE(ek_leds));
++      /* Push Buttons */
++      ek_add_device_buttons();
++      /* PCK0 provides MCLK to the WM8731 */
++      at91_set_B_periph(AT91_PIN_PC1, 0);
++      /* SSC (for WM8731) */
++      at91_add_device_ssc(AT91SAM9260_ID_SSC, ATMEL_SSC_TX);
++}
++
++MACHINE_START(AT91SAM9G20EK_2MMC, "Atmel AT91SAM9G20-EK 2 MMC Slot Mod")
++      /* Maintainer: Rob Emanuele */
++      .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
+Index: linux-2.6.30/arch/avr32/mach-at32ap/at32ap700x.c
+===================================================================
+--- linux-2.6.30.orig/arch/avr32/mach-at32ap/at32ap700x.c      2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/arch/avr32/mach-at32ap/at32ap700x.c   2011-02-01 16:40:30.157049210 +0100
+@@ -1320,7 +1320,7 @@
+ at32_add_device_mci(unsigned int id, struct mci_platform_data *data)
+ {
+       struct platform_device          *pdev;
+-      struct dw_dma_slave             *dws = &data->dma_slave;
++      struct dw_dma_slave             *dws;
+       u32                             pioa_mask;
+       u32                             piob_mask;
+@@ -1339,6 +1339,8 @@
+                               ARRAY_SIZE(atmel_mci0_resource)))
+               goto fail;
++      dws = kzalloc(sizeof(struct dw_dma_slave), GFP_KERNEL);
++
+       dws->dma_dev = &dw_dmac0_device.dev;
+       dws->reg_width = DW_DMA_SLAVE_WIDTH_32BIT;
+       dws->cfg_hi = (DWC_CFGH_SRC_PER(0)
+@@ -1346,6 +1348,8 @@
+       dws->cfg_lo &= ~(DWC_CFGL_HS_DST_POL
+                               | DWC_CFGL_HS_SRC_POL);
++      data->dma_slave = dws;
++
+       if (platform_device_add_data(pdev, data,
+                               sizeof(struct mci_platform_data)))
+               goto fail;
+Index: linux-2.6.30/include/linux/atmel-mci.h
+===================================================================
+--- linux-2.6.30.orig/include/linux/atmel-mci.h        2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/include/linux/atmel-mci.h     2011-02-01 16:40:30.157049210 +0100
+@@ -4,6 +4,7 @@
+ #define ATMEL_MCI_MAX_NR_SLOTS        2
+ #include <linux/dw_dmac.h>
++#include <mach/at_hdmac.h>
+ /**
+  * struct mci_slot_pdata - board-specific per-slot configuration
+@@ -32,7 +33,7 @@
+  * @slot: Per-slot configuration data.
+  */
+ struct mci_platform_data {
+-      struct dw_dma_slave     dma_slave;
++      void                    *dma_slave;
+       struct mci_slot_pdata   slot[ATMEL_MCI_MAX_NR_SLOTS];
+ };
+Index: linux-2.6.30/drivers/mmc/host/at91_mci.c
+===================================================================
+--- linux-2.6.30.orig/drivers/mmc/host/at91_mci.c      2011-02-01 16:40:18.000000000 +0100
++++ linux-2.6.30/drivers/mmc/host/at91_mci.c   2011-02-01 16:40:30.161007816 +0100
+@@ -79,6 +79,17 @@
+ #define DRIVER_NAME "at91_mci"
++static inline int at91mci_is_mci1rev2xx(void)
++{
++      return (   cpu_is_at91sam9260()
++              || cpu_is_at91sam9263()
++              || cpu_is_at91cap9()
++              || cpu_is_at91sam9rl()
++              || cpu_is_at91sam9g10()
++              || cpu_is_at91sam9g20()
++              );
++}
++
+ #define FL_SENT_COMMAND       (1 << 0)
+ #define FL_SENT_STOP  (1 << 1)
+@@ -201,8 +212,8 @@
+       size = data->blksz * data->blocks;
+       len = data->sg_len;
+-      /* AT91SAM926[0/3] Data Write Operation and number of bytes erratum */
+-      if (cpu_is_at91sam9260() || cpu_is_at91sam9263() || cpu_is_at91sam9g20())
++      /* at91mci MCI1 rev2xx Data Write Operation and number of bytes erratum */
++      if (at91mci_is_mci1rev2xx())
+               if (host->total_length == 12)
+                       memset(dmabuf, 0, 12);
+@@ -462,7 +473,7 @@
+       at91_mci_write(host, AT91_MCI_DTOR, AT91_MCI_DTOMUL_1M | AT91_MCI_DTOCYC);
+       mr = AT91_MCI_PDCMODE | 0x34a;
+-      if (cpu_is_at91sam9260() || cpu_is_at91sam9263() || cpu_is_at91sam9g20())
++      if (at91mci_is_mci1rev2xx())
+               mr |= AT91_MCI_RDPROOF | AT91_MCI_WRPROOF;
+       at91_mci_write(host, AT91_MCI_MR, mr);
+@@ -615,10 +626,10 @@
+                                */
+                               host->total_length = block_length * blocks;
+                               /*
+-                               * AT91SAM926[0/3] Data Write Operation and
++                               * at91mci MCI1 rev2xx Data Write Operation and
+                                * number of bytes erratum
+                                */
+-                              if (cpu_is_at91sam9260 () || cpu_is_at91sam9263() || cpu_is_at91sam9g20())
++                              if (at91mci_is_mci1rev2xx())
+                                       if (host->total_length < 12)
+                                               host->total_length = 12;
+@@ -678,11 +689,10 @@
+               at91_mci_send_command(host, host->request->stop);
+       } else {
+               del_timer(&host->timer);
+-              /* the at91rm9200 mci controller hangs after some transfers,
++              /* the mci controller hangs after some transfers,
+                * and the workaround is to reset it after each transfer.
+                */
+-              if (cpu_is_at91rm9200())
+-                      at91_reset_host(host);
++              at91_reset_host(host);
+               mmc_request_done(host->mmc, host->request);
+       }
+ }
+@@ -1007,7 +1017,7 @@
+       mmc->f_min = 375000;
+       mmc->f_max = 25000000;
+       mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34;
+-      mmc->caps = MMC_CAP_SDIO_IRQ;
++      mmc->caps = 0;
+       mmc->max_blk_size = 4095;
+       mmc->max_blk_count = mmc->max_req_size;
+@@ -1018,13 +1028,20 @@
+       host->bus_mode = 0;
+       host->board = pdev->dev.platform_data;
+       if (host->board->wire4) {
+-              if (cpu_is_at91sam9260() || cpu_is_at91sam9263() || cpu_is_at91sam9g20())
++              if (at91mci_is_mci1rev2xx())
+                       mmc->caps |= MMC_CAP_4_BIT_DATA;
+               else
+                       dev_warn(&pdev->dev, "4 wire bus mode not supported"
+                               " - using 1 wire\n");
+       }
++      /* Add SDIO capability when available */
++      if (at91mci_is_mci1rev2xx()) {
++              /* at91mci MCI1 rev2xx sdio interrupt erratum */
++              if (host->board->wire4 || !host->board->slot_b)
++                      mmc->caps |= MMC_CAP_SDIO_IRQ;
++      }
++
+       /*
+        * Reserve GPIOs ... board init code makes sure these pins are set
+        * up as GPIOs with the right direction (input, except for vcc)
+Index: linux-2.6.30/drivers/dma/dw_dmac.c
+===================================================================
+--- linux-2.6.30.orig/drivers/dma/dw_dmac.c    2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/drivers/dma/dw_dmac.c 2011-02-01 16:40:30.161007816 +0100
+@@ -212,16 +212,25 @@
+       list_splice_init(&txd->tx_list, &dwc->free_list);
+       list_move(&desc->desc_node, &dwc->free_list);
+-      /*
+-       * We use dma_unmap_page() regardless of how the buffers were
+-       * mapped before they were submitted...
+-       */
+-      if (!(txd->flags & DMA_COMPL_SKIP_DEST_UNMAP))
+-              dma_unmap_page(chan2parent(&dwc->chan), desc->lli.dar,
+-                             desc->len, DMA_FROM_DEVICE);
+-      if (!(txd->flags & DMA_COMPL_SKIP_SRC_UNMAP))
+-              dma_unmap_page(chan2parent(&dwc->chan), desc->lli.sar,
+-                             desc->len, DMA_TO_DEVICE);
++      if (!dwc->chan.private) {
++              struct device *parent = chan2parent(&dwc->chan);
++              if (!(txd->flags & DMA_COMPL_SKIP_DEST_UNMAP)) {
++                      if (txd->flags & DMA_COMPL_DEST_UNMAP_SINGLE)
++                              dma_unmap_single(parent, desc->lli.dar,
++                                              desc->len, DMA_FROM_DEVICE);
++                      else
++                              dma_unmap_page(parent, desc->lli.dar,
++                                              desc->len, DMA_FROM_DEVICE);
++              }
++              if (!(txd->flags & DMA_COMPL_SKIP_SRC_UNMAP)) {
++                      if (txd->flags & DMA_COMPL_SRC_UNMAP_SINGLE)
++                              dma_unmap_single(parent, desc->lli.sar,
++                                              desc->len, DMA_TO_DEVICE);
++                      else
++                              dma_unmap_page(parent, desc->lli.sar,
++                                              desc->len, DMA_TO_DEVICE);
++              }
++      }
+       /*
+        * The API requires that no submissions are done from a
+@@ -658,8 +667,6 @@
+       reg_width = dws->reg_width;
+       prev = first = NULL;
+-      sg_len = dma_map_sg(chan2parent(chan), sgl, sg_len, direction);
+-
+       switch (direction) {
+       case DMA_TO_DEVICE:
+               ctllo = (DWC_DEFAULT_CTLLO
+Index: linux-2.6.30/sound/atmel/Kconfig
+===================================================================
+--- linux-2.6.30.orig/sound/atmel/Kconfig      2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/sound/atmel/Kconfig   2011-02-01 16:40:30.161007816 +0100
+@@ -12,7 +12,7 @@
+       tristate "Atmel AC97 Controller (AC97C) driver"
+       select SND_PCM
+       select SND_AC97_CODEC
+-      depends on DW_DMAC && AVR32
++      depends on (DW_DMAC && AVR32) || ARCH_AT91
+       help
+         ALSA sound driver for the Atmel AC97 controller.
+Index: linux-2.6.30/sound/atmel/ac97c.c
+===================================================================
+--- linux-2.6.30.orig/sound/atmel/ac97c.c      2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/sound/atmel/ac97c.c   2011-02-01 16:40:30.169008345 +0100
+@@ -13,6 +13,7 @@
+ #include <linux/device.h>
+ #include <linux/dmaengine.h>
+ #include <linux/dma-mapping.h>
++#include <linux/atmel_pdc.h>
+ #include <linux/init.h>
+ #include <linux/interrupt.h>
+ #include <linux/module.h>
+@@ -31,6 +32,10 @@
+ #include <linux/dw_dmac.h>
++#include <mach/cpu.h>
++#include <mach/hardware.h>
++#include <mach/gpio.h>
++
+ #include "ac97c.h"
+ enum {
+@@ -63,6 +68,7 @@
+       u64                             cur_format;
+       unsigned int                    cur_rate;
+       unsigned long                   flags;
++      int                             period;
+       /* Serialize access to opened variable */
+       spinlock_t                      lock;
+       void __iomem                    *regs;
+@@ -150,7 +156,7 @@
+       .rates                  = (SNDRV_PCM_RATE_CONTINUOUS),
+       .rate_min               = 4000,
+       .rate_max               = 48000,
+-      .channels_min           = 1,
++      .channels_min           = 2,
+       .channels_max           = 2,
+       .buffer_bytes_max       = 2 * 2 * 64 * 2048,
+       .period_bytes_min       = 4096,
+@@ -241,10 +247,13 @@
+                                       params_buffer_bytes(hw_params));
+       if (retval < 0)
+               return retval;
+-      /* snd_pcm_lib_malloc_pages returns 1 if buffer is changed. */
+-      if (retval == 1)
+-              if (test_and_clear_bit(DMA_TX_READY, &chip->flags))
+-                      dw_dma_cyclic_free(chip->dma.tx_chan);
++
++      if (cpu_is_at32ap7000()) {
++              /* snd_pcm_lib_malloc_pages returns 1 if buffer is changed. */
++              if (retval == 1)
++                      if (test_and_clear_bit(DMA_TX_READY, &chip->flags))
++                              dw_dma_cyclic_free(chip->dma.tx_chan);
++      }
+       /* Set restrictions to params. */
+       mutex_lock(&opened_mutex);
+@@ -263,12 +272,14 @@
+       retval = snd_pcm_lib_malloc_pages(substream,
+                                       params_buffer_bytes(hw_params));
+-      if (retval < 0)
+-              return retval;
+-      /* snd_pcm_lib_malloc_pages returns 1 if buffer is changed. */
+-      if (retval == 1)
+-              if (test_and_clear_bit(DMA_RX_READY, &chip->flags))
+-                      dw_dma_cyclic_free(chip->dma.rx_chan);
++      if (cpu_is_at32ap7000()) {
++              if (retval < 0)
++                      return retval;
++              /* snd_pcm_lib_malloc_pages returns 1 if buffer is changed. */
++              if (retval == 1)
++                      if (test_and_clear_bit(DMA_RX_READY, &chip->flags))
++                              dw_dma_cyclic_free(chip->dma.rx_chan);
++      }
+       /* Set restrictions to params. */
+       mutex_lock(&opened_mutex);
+@@ -282,16 +293,20 @@
+ static int atmel_ac97c_playback_hw_free(struct snd_pcm_substream *substream)
+ {
+       struct atmel_ac97c *chip = snd_pcm_substream_chip(substream);
+-      if (test_and_clear_bit(DMA_TX_READY, &chip->flags))
+-              dw_dma_cyclic_free(chip->dma.tx_chan);
++      if (cpu_is_at32ap7000()) {
++              if (test_and_clear_bit(DMA_TX_READY, &chip->flags))
++                      dw_dma_cyclic_free(chip->dma.tx_chan);
++      }
+       return snd_pcm_lib_free_pages(substream);
+ }
+ static int atmel_ac97c_capture_hw_free(struct snd_pcm_substream *substream)
+ {
+       struct atmel_ac97c *chip = snd_pcm_substream_chip(substream);
+-      if (test_and_clear_bit(DMA_RX_READY, &chip->flags))
+-              dw_dma_cyclic_free(chip->dma.rx_chan);
++      if (cpu_is_at32ap7000()) {
++              if (test_and_clear_bit(DMA_RX_READY, &chip->flags))
++                      dw_dma_cyclic_free(chip->dma.rx_chan);
++      }
+       return snd_pcm_lib_free_pages(substream);
+ }
+@@ -299,9 +314,11 @@
+ {
+       struct atmel_ac97c *chip = snd_pcm_substream_chip(substream);
+       struct snd_pcm_runtime *runtime = substream->runtime;
++      int block_size = frames_to_bytes(runtime, runtime->period_size);
+       unsigned long word = ac97c_readl(chip, OCA);
+       int retval;
++      chip->period = 0;
+       word &= ~(AC97C_CH_MASK(PCM_LEFT) | AC97C_CH_MASK(PCM_RIGHT));
+       /* assign channels to AC97C channel A */
+@@ -324,7 +341,8 @@
+       switch (runtime->format) {
+       case SNDRV_PCM_FORMAT_S16_LE:
+-              word |= AC97C_CMR_CEM_LITTLE;
++              if (cpu_is_at32ap7000())
++                      word |= AC97C_CMR_CEM_LITTLE;
+               break;
+       case SNDRV_PCM_FORMAT_S16_BE: /* fall through */
+               word &= ~(AC97C_CMR_CEM_LITTLE);
+@@ -363,9 +381,18 @@
+               dev_dbg(&chip->pdev->dev, "could not set rate %d Hz\n",
+                               runtime->rate);
+-      if (!test_bit(DMA_TX_READY, &chip->flags))
+-              retval = atmel_ac97c_prepare_dma(chip, substream,
+-                              DMA_TO_DEVICE);
++      if (cpu_is_at32ap7000()) {
++              if (!test_bit(DMA_TX_READY, &chip->flags))
++                      retval = atmel_ac97c_prepare_dma(chip, substream,
++                                      DMA_TO_DEVICE);
++      } else {
++              /* Initialize and start the PDC */
++              writel(runtime->dma_addr, chip->regs + ATMEL_PDC_TPR);
++              writel(block_size / 2, chip->regs + ATMEL_PDC_TCR);
++              writel(runtime->dma_addr + block_size,
++                              chip->regs + ATMEL_PDC_TNPR);
++              writel(block_size / 2, chip->regs + ATMEL_PDC_TNCR);
++      }
+       return retval;
+ }
+@@ -374,9 +401,11 @@
+ {
+       struct atmel_ac97c *chip = snd_pcm_substream_chip(substream);
+       struct snd_pcm_runtime *runtime = substream->runtime;
++      int block_size = frames_to_bytes(runtime, runtime->period_size);
+       unsigned long word = ac97c_readl(chip, ICA);
+       int retval;
++      chip->period = 0;
+       word &= ~(AC97C_CH_MASK(PCM_LEFT) | AC97C_CH_MASK(PCM_RIGHT));
+       /* assign channels to AC97C channel A */
+@@ -415,11 +444,15 @@
+       word |= AC97C_CSR_OVRUN;
+       ac97c_writel(chip, CAMR, word);
+-
+       /* Enable channel A event interrupt */
+       word = ac97c_readl(chip, IMR);
+       word |= AC97C_SR_CAEVT;
+-      ac97c_writel(chip, IER, word);
++      ac97c_writel(chip, IER, /*word*/AC97C_SR_CAEVT);
++
++      /* Enable channel A event interrupt */
++      /*word = ac97c_readl(chip, IMR);
++      word |= AC97C_SR_CAEVT;
++      ac97c_writel(chip, IER, word);*/
+       /* set variable rate if needed */
+       if (runtime->rate != 48000) {
+@@ -438,9 +471,18 @@
+               dev_dbg(&chip->pdev->dev, "could not set rate %d Hz\n",
+                               runtime->rate);
+-      if (!test_bit(DMA_RX_READY, &chip->flags))
+-              retval = atmel_ac97c_prepare_dma(chip, substream,
+-                              DMA_FROM_DEVICE);
++      if (cpu_is_at32ap7000()) {
++              if (!test_bit(DMA_RX_READY, &chip->flags))
++                      retval = atmel_ac97c_prepare_dma(chip, substream,
++                                      DMA_FROM_DEVICE);
++      } else {
++              /* Initialize and start the PDC */
++              writel(runtime->dma_addr, chip->regs + ATMEL_PDC_RPR);
++              writel(block_size / 2, chip->regs + ATMEL_PDC_RCR);
++              writel(runtime->dma_addr + block_size,
++                              chip->regs + ATMEL_PDC_RNPR);
++              writel(block_size / 2, chip->regs + ATMEL_PDC_RNCR);
++      }
+       return retval;
+ }
+@@ -449,7 +491,7 @@
+ atmel_ac97c_playback_trigger(struct snd_pcm_substream *substream, int cmd)
+ {
+       struct atmel_ac97c *chip = snd_pcm_substream_chip(substream);
+-      unsigned long camr;
++      unsigned long camr, ptcr = 0;
+       int retval = 0;
+       camr = ac97c_readl(chip, CAMR);
+@@ -458,15 +500,22 @@
+       case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: /* fall through */
+       case SNDRV_PCM_TRIGGER_RESUME: /* fall through */
+       case SNDRV_PCM_TRIGGER_START:
+-              retval = dw_dma_cyclic_start(chip->dma.tx_chan);
+-              if (retval)
+-                      goto out;
+-              camr |= AC97C_CMR_CENA;
++              if (cpu_is_at32ap7000()) {
++                      retval = dw_dma_cyclic_start(chip->dma.tx_chan);
++                      if (retval)
++                              goto out;
++              } else {
++                      ptcr = ATMEL_PDC_TXTEN;
++              }
++              camr |= AC97C_CMR_CENA | AC97C_CSR_ENDTX;
+               break;
+       case SNDRV_PCM_TRIGGER_PAUSE_PUSH: /* fall through */
+       case SNDRV_PCM_TRIGGER_SUSPEND: /* fall through */
+       case SNDRV_PCM_TRIGGER_STOP:
+-              dw_dma_cyclic_stop(chip->dma.tx_chan);
++              if (cpu_is_at32ap7000())
++                      dw_dma_cyclic_stop(chip->dma.tx_chan);
++              else
++                      ptcr = ATMEL_PDC_TXTDIS;
+               if (chip->opened <= 1)
+                       camr &= ~AC97C_CMR_CENA;
+               break;
+@@ -476,6 +525,8 @@
+       }
+       ac97c_writel(chip, CAMR, camr);
++      if (!cpu_is_at32ap7000())
++              writel(ptcr, chip->regs + ATMEL_PDC_PTCR);
+ out:
+       return retval;
+ }
+@@ -484,7 +535,7 @@
+ atmel_ac97c_capture_trigger(struct snd_pcm_substream *substream, int cmd)
+ {
+       struct atmel_ac97c *chip = snd_pcm_substream_chip(substream);
+-      unsigned long camr;
++      unsigned long camr, ptcr = 0;
+       int retval = 0;
+       camr = ac97c_readl(chip, CAMR);
+@@ -493,15 +544,22 @@
+       case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: /* fall through */
+       case SNDRV_PCM_TRIGGER_RESUME: /* fall through */
+       case SNDRV_PCM_TRIGGER_START:
+-              retval = dw_dma_cyclic_start(chip->dma.rx_chan);
+-              if (retval)
+-                      goto out;
++              if (cpu_is_at32ap7000()) {
++                      retval = dw_dma_cyclic_start(chip->dma.rx_chan);
++                      if (retval)
++                              goto out;
++              } else {
++                      ptcr = ATMEL_PDC_RXTEN;
++              }
+               camr |= AC97C_CMR_CENA;
+               break;
+       case SNDRV_PCM_TRIGGER_PAUSE_PUSH: /* fall through */
+       case SNDRV_PCM_TRIGGER_SUSPEND: /* fall through */
+       case SNDRV_PCM_TRIGGER_STOP:
+-              dw_dma_cyclic_stop(chip->dma.rx_chan);
++              if (cpu_is_at32ap7000())
++                      dw_dma_cyclic_stop(chip->dma.rx_chan);
++              else
++                      ptcr = ATMEL_PDC_RXTDIS;
+               if (chip->opened <= 1)
+                       camr &= ~AC97C_CMR_CENA;
+               break;
+@@ -511,6 +569,8 @@
+       }
+       ac97c_writel(chip, CAMR, camr);
++      if (!cpu_is_at32ap7000())
++              writel(ptcr, chip->regs + ATMEL_PDC_PTCR);
+ out:
+       return retval;
+ }
+@@ -523,7 +583,10 @@
+       snd_pcm_uframes_t       frames;
+       unsigned long           bytes;
+-      bytes = dw_dma_get_src_addr(chip->dma.tx_chan);
++      if (cpu_is_at32ap7000())
++              bytes = dw_dma_get_src_addr(chip->dma.tx_chan);
++      else
++              bytes = readl(chip->regs + ATMEL_PDC_TPR);
+       bytes -= runtime->dma_addr;
+       frames = bytes_to_frames(runtime, bytes);
+@@ -540,7 +603,10 @@
+       snd_pcm_uframes_t       frames;
+       unsigned long           bytes;
+-      bytes = dw_dma_get_dst_addr(chip->dma.rx_chan);
++      if (cpu_is_at32ap7000())
++              bytes = dw_dma_get_dst_addr(chip->dma.rx_chan);
++      else
++              bytes = readl(chip->regs + ATMEL_PDC_RPR);
+       bytes -= runtime->dma_addr;
+       frames = bytes_to_frames(runtime, bytes);
+@@ -578,20 +644,67 @@
+       u32                     sr     = ac97c_readl(chip, SR);
+       u32                     casr   = ac97c_readl(chip, CASR);
+       u32                     cosr   = ac97c_readl(chip, COSR);
++      u32                     camr   = ac97c_readl(chip, CAMR);
+       if (sr & AC97C_SR_CAEVT) {
+-              dev_info(&chip->pdev->dev, "channel A event%s%s%s%s%s%s\n",
++              struct snd_pcm_runtime *runtime;
++              int offset, next_period, block_size;
++              dev_dbg(&chip->pdev->dev, "channel A event%s%s%s%s%s%s\n",
+                               casr & AC97C_CSR_OVRUN   ? " OVRUN"   : "",
+                               casr & AC97C_CSR_RXRDY   ? " RXRDY"   : "",
+                               casr & AC97C_CSR_UNRUN   ? " UNRUN"   : "",
+                               casr & AC97C_CSR_TXEMPTY ? " TXEMPTY" : "",
+                               casr & AC97C_CSR_TXRDY   ? " TXRDY"   : "",
+                               !casr                    ? " NONE"    : "");
++              if (!cpu_is_at32ap7000()) {
++                      if ((casr & camr) & AC97C_CSR_ENDTX) {
++                              runtime = chip->playback_substream->runtime;
++                              block_size = frames_to_bytes(runtime,
++                                              runtime->period_size);
++                              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;
++
++                              writel(runtime->dma_addr + offset,
++                                              chip->regs + ATMEL_PDC_TNPR);
++                              writel(block_size / 2,
++                                              chip->regs + ATMEL_PDC_TNCR);
++
++                              snd_pcm_period_elapsed(
++                                              chip->playback_substream);
++                      }
++                      if ((casr & camr) & AC97C_CSR_ENDRX) {
++                              runtime = chip->capture_substream->runtime;
++                              block_size = frames_to_bytes(runtime,
++                                              runtime->period_size);
++                              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;
++
++                              writel(runtime->dma_addr + offset,
++                                              chip->regs + ATMEL_PDC_RNPR);
++                              writel(block_size / 2,
++                                              chip->regs + ATMEL_PDC_RNCR);
++                              snd_pcm_period_elapsed(chip->capture_substream);
++                      }
++              }
+               retval = IRQ_HANDLED;
+       }
+       if (sr & AC97C_SR_COEVT) {
+-              dev_info(&chip->pdev->dev, "codec channel event%s%s%s%s%s\n",
++              dev_dbg(&chip->pdev->dev, "codec channel event%s%s%s%s%s\n",
+                               cosr & AC97C_CSR_OVRUN   ? " OVRUN"   : "",
+                               cosr & AC97C_CSR_RXRDY   ? " RXRDY"   : "",
+                               cosr & AC97C_CSR_TXEMPTY ? " TXEMPTY" : "",
+@@ -608,15 +721,50 @@
+       return retval;
+ }
++static struct ac97_pcm at91_ac97_pcm_defs[] __devinitdata = {
++      /* Playback */
++      {
++              .exclusive = 1,
++              .r = { {
++                      .slots = ((1 << AC97_SLOT_PCM_LEFT)
++                                | (1 << AC97_SLOT_PCM_RIGHT)),
++              } },
++      },
++      /* 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 atmel_ac97c_pcm_new(struct atmel_ac97c *chip)
+ {
+       struct snd_pcm          *pcm;
+       struct snd_pcm_hardware hw = atmel_ac97c_hw;
+-      int                     capture, playback, retval;
++      int                     capture, playback, retval, err;
+       capture = test_bit(DMA_RX_CHAN_PRESENT, &chip->flags);
+       playback = test_bit(DMA_TX_CHAN_PRESENT, &chip->flags);
++      if (!cpu_is_at32ap7000()) {
++              err = snd_ac97_pcm_assign(chip->ac97_bus,
++                              ARRAY_SIZE(at91_ac97_pcm_defs),
++                              at91_ac97_pcm_defs);
++              if (err)
++                      return err;
++      }
+       retval = snd_pcm_new(chip->card, chip->card->shortname,
+                       chip->pdev->id, playback, capture, &pcm);
+       if (retval)
+@@ -775,7 +923,12 @@
+               return -ENXIO;
+       }
+-      pclk = clk_get(&pdev->dev, "pclk");
++      if (cpu_is_at32ap7000()) {
++              pclk = clk_get(&pdev->dev, "pclk");
++      } else {
++              pclk = clk_get(&pdev->dev, "ac97_clk");
++      }
++
+       if (IS_ERR(pclk)) {
+               dev_dbg(&pdev->dev, "no peripheral clock\n");
+               return PTR_ERR(pclk);
+@@ -844,43 +997,52 @@
+               goto err_ac97_bus;
+       }
+-      if (pdata->rx_dws.dma_dev) {
+-              struct dw_dma_slave *dws = &pdata->rx_dws;
+-              dma_cap_mask_t mask;
++      if (cpu_is_at32ap7000()) {
++              if (pdata->rx_dws.dma_dev) {
++                      struct dw_dma_slave *dws = &pdata->rx_dws;
++                      dma_cap_mask_t mask;
+-              dws->rx_reg = regs->start + AC97C_CARHR + 2;
++                      dws->rx_reg = regs->start + AC97C_CARHR + 2;
+-              dma_cap_zero(mask);
+-              dma_cap_set(DMA_SLAVE, mask);
++                      dma_cap_zero(mask);
++                      dma_cap_set(DMA_SLAVE, mask);
+-              chip->dma.rx_chan = dma_request_channel(mask, filter, dws);
++                      chip->dma.rx_chan = dma_request_channel(mask, filter,
++                                      dws);
+-              dev_info(&chip->pdev->dev, "using %s for DMA RX\n",
++                      dev_info(&chip->pdev->dev, "using %s for DMA RX\n",
+                               dev_name(&chip->dma.rx_chan->dev->device));
+-              set_bit(DMA_RX_CHAN_PRESENT, &chip->flags);
+-      }
++                      set_bit(DMA_RX_CHAN_PRESENT, &chip->flags);
++              }
+-      if (pdata->tx_dws.dma_dev) {
+-              struct dw_dma_slave *dws = &pdata->tx_dws;
+-              dma_cap_mask_t mask;
++              if (pdata->tx_dws.dma_dev) {
++                      struct dw_dma_slave *dws = &pdata->tx_dws;
++                      dma_cap_mask_t mask;
+-              dws->tx_reg = regs->start + AC97C_CATHR + 2;
++                      dws->tx_reg = regs->start + AC97C_CATHR + 2;
+-              dma_cap_zero(mask);
+-              dma_cap_set(DMA_SLAVE, mask);
++                      dma_cap_zero(mask);
++                      dma_cap_set(DMA_SLAVE, mask);
+-              chip->dma.tx_chan = dma_request_channel(mask, filter, dws);
++                      chip->dma.tx_chan = dma_request_channel(mask, filter,
++                                      dws);
+-              dev_info(&chip->pdev->dev, "using %s for DMA TX\n",
++                      dev_info(&chip->pdev->dev, "using %s for DMA TX\n",
+                               dev_name(&chip->dma.tx_chan->dev->device));
+-              set_bit(DMA_TX_CHAN_PRESENT, &chip->flags);
+-      }
++                      set_bit(DMA_TX_CHAN_PRESENT, &chip->flags);
++              }
+-      if (!test_bit(DMA_RX_CHAN_PRESENT, &chip->flags) &&
+-                      !test_bit(DMA_TX_CHAN_PRESENT, &chip->flags)) {
+-              dev_dbg(&pdev->dev, "DMA not available\n");
+-              retval = -ENODEV;
+-              goto err_dma;
++              if (!test_bit(DMA_RX_CHAN_PRESENT, &chip->flags) &&
++                              !test_bit(DMA_TX_CHAN_PRESENT, &chip->flags)) {
++                      dev_dbg(&pdev->dev, "DMA not available\n");
++                      retval = -ENODEV;
++                      goto err_dma;
++              }
++      } else {
++              /* Just pretend that we have DMA channel(for at91 i is actually
++               * the PDC */
++              set_bit(DMA_RX_CHAN_PRESENT, &chip->flags);
++              set_bit(DMA_TX_CHAN_PRESENT, &chip->flags);
+       }
+       retval = atmel_ac97c_pcm_new(chip);
+@@ -897,20 +1059,22 @@
+       platform_set_drvdata(pdev, card);
+-      dev_info(&pdev->dev, "Atmel AC97 controller at 0x%p\n",
+-                      chip->regs);
++      dev_info(&pdev->dev, "Atmel AC97 controller at 0x%p, irq = %d\n",
++                      chip->regs, irq);
+       return 0;
+ err_dma:
+-      if (test_bit(DMA_RX_CHAN_PRESENT, &chip->flags))
+-              dma_release_channel(chip->dma.rx_chan);
+-      if (test_bit(DMA_TX_CHAN_PRESENT, &chip->flags))
+-              dma_release_channel(chip->dma.tx_chan);
+-      clear_bit(DMA_RX_CHAN_PRESENT, &chip->flags);
+-      clear_bit(DMA_TX_CHAN_PRESENT, &chip->flags);
+-      chip->dma.rx_chan = NULL;
+-      chip->dma.tx_chan = NULL;
++      if (cpu_is_at32ap7000()) {
++              if (test_bit(DMA_RX_CHAN_PRESENT, &chip->flags))
++                      dma_release_channel(chip->dma.rx_chan);
++              if (test_bit(DMA_TX_CHAN_PRESENT, &chip->flags))
++                      dma_release_channel(chip->dma.tx_chan);
++              clear_bit(DMA_RX_CHAN_PRESENT, &chip->flags);
++              clear_bit(DMA_TX_CHAN_PRESENT, &chip->flags);
++              chip->dma.rx_chan = NULL;
++              chip->dma.tx_chan = NULL;
++      }
+ err_ac97_bus:
+       snd_card_set_dev(card, NULL);
+@@ -934,12 +1098,13 @@
+       struct snd_card *card = platform_get_drvdata(pdev);
+       struct atmel_ac97c *chip = card->private_data;
+-      if (test_bit(DMA_RX_READY, &chip->flags))
+-              dw_dma_cyclic_stop(chip->dma.rx_chan);
+-      if (test_bit(DMA_TX_READY, &chip->flags))
+-              dw_dma_cyclic_stop(chip->dma.tx_chan);
++      if (cpu_is_at32ap7000()) {
++              if (test_bit(DMA_RX_READY, &chip->flags))
++                      dw_dma_cyclic_stop(chip->dma.rx_chan);
++              if (test_bit(DMA_TX_READY, &chip->flags))
++                      dw_dma_cyclic_stop(chip->dma.tx_chan);
++      }
+       clk_disable(chip->pclk);
+-
+       return 0;
+ }
+@@ -949,11 +1114,12 @@
+       struct atmel_ac97c *chip = card->private_data;
+       clk_enable(chip->pclk);
+-      if (test_bit(DMA_RX_READY, &chip->flags))
+-              dw_dma_cyclic_start(chip->dma.rx_chan);
+-      if (test_bit(DMA_TX_READY, &chip->flags))
+-              dw_dma_cyclic_start(chip->dma.tx_chan);
+-
++      if (cpu_is_at32ap7000()) {
++              if (test_bit(DMA_RX_READY, &chip->flags))
++                      dw_dma_cyclic_start(chip->dma.rx_chan);
++              if (test_bit(DMA_TX_READY, &chip->flags))
++                      dw_dma_cyclic_start(chip->dma.tx_chan);
++      }
+       return 0;
+ }
+ #else
+@@ -978,14 +1144,16 @@
+       iounmap(chip->regs);
+       free_irq(chip->irq, chip);
+-      if (test_bit(DMA_RX_CHAN_PRESENT, &chip->flags))
+-              dma_release_channel(chip->dma.rx_chan);
+-      if (test_bit(DMA_TX_CHAN_PRESENT, &chip->flags))
+-              dma_release_channel(chip->dma.tx_chan);
+-      clear_bit(DMA_RX_CHAN_PRESENT, &chip->flags);
+-      clear_bit(DMA_TX_CHAN_PRESENT, &chip->flags);
+-      chip->dma.rx_chan = NULL;
+-      chip->dma.tx_chan = NULL;
++      if (cpu_is_at32ap7000()) {
++              if (test_bit(DMA_RX_CHAN_PRESENT, &chip->flags))
++                      dma_release_channel(chip->dma.rx_chan);
++              if (test_bit(DMA_TX_CHAN_PRESENT, &chip->flags))
++                      dma_release_channel(chip->dma.tx_chan);
++              clear_bit(DMA_RX_CHAN_PRESENT, &chip->flags);
++              clear_bit(DMA_TX_CHAN_PRESENT, &chip->flags);
++              chip->dma.rx_chan = NULL;
++              chip->dma.tx_chan = NULL;
++      }
+       snd_card_set_dev(card, NULL);
+       snd_card_free(card);
+Index: linux-2.6.30/arch/arm/mach-at91/at91sam9263_devices.c
+===================================================================
+--- linux-2.6.30.orig/arch/arm/mach-at91/at91sam9263_devices.c 2011-02-01 16:40:18.000000000 +0100
++++ linux-2.6.30/arch/arm/mach-at91/at91sam9263_devices.c      2011-02-01 16:40:30.161007816 +0100
+@@ -707,9 +707,9 @@
+  *  AC97
+  * -------------------------------------------------------------------- */
+-#if defined(CONFIG_SND_AT91_AC97) || defined(CONFIG_SND_AT91_AC97_MODULE)
++#if defined(CONFIG_SND_ATMEL_AC97C) || defined(CONFIG_SND_ATMEL_AC97C_MODULE)
+ static u64 ac97_dmamask = DMA_BIT_MASK(32);
+-static struct atmel_ac97_data ac97_data;
++static struct ac97c_platform_data ac97_data;
+ static struct resource ac97_resources[] = {
+       [0] = {
+@@ -725,8 +725,8 @@
+ };
+ static struct platform_device at91sam9263_ac97_device = {
+-      .name           = "ac97c",
+-      .id             = 1,
++      .name           = "atmel_ac97c",
++      .id             = 0,
+       .dev            = {
+                               .dma_mask               = &ac97_dmamask,
+                               .coherent_dma_mask      = DMA_BIT_MASK(32),
+@@ -736,7 +736,7 @@
+       .num_resources  = ARRAY_SIZE(ac97_resources),
+ };
+-void __init at91_add_device_ac97(struct atmel_ac97_data *data)
++void __init at91_add_device_ac97(struct ac97c_platform_data *data)
+ {
+       if (!data)
+               return;
+@@ -754,7 +754,7 @@
+       platform_device_register(&at91sam9263_ac97_device);
+ }
+ #else
+-void __init at91_add_device_ac97(struct atmel_ac97_data *data) {}
++void __init at91_add_device_ac97(struct ac97c_platform_data *data) {}
+ #endif
+Index: linux-2.6.30/arch/arm/mach-at91/board-sam9263ek.c
+===================================================================
+--- linux-2.6.30.orig/arch/arm/mach-at91/board-sam9263ek.c     2011-02-01 16:40:18.000000000 +0100
++++ linux-2.6.30/arch/arm/mach-at91/board-sam9263ek.c  2011-02-01 16:40:30.169008345 +0100
+@@ -155,7 +155,7 @@
+ static struct at91_mmc_data __initdata ek_mmc_data = {
+       .wire4          = 1,
+       .det_pin        = AT91_PIN_PE18,
+-      .wp_pin         = AT91_PIN_PE19,
++//    .wp_pin         = ... not connected
+ //    .vcc_pin        = ... not connected
+ };
+@@ -365,9 +365,9 @@
+ /*
+  * AC97
++ * reset_pin is not connected: NRST
+  */
+-static struct atmel_ac97_data ek_ac97_data = {
+-      .reset_pin      = AT91_PIN_PA13,
++static struct ac97c_platform_data ek_ac97_data = {
+ };
+Index: linux-2.6.30/drivers/input/touchscreen/atmel_tsadcc.c
+===================================================================
+--- linux-2.6.30.orig/drivers/input/touchscreen/atmel_tsadcc.c 2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/drivers/input/touchscreen/atmel_tsadcc.c      2011-02-01 16:40:30.169008345 +0100
+@@ -22,6 +22,8 @@
+ #include <linux/clk.h>
+ #include <linux/platform_device.h>
+ #include <linux/io.h>
++#include <mach/board.h>
++#include <mach/cpu.h>
+ /* Register definitions based on AT91SAM9RL64 preliminary draft datasheet */
+@@ -36,7 +38,9 @@
+ #define         ATMEL_TSADCC_LOWRES   (1    <<  4)    /* Resolution selection */
+ #define         ATMEL_TSADCC_SLEEP    (1    <<  5)    /* Sleep mode */
+ #define         ATMEL_TSADCC_PENDET   (1    <<  6)    /* Pen Detect selection */
++#define         ATMEL_TSADCC_PRES     (1    <<  7)    /* Pressure Measurement Selection */
+ #define         ATMEL_TSADCC_PRESCAL  (0x3f <<  8)    /* Prescalar Rate Selection */
++#define         ATMEL_TSADCC_EPRESCAL (0xff <<  8)    /* Prescalar Rate Selection (Extended) */
+ #define         ATMEL_TSADCC_STARTUP  (0x7f << 16)    /* Start Up time */
+ #define         ATMEL_TSADCC_SHTIM    (0xf  << 24)    /* Sample & Hold time */
+ #define         ATMEL_TSADCC_PENDBC   (0xf  << 28)    /* Pen Detect debouncing time */
+@@ -84,7 +88,13 @@
+ #define ATMEL_TSADCC_CDR4     0x40    /* Channel Data 4 */
+ #define ATMEL_TSADCC_CDR5     0x44    /* Channel Data 5 */
+-#define ADC_CLOCK     1000000
++#define ATMEL_TSADCC_XPOS     0x50
++#define ATMEL_TSADCC_Z1DAT    0x54
++#define ATMEL_TSADCC_Z2DAT    0x58
++
++#define PRESCALER_VAL(x)      ((x) >> 8)
++
++#define ADC_DEFAULT_CLOCK     100000
+ struct atmel_tsadcc {
+       struct input_dev        *input;
+@@ -124,6 +134,7 @@
+               input_report_key(input_dev, BTN_TOUCH, 0);
+               ts_dev->bufferedmeasure = 0;
++              input_report_abs(input_dev, ABS_PRESSURE, 0);
+               input_sync(input_dev);
+       } else if (status & ATMEL_TSADCC_PENCNT) {
+@@ -148,6 +159,7 @@
+                       input_report_abs(input_dev, ABS_X, ts_dev->prev_absx);
+                       input_report_abs(input_dev, ABS_Y, ts_dev->prev_absy);
+                       input_report_key(input_dev, BTN_TOUCH, 1);
++                      input_report_abs(input_dev, ABS_PRESSURE, 7500);
+                       input_sync(input_dev);
+               } else
+                       ts_dev->bufferedmeasure = 1;
+@@ -172,6 +184,7 @@
+       struct atmel_tsadcc     *ts_dev;
+       struct input_dev        *input_dev;
+       struct resource         *res;
++      struct at91_tsadcc_data *pdata = pdev->dev.platform_data;
+       int             err = 0;
+       unsigned int    prsc;
+       unsigned int    reg;
+@@ -242,11 +255,12 @@
+       input_dev->phys = ts_dev->phys;
+       input_dev->dev.parent = &pdev->dev;
+-      input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);
+-      input_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH);
+-
++      __set_bit(EV_ABS, input_dev->evbit);
+       input_set_abs_params(input_dev, ABS_X, 0, 0x3FF, 0, 0);
+       input_set_abs_params(input_dev, ABS_Y, 0, 0x3FF, 0, 0);
++      input_set_abs_params(input_dev, ABS_PRESSURE, 0, 15000, 0, 0);
++
++      input_set_capability(input_dev, EV_KEY, BTN_TOUCH);
+       /* clk_enable() always returns 0, no need to check it */
+       clk_enable(ts_dev->clk);
+@@ -254,19 +268,37 @@
+       prsc = clk_get_rate(ts_dev->clk);
+       dev_info(&pdev->dev, "Master clock is set at: %d Hz\n", prsc);
+-      prsc = prsc / ADC_CLOCK / 2 - 1;
++      if (!pdata)
++              goto err_fail;
++
++      if (!pdata->adc_clock)
++              pdata->adc_clock = ADC_DEFAULT_CLOCK;
++
++      prsc = (prsc / (2 * pdata->adc_clock)) - 1;
++
++      /* saturate if this value is too high */
++      if (cpu_is_at91sam9rl()) {
++              if (prsc > PRESCALER_VAL(ATMEL_TSADCC_PRESCAL))
++                      prsc = PRESCALER_VAL(ATMEL_TSADCC_PRESCAL);
++      } else {
++              if (prsc > PRESCALER_VAL(ATMEL_TSADCC_EPRESCAL))
++                      prsc = PRESCALER_VAL(ATMEL_TSADCC_EPRESCAL);
++      }
++
++      dev_info(&pdev->dev, "Prescaler is set at: %d\n", prsc);
+       reg = ATMEL_TSADCC_TSAMOD_TS_ONLY_MODE          |
+               ((0x00 << 5) & ATMEL_TSADCC_SLEEP)      |       /* Normal Mode */
+               ((0x01 << 6) & ATMEL_TSADCC_PENDET)     |       /* Enable Pen Detect */
+-              ((prsc << 8) & ATMEL_TSADCC_PRESCAL)    |       /* PRESCAL */
+-              ((0x13 << 16) & ATMEL_TSADCC_STARTUP)   |       /* STARTUP */
+-              ((0x0F << 28) & ATMEL_TSADCC_PENDBC);           /* PENDBC */
++              (prsc << 8)                             |
++              ((0x26 << 16) & ATMEL_TSADCC_STARTUP)   |
++              ((pdata->pendet_debounce << 28) & ATMEL_TSADCC_PENDBC);
+       atmel_tsadcc_write(ATMEL_TSADCC_CR, ATMEL_TSADCC_SWRST);
+       atmel_tsadcc_write(ATMEL_TSADCC_MR, reg);
+       atmel_tsadcc_write(ATMEL_TSADCC_TRGR, ATMEL_TSADCC_TRGMOD_NONE);
+-      atmel_tsadcc_write(ATMEL_TSADCC_TSR, (0x3 << 24) & ATMEL_TSADCC_TSSHTIM);
++      atmel_tsadcc_write(ATMEL_TSADCC_TSR,
++              (pdata->ts_sample_hold_time << 24) & ATMEL_TSADCC_TSSHTIM);
+       atmel_tsadcc_read(ATMEL_TSADCC_SR);
+       atmel_tsadcc_write(ATMEL_TSADCC_IER, ATMEL_TSADCC_PENCNT);
+Index: linux-2.6.30/drivers/input/touchscreen/Kconfig
+===================================================================
+--- linux-2.6.30.orig/drivers/input/touchscreen/Kconfig        2011-02-01 16:40:18.000000000 +0100
++++ linux-2.6.30/drivers/input/touchscreen/Kconfig     2011-02-01 16:40:30.165043750 +0100
+@@ -277,7 +277,7 @@
+ config TOUCHSCREEN_ATMEL_TSADCC
+       tristate "Atmel Touchscreen Interface"
+-      depends on ARCH_AT91SAM9RL
++      depends on ARCH_AT91SAM9RL || ARCH_AT91SAM9G45
+       default y
+       help
+         Say Y here if you have a 4-wire touchscreen connected to the
+Index: linux-2.6.30/arch/arm/mach-at91/pm_slowclock.S
+===================================================================
+--- linux-2.6.30.orig/arch/arm/mach-at91/pm_slowclock.S        2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/arch/arm/mach-at91/pm_slowclock.S     2011-02-01 16:40:30.165043750 +0100
+@@ -18,7 +18,7 @@
+ #ifdef CONFIG_ARCH_AT91RM9200
+ #include <mach/at91rm9200_mc.h>
+-#elif defined(CONFIG_ARCH_AT91CAP9)
++#elif defined(CONFIG_ARCH_AT91CAP9) || defined(CONFIG_ARCH_AT91SAM9G45)
+ #include <mach/at91cap9_ddrsdr.h>
+ #else
+ #include <mach/at91sam9_sdramc.h>
+@@ -34,6 +34,9 @@
+ #warning Assuming EB1 SDRAM controller is *NOT* used
+ #endif
++#ifdef CONFIG_ARCH_AT91SAM9G45
++#define AT91_DDRSDRC  AT91_DDRSDRC1
++#endif
+ /*
+  * When SLOWDOWN_MASTER_CLOCK is defined we will also slow down the Master
+  * clock during suspend by adjusting its prescalar and divisor.
+@@ -127,7 +130,7 @@
+       /* Put SDRAM in self-refresh mode */
+       mov     r3, #1
+       str     r3, [r2, #AT91_SDRAMC_SRR]
+-#elif defined(CONFIG_ARCH_AT91CAP9)
++#elif defined(CONFIG_ARCH_AT91CAP9) || defined(CONFIG_ARCH_AT91SAM9G45)
+       /* Enable SDRAM self-refresh mode */
+       ldr     r3, [r2, #AT91_DDRSDRC_LPR - AT91_DDRSDRC]
+       str     r3, .saved_sam9_lpr
+@@ -239,7 +242,7 @@
+ #ifdef CONFIG_ARCH_AT91RM9200
+       /* Do nothing - self-refresh is automatically disabled. */
+-#elif defined(CONFIG_ARCH_AT91CAP9)
++#elif defined(CONFIG_ARCH_AT91CAP9) || defined(CONFIG_ARCH_AT91SAM9G45)
+       /* Restore LPR on AT91CAP9 */
+       ldr     r3, .saved_sam9_lpr
+       str     r3, [r2, #AT91_DDRSDRC_LPR - AT91_DDRSDRC]
+@@ -271,7 +274,7 @@
+ #ifdef CONFIG_ARCH_AT91RM9200
+ .at91_va_base_sdramc:
+       .word AT91_VA_BASE_SYS
+-#elif defined(CONFIG_ARCH_AT91CAP9)
++#elif defined(CONFIG_ARCH_AT91CAP9) || defined(CONFIG_ARCH_AT91SAM9G45)
+ .at91_va_base_sdramc:
+       .word AT91_VA_BASE_SYS + AT91_DDRSDRC
+ #else
+Index: linux-2.6.30/arch/arm/tools/mach-types
+===================================================================
+--- linux-2.6.30.orig/arch/arm/tools/mach-types        2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/arch/arm/tools/mach-types     2011-02-01 16:40:30.169008345 +0100
+@@ -2245,3 +2245,4 @@
+ omap3_wl_ff           MACH_OMAP3_WL_FF        OMAP3_WL_FF             2258
+ simcom                        MACH_SIMCOM             SIMCOM                  2259
+ mcwebio                       MACH_MCWEBIO            MCWEBIO                 2260
++at91sam9g20ek_2mmc    MACH_AT91SAM9G20EK_2MMC AT91SAM9G20EK_2MMC      2288
+Index: linux-2.6.30/drivers/misc/Kconfig
+===================================================================
+--- linux-2.6.30.orig/drivers/misc/Kconfig     2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/drivers/misc/Kconfig  2011-02-01 16:40:30.169008345 +0100
+@@ -15,7 +15,7 @@
+ config ATMEL_PWM
+       tristate "Atmel AT32/AT91 PWM support"
+-      depends on AVR32 || ARCH_AT91SAM9263 || ARCH_AT91SAM9RL || ARCH_AT91CAP9
++      depends on AVR32 || ARCH_AT91SAM9263 || ARCH_AT91SAM9RL || ARCH_AT91CAP9 || ARCH_AT91SAM9G45
+       help
+         This option enables device driver support for the PWM channels
+         on certain Atmel processors.  Pulse Width Modulation is used for
+Index: linux-2.6.30/arch/arm/configs/at91sam9263ek_defconfig
+===================================================================
+--- linux-2.6.30.orig/arch/arm/configs/at91sam9263ek_defconfig 2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/arch/arm/configs/at91sam9263ek_defconfig      2011-02-01 16:40:30.197007464 +0100
+@@ -1,17 +1,18 @@
+ #
+ # Automatically generated make config: don't edit
+-# Linux kernel version: 2.6.24-rc7
+-# Tue Jan  8 22:12:20 2008
++# Linux kernel version: 2.6.30
++# Wed Sep 30 18:40:20 2009
+ #
+ 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_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_HAVE_LATENCYTOP_SUPPORT=y
+ CONFIG_LOCKDEP_SUPPORT=y
+ CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+ CONFIG_HARDIRQS_SW_RESEND=y
+@@ -21,7 +22,7 @@
+ # CONFIG_ARCH_HAS_ILOG2_U64 is not set
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
+-CONFIG_ZONE_DMA=y
++CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
+ CONFIG_VECTORS_BASE=0xffff0000
+ CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+@@ -39,57 +40,82 @@
+ # 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
++
++#
++# RCU Subsystem
++#
++CONFIG_CLASSIC_RCU=y
++# CONFIG_TREE_RCU is not set
++# CONFIG_PREEMPT_RCU is not set
++# CONFIG_TREE_RCU_TRACE is not set
++# CONFIG_PREEMPT_RCU_TRACE is not set
+ # CONFIG_IKCONFIG is not set
+ CONFIG_LOG_BUF_SHIFT=14
++# CONFIG_GROUP_SCHED is not set
+ # 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_SYSFS_DEPRECATED_V2=y
+ # CONFIG_RELAY is not set
++CONFIG_NAMESPACES=y
++# CONFIG_UTS_NS is not set
++# CONFIG_IPC_NS is not set
++# CONFIG_USER_NS is not set
++# CONFIG_PID_NS is not set
++# CONFIG_NET_NS is not set
+ CONFIG_BLK_DEV_INITRD=y
+ CONFIG_INITRAMFS_SOURCE=""
++CONFIG_RD_GZIP=y
++CONFIG_RD_BZIP2=y
++CONFIG_RD_LZMA=y
+ CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+ CONFIG_SYSCTL=y
++CONFIG_ANON_INODES=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_STRIP_ASM_SYMS=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=y
+ CONFIG_SIGNALFD=y
++CONFIG_TIMERFD=y
+ CONFIG_EVENTFD=y
+ CONFIG_SHMEM=y
++CONFIG_AIO=y
+ CONFIG_VM_EVENT_COUNTERS=y
++CONFIG_COMPAT_BRK=y
+ CONFIG_SLAB=y
+ # CONFIG_SLUB is not set
+ # CONFIG_SLOB is not set
++# CONFIG_PROFILING is not set
++# CONFIG_MARKERS is not set
++CONFIG_HAVE_OPROFILE=y
++# CONFIG_KPROBES is not set
++CONFIG_HAVE_KPROBES=y
++CONFIG_HAVE_KRETPROBES=y
++CONFIG_HAVE_CLK=y
++# CONFIG_SLOW_WORK is not set
++CONFIG_HAVE_GENERIC_DMA_COHERENT=y
+ CONFIG_SLABINFO=y
+ CONFIG_RT_MUTEXES=y
+-# CONFIG_TINY_SHMEM is not set
+ CONFIG_BASE_SMALL=0
+ CONFIG_MODULES=y
++# CONFIG_MODULE_FORCE_LOAD is not set
+ CONFIG_MODULE_UNLOAD=y
+ # CONFIG_MODULE_FORCE_UNLOAD is not set
+ # CONFIG_MODVERSIONS 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
++# CONFIG_BLK_DEV_INTEGRITY is not set
+ #
+ # IO Schedulers
+@@ -103,6 +129,7 @@
+ # CONFIG_DEFAULT_CFQ is not set
+ # CONFIG_DEFAULT_NOOP is not set
+ CONFIG_DEFAULT_IOSCHED="anticipatory"
++CONFIG_FREEZER=y
+ #
+ # System Type
+@@ -112,11 +139,10 @@
+ # 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_GEMINI is not set
+ # CONFIG_ARCH_FOOTBRIDGE is not set
+ # CONFIG_ARCH_NETX is not set
+ # CONFIG_ARCH_H720X is not set
+@@ -128,26 +154,26 @@
+ # CONFIG_ARCH_IXP2000 is not set
+ # CONFIG_ARCH_IXP4XX is not set
+ # CONFIG_ARCH_L7200 is not set
++# CONFIG_ARCH_KIRKWOOD is not set
+ # CONFIG_ARCH_KS8695 is not set
+ # CONFIG_ARCH_NS9XXX is not set
++# CONFIG_ARCH_LOKI is not set
++# CONFIG_ARCH_MV78XX0 is not set
+ # CONFIG_ARCH_MXC is not set
++# CONFIG_ARCH_ORION5X is not set
+ # CONFIG_ARCH_PNX4008 is not set
+ # CONFIG_ARCH_PXA is not set
++# CONFIG_ARCH_MMP is not set
+ # CONFIG_ARCH_RPC is not set
+ # CONFIG_ARCH_SA1100 is not set
+ # CONFIG_ARCH_S3C2410 is not set
++# CONFIG_ARCH_S3C64XX is not set
+ # CONFIG_ARCH_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
+-#
++# CONFIG_ARCH_MSM is not set
++# CONFIG_ARCH_W90X900 is not set
+ #
+ # Atmel AT91 System-on-Chip
+@@ -155,15 +181,24 @@
+ # CONFIG_ARCH_AT91RM9200 is not set
+ # CONFIG_ARCH_AT91SAM9260 is not set
+ # CONFIG_ARCH_AT91SAM9261 is not set
++# CONFIG_ARCH_AT91SAM9G10 is not set
+ CONFIG_ARCH_AT91SAM9263=y
+ # CONFIG_ARCH_AT91SAM9RL is not set
++# CONFIG_ARCH_AT91SAM9G20 is not set
++# CONFIG_ARCH_AT91SAM9G45 is not set
++# CONFIG_ARCH_AT91CAP9 is not set
++# CONFIG_ARCH_AT572D940HF is not set
+ # CONFIG_ARCH_AT91X40 is not set
+ CONFIG_AT91_PMC_UNIT=y
++# CONFIG_MACH_NEOCORE926 is not set
+ #
+ # AT91SAM9263 Board Type
+ #
+ CONFIG_MACH_AT91SAM9263EK=y
++# CONFIG_MACH_USB_A9263 is not set
++# CONFIG_MACH_CSB737 is not set
++# CONFIG_MACH_TOTEMNOVA is not set
+ #
+ # AT91 Board Options
+@@ -174,9 +209,16 @@
+ #
+ # AT91 Feature Selections
+ #
+-# CONFIG_AT91_PROGRAMMABLE_CLOCKS is not set
+-# CONFIG_ATMEL_TCLIB is not set
++CONFIG_AT91_PROGRAMMABLE_CLOCKS=y
++# CONFIG_AT91_SLOW_CLOCK is not set
+ CONFIG_AT91_TIMER_HZ=100
++CONFIG_AT91_EARLY_DBGU=y
++# CONFIG_AT91_EARLY_USART0 is not set
++# CONFIG_AT91_EARLY_USART1 is not set
++# CONFIG_AT91_EARLY_USART2 is not set
++# CONFIG_AT91_EARLY_USART3 is not set
++# CONFIG_AT91_EARLY_USART4 is not set
++# CONFIG_AT91_EARLY_USART5 is not set
+ #
+ # Processor Type
+@@ -185,6 +227,7 @@
+ CONFIG_CPU_ARM926T=y
+ CONFIG_CPU_32v5=y
+ CONFIG_CPU_ABRT_EV5TJ=y
++CONFIG_CPU_PABRT_NOIFAR=y
+ CONFIG_CPU_CACHE_VIVT=y
+ CONFIG_CPU_COPY_V4WB=y
+ CONFIG_CPU_TLB_V4WBI=y
+@@ -194,7 +237,7 @@
+ #
+ # Processor Features
+ #
+-# CONFIG_ARM_THUMB is not set
++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
+@@ -211,25 +254,37 @@
+ #
+ # 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_VMSPLIT_3G=y
++# CONFIG_VMSPLIT_2G is not set
++# CONFIG_VMSPLIT_1G is not set
++CONFIG_PAGE_OFFSET=0xC0000000
+ # CONFIG_PREEMPT is not set
+ CONFIG_HZ=100
+-# CONFIG_AEABI is not set
+-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
++CONFIG_AEABI=y
++CONFIG_OABI_COMPAT=y
++# CONFIG_ARCH_HAS_HOLES_MEMORYMODEL is not set
++# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
++# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
++# CONFIG_HIGHMEM is not set
+ CONFIG_SELECT_MEMORY_MODEL=y
+ CONFIG_FLATMEM_MANUAL=y
+ # CONFIG_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_PAGEFLAGS_EXTENDED=y
+ CONFIG_SPLIT_PTLOCK_CPUS=4096
+-# CONFIG_RESOURCES_64BIT is not set
+-CONFIG_ZONE_DMA_FLAG=1
+-CONFIG_BOUNCE=y
++# CONFIG_PHYS_ADDR_T_64BIT is not set
++CONFIG_ZONE_DMA_FLAG=0
+ CONFIG_VIRT_TO_BUS=y
+-# CONFIG_LEDS is not set
++CONFIG_UNEVICTABLE_LRU=y
++CONFIG_HAVE_MLOCK=y
++CONFIG_HAVE_MLOCKED_PAGE_BIT=y
++CONFIG_LEDS=y
++CONFIG_LEDS_CPU=y
+ CONFIG_ALIGNMENT_TRAP=y
+ #
+@@ -242,6 +297,11 @@
+ # CONFIG_KEXEC is not set
+ #
++# CPU Power Management
++#
++# CONFIG_CPU_IDLE is not set
++
++#
+ # Floating point emulation
+ #
+@@ -257,19 +317,21 @@
+ # Userspace binary formats
+ #
+ CONFIG_BINFMT_ELF=y
++# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
++CONFIG_HAVE_AOUT=y
+ # CONFIG_BINFMT_AOUT is not set
+ # CONFIG_BINFMT_MISC is not set
+-# CONFIG_ARTHUR is not set
+ #
+ # Power management options
+ #
+-# CONFIG_PM is not set
+-CONFIG_SUSPEND_UP_POSSIBLE=y
+-
+-#
+-# Networking
+-#
++CONFIG_PM=y
++# CONFIG_PM_DEBUG is not set
++CONFIG_PM_SLEEP=y
++CONFIG_SUSPEND=y
++CONFIG_SUSPEND_FREEZER=y
++# CONFIG_APM_EMULATION is not set
++CONFIG_ARCH_SUSPEND_POSSIBLE=y
+ CONFIG_NET=y
+ #
+@@ -280,15 +342,13 @@
+ CONFIG_UNIX=y
+ # CONFIG_NET_KEY is not set
+ CONFIG_INET=y
+-# CONFIG_IP_MULTICAST is not set
++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=y
+-CONFIG_IP_PNP_RARP=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 is not set
+ # CONFIG_INET_AH is not set
+@@ -306,8 +366,6 @@
+ 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
+@@ -315,6 +373,7 @@
+ # CONFIG_TIPC is not set
+ # CONFIG_ATM is not set
+ # CONFIG_BRIDGE is not set
++# CONFIG_NET_DSA is not set
+ # CONFIG_VLAN_8021Q is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_LLC2 is not set
+@@ -324,24 +383,40 @@
+ # CONFIG_LAPB is not set
+ # CONFIG_ECONET is not set
+ # CONFIG_WAN_ROUTER is not set
++# CONFIG_PHONET is not set
+ # CONFIG_NET_SCHED is not set
++# CONFIG_DCB is not set
+ #
+ # Network testing
+ #
+ # CONFIG_NET_PKTGEN is not set
+ # CONFIG_HAMRADIO is not set
++# CONFIG_CAN is not set
+ # CONFIG_IRDA is not set
+ # CONFIG_BT is not set
+ # CONFIG_AF_RXRPC is not set
+-
+-#
+-# Wireless
+-#
+-# CONFIG_CFG80211 is not set
+-# CONFIG_WIRELESS_EXT is not set
+-# CONFIG_MAC80211 is not set
+-# CONFIG_IEEE80211 is not set
++CONFIG_WIRELESS=y
++CONFIG_CFG80211=y
++# CONFIG_CFG80211_REG_DEBUG is not set
++# CONFIG_WIRELESS_OLD_REGULATORY is not set
++CONFIG_WIRELESS_EXT=y
++CONFIG_WIRELESS_EXT_SYSFS=y
++CONFIG_LIB80211=y
++# CONFIG_LIB80211_DEBUG is not set
++CONFIG_MAC80211=y
++
++#
++# Rate control algorithm selection
++#
++CONFIG_MAC80211_RC_MINSTREL=y
++# CONFIG_MAC80211_RC_DEFAULT_PID is not set
++CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
++CONFIG_MAC80211_RC_DEFAULT="minstrel"
++# CONFIG_MAC80211_MESH is not set
++# CONFIG_MAC80211_LEDS is not set
++# CONFIG_MAC80211_DEBUG_MENU is not set
++# CONFIG_WIMAX is not set
+ # CONFIG_RFKILL is not set
+ # CONFIG_NET_9P is not set
+@@ -355,18 +430,20 @@
+ 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_FW_LOADER=y
++CONFIG_FIRMWARE_IN_KERNEL=y
++CONFIG_EXTRA_FIRMWARE=""
+ # CONFIG_SYS_HYPERVISOR is not set
+ # CONFIG_CONNECTOR is not set
+ CONFIG_MTD=y
+ # CONFIG_MTD_DEBUG is not set
+ # CONFIG_MTD_CONCAT is not set
+ CONFIG_MTD_PARTITIONS=y
++# CONFIG_MTD_TESTS is not set
+ # CONFIG_MTD_REDBOOT_PARTS is not set
+ CONFIG_MTD_CMDLINE_PARTS=y
+ # CONFIG_MTD_AFS_PARTS is not set
++# CONFIG_MTD_AR7_PARTS is not set
+ #
+ # User Modules And Translation Layers
+@@ -410,6 +487,8 @@
+ # Self-contained MTD device drivers
+ #
+ CONFIG_MTD_DATAFLASH=y
++# CONFIG_MTD_DATAFLASH_WRITE_VERIFY is not set
++# CONFIG_MTD_DATAFLASH_OTP is not set
+ # CONFIG_MTD_M25P80 is not set
+ # CONFIG_MTD_SLRAM is not set
+ # CONFIG_MTD_PHRAM is not set
+@@ -426,15 +505,24 @@
+ # 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_GPIO is not set
+ CONFIG_MTD_NAND_IDS=y
+ # CONFIG_MTD_NAND_DISKONCHIP is not set
+ CONFIG_MTD_NAND_ATMEL=y
++CONFIG_MTD_NAND_ATMEL_ECC_SOFT=y
++# CONFIG_MTD_NAND_ATMEL_ECC_HW is not set
++# CONFIG_MTD_NAND_ATMEL_ECC_NONE is not set
+ # CONFIG_MTD_NAND_NANDSIM is not set
+ # CONFIG_MTD_NAND_PLATFORM is not set
+ # CONFIG_MTD_ALAUDA is not set
+ # CONFIG_MTD_ONENAND is not set
+ #
++# LPDDR flash memory drivers
++#
++# CONFIG_MTD_LPDDR is not set
++
++#
+ # UBI - Unsorted block images
+ #
+ # CONFIG_MTD_UBI is not set
+@@ -446,14 +534,30 @@
+ # 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_COUNT=4
+ CONFIG_BLK_DEV_RAM_SIZE=8192
+-CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
++# CONFIG_BLK_DEV_XIP is not set
+ # CONFIG_CDROM_PKTCDVD is not set
+ # CONFIG_ATA_OVER_ETH is not set
+ CONFIG_MISC_DEVICES=y
++CONFIG_ATMEL_PWM=y
++CONFIG_ATMEL_TCLIB=y
++CONFIG_ATMEL_TCB_CLKSRC=y
++CONFIG_ATMEL_TCB_CLKSRC_BLOCK=0
++# CONFIG_ICS932S401 is not set
++# CONFIG_ATMEL_SSC is not set
++# CONFIG_ENCLOSURE_SERVICES is not set
++# CONFIG_ISL29003 is not set
++# CONFIG_C2PORT is not set
++
++#
++# EEPROM support
++#
++# CONFIG_EEPROM_AT24 is not set
++# CONFIG_EEPROM_AT25 is not set
+ # CONFIG_EEPROM_93CX6 is not set
+-CONFIG_ATMEL_SSC=y
++CONFIG_HAVE_IDE=y
++# CONFIG_IDE is not set
+ #
+ # SCSI device support
+@@ -492,13 +596,13 @@
+ # 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 is not set
++# CONFIG_SCSI_DH is not set
++# CONFIG_SCSI_OSD_INITIATOR is not set
+ # CONFIG_ATA is not set
+ # CONFIG_MD is not set
+ CONFIG_NETDEVICES=y
+-# CONFIG_NETDEVICES_MULTIQUEUE is not set
++# CONFIG_COMPAT_NET_DEV_OPS is not set
+ # CONFIG_DUMMY is not set
+ # CONFIG_BONDING is not set
+ # CONFIG_MACVLAN is not set
+@@ -511,7 +615,7 @@
+ # MII PHY device drivers
+ #
+ # CONFIG_MARVELL_PHY is not set
+-# CONFIG_DAVICOM_PHY is not set
++CONFIG_DAVICOM_PHY=y
+ # CONFIG_QSEMI_PHY is not set
+ # CONFIG_LXT_PHY is not set
+ # CONFIG_CICADA_PHY is not set
+@@ -519,27 +623,72 @@
+ # CONFIG_SMSC_PHY is not set
+ # CONFIG_BROADCOM_PHY is not set
+ # CONFIG_ICPLUS_PHY is not set
++# CONFIG_REALTEK_PHY is not set
++# CONFIG_NATIONAL_PHY is not set
++# CONFIG_STE10XP is not set
++# CONFIG_LSI_ET1011C_PHY is not set
+ # CONFIG_FIXED_PHY is not set
+ # CONFIG_MDIO_BITBANG is not set
+ CONFIG_NET_ETHERNET=y
+ CONFIG_MII=y
+ CONFIG_MACB=y
++CONFIG_MACB_TX_SRAM=y
+ # CONFIG_AX88796 is not set
+ # CONFIG_SMC91X is not set
+ # CONFIG_DM9000 is not set
++# CONFIG_ENC28J60 is not set
++# CONFIG_ETHOC is not set
++# CONFIG_SMC911X is not set
++# CONFIG_SMSC911X is not set
++# CONFIG_DNET is not set
+ # CONFIG_IBM_NEW_EMAC_ZMII is not set
+ # CONFIG_IBM_NEW_EMAC_RGMII is not set
+ # CONFIG_IBM_NEW_EMAC_TAH is not set
+ # CONFIG_IBM_NEW_EMAC_EMAC4 is not set
++# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
++# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
++# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
+ # CONFIG_B44 is not set
+-CONFIG_NETDEV_1000=y
+-CONFIG_NETDEV_10000=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_WLAN_80211=y
++CONFIG_LIBERTAS=m
++CONFIG_LIBERTAS_USB=m
++CONFIG_LIBERTAS_SDIO=m
++CONFIG_LIBERTAS_SPI=m
++# CONFIG_LIBERTAS_DEBUG is not set
++# CONFIG_LIBERTAS_THINFIRM is not set
++# CONFIG_AT76C50X_USB is not set
++CONFIG_USB_ZD1201=m
++# CONFIG_USB_NET_RNDIS_WLAN is not set
++CONFIG_RTL8187=m
++# CONFIG_MAC80211_HWSIM is not set
++# CONFIG_P54_COMMON is not set
++CONFIG_AR9170_USB=m
++# CONFIG_HOSTAP is not set
++# CONFIG_B43 is not set
++# CONFIG_B43LEGACY is not set
++CONFIG_ZD1211RW=m
++# CONFIG_ZD1211RW_DEBUG is not set
++CONFIG_RT2X00=m
++CONFIG_RT2500USB=m
++CONFIG_RT73USB=m
++CONFIG_RT2X00_LIB_USB=m
++CONFIG_RT2X00_LIB=m
++CONFIG_RT2X00_LIB_FIRMWARE=y
++CONFIG_RT2X00_LIB_CRYPTO=y
++CONFIG_RT2X00_LIB_RFKILL=y
++CONFIG_RT2X00_LIB_LEDS=y
++# CONFIG_RT2X00_DEBUG is not set
++
++#
++# Enable WiMAX (Networking options) to see the WiMAX drivers
++#
+ #
+ # USB Network Adapters
+@@ -552,7 +701,6 @@
+ # 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
+@@ -563,15 +711,15 @@
+ #
+ CONFIG_INPUT=y
+ # CONFIG_INPUT_FF_MEMLESS is not set
+-# CONFIG_INPUT_POLLDEV is not set
++CONFIG_INPUT_POLLDEV=m
+ #
+ # 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_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
+@@ -592,16 +740,24 @@
+ # CONFIG_INPUT_TABLET is not set
+ CONFIG_INPUT_TOUCHSCREEN=y
+ CONFIG_TOUCHSCREEN_ADS7846=y
++# CONFIG_TOUCHSCREEN_AD7877 is not set
++# CONFIG_TOUCHSCREEN_AD7879_I2C is not set
++# CONFIG_TOUCHSCREEN_AD7879_SPI is not set
++# CONFIG_TOUCHSCREEN_AD7879 is not set
+ # CONFIG_TOUCHSCREEN_FUJITSU is not set
+ # CONFIG_TOUCHSCREEN_GUNZE is not set
+ # CONFIG_TOUCHSCREEN_ELO is not set
++# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
+ # CONFIG_TOUCHSCREEN_MTOUCH is not set
++# CONFIG_TOUCHSCREEN_INEXIO 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_WM97XX is not set
+ # CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
++# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
++# CONFIG_TOUCHSCREEN_TSC2007 is not set
+ # CONFIG_INPUT_MISC is not set
+ #
+@@ -614,9 +770,11 @@
+ # Character devices
+ #
+ CONFIG_VT=y
++CONFIG_CONSOLE_TRANSLATIONS=y
+ CONFIG_VT_CONSOLE=y
+ CONFIG_HW_CONSOLE=y
+ # CONFIG_VT_HW_CONSOLE_BINDING is not set
++CONFIG_DEVKMEM=y
+ # CONFIG_SERIAL_NONSTANDARD is not set
+ #
+@@ -629,63 +787,65 @@
+ #
+ CONFIG_SERIAL_ATMEL=y
+ CONFIG_SERIAL_ATMEL_CONSOLE=y
++CONFIG_SERIAL_ATMEL_PDC=y
+ # CONFIG_SERIAL_ATMEL_TTYAT is not set
++# CONFIG_SERIAL_MAX3100 is not set
+ CONFIG_SERIAL_CORE=y
+ CONFIG_SERIAL_CORE_CONSOLE=y
+ CONFIG_UNIX98_PTYS=y
++# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
+ CONFIG_LEGACY_PTYS=y
+-CONFIG_LEGACY_PTY_COUNT=256
++CONFIG_LEGACY_PTY_COUNT=4
+ # CONFIG_IPMI_HANDLER is not set
+ CONFIG_HW_RANDOM=y
+-# CONFIG_NVRAM is not set
++# CONFIG_HW_RANDOM_TIMERIOMEM is not set
+ # CONFIG_R3964 is not set
+ # CONFIG_RAW_DRIVER is not set
+ # CONFIG_TCG_TPM is not set
+ CONFIG_I2C=y
+ CONFIG_I2C_BOARDINFO=y
+-CONFIG_I2C_CHARDEV=y
++# CONFIG_I2C_CHARDEV is not set
++CONFIG_I2C_HELPER_AUTO=y
++CONFIG_I2C_ALGOBIT=y
+ #
+-# I2C Algorithms
++# I2C Hardware Bus support
+ #
+-CONFIG_I2C_ALGOBIT=y
+-# CONFIG_I2C_ALGOPCF is not set
+-# CONFIG_I2C_ALGOPCA is not set
+ #
+-# I2C Hardware Bus support
++# I2C system bus drivers (mostly embedded / system-on-chip)
+ #
+ CONFIG_I2C_GPIO=y
+ # CONFIG_I2C_OCORES is not set
+-# CONFIG_I2C_PARPORT_LIGHT is not set
+ # CONFIG_I2C_SIMTEC is not set
++
++#
++# External I2C/SMBus adapter drivers
++#
++# CONFIG_I2C_PARPORT_LIGHT 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_PCA is not set
++
++#
++# Other I2C/SMBus bus drivers
++#
++# CONFIG_I2C_PCA_PLATFORM 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_EEPROM_LEGACY is not set
+ # CONFIG_SENSORS_PCF8574 is not set
++# CONFIG_PCF8575 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
+ #
+@@ -693,46 +853,84 @@
+ #
+ CONFIG_SPI_ATMEL=y
+ # CONFIG_SPI_BITBANG is not set
++# CONFIG_SPI_GPIO is not set
+ #
+ # SPI Protocol Masters
+ #
+-# CONFIG_EEPROM_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=y
+-CONFIG_WATCHDOG_NOWAYOUT=y
++CONFIG_ARCH_REQUIRE_GPIOLIB=y
++CONFIG_GPIOLIB=y
++# CONFIG_GPIO_SYSFS is not set
+ #
+-# Watchdog Device Drivers
++# Memory mapped GPIO expanders:
+ #
+-# CONFIG_SOFT_WATCHDOG is not set
+-CONFIG_AT91SAM9X_WATCHDOG=y
+ #
+-# USB-based Watchdog Cards
++# I2C GPIO expanders:
+ #
+-# CONFIG_USBPCWATCHDOG is not set
++# CONFIG_GPIO_MAX732X is not set
++# CONFIG_GPIO_PCA953X is not set
++# CONFIG_GPIO_PCF857X is not set
+ #
+-# Sonics Silicon Backplane
++# PCI GPIO expanders:
++#
++
++#
++# SPI GPIO expanders:
+ #
++# CONFIG_GPIO_MAX7301 is not set
++# CONFIG_GPIO_MCP23S08 is not set
++# CONFIG_W1 is not set
++# CONFIG_POWER_SUPPLY is not set
++# CONFIG_HWMON is not set
++# CONFIG_THERMAL is not set
++# CONFIG_THERMAL_HWMON is not set
++# CONFIG_WATCHDOG is not set
+ CONFIG_SSB_POSSIBLE=y
++
++#
++# Sonics Silicon Backplane
++#
+ # CONFIG_SSB is not set
+ #
+ # Multifunction device drivers
+ #
++# CONFIG_MFD_CORE is not set
+ # CONFIG_MFD_SM501 is not set
++# CONFIG_MFD_ASIC3 is not set
++# CONFIG_HTC_EGPIO is not set
++# CONFIG_HTC_PASIC3 is not set
++# CONFIG_UCB1400_CORE is not set
++# CONFIG_TPS65010 is not set
++# CONFIG_TWL4030_CORE is not set
++# CONFIG_MFD_TMIO is not set
++# CONFIG_MFD_T7L66XB is not set
++# CONFIG_MFD_TC6387XB is not set
++# CONFIG_MFD_TC6393XB is not set
++# CONFIG_PMIC_DA903X is not set
++# CONFIG_MFD_WM8400 is not set
++# CONFIG_MFD_WM8350_I2C is not set
++# CONFIG_MFD_PCF50633 is not set
+ #
+ # Multimedia devices
+ #
++
++#
++# Multimedia core support
++#
+ # CONFIG_VIDEO_DEV is not set
+ # CONFIG_DVB_CORE is not set
++# CONFIG_VIDEO_MEDIA is not set
++
++#
++# Multimedia drivers
++#
+ # CONFIG_DAB is not set
+ #
+@@ -743,6 +941,7 @@
+ CONFIG_FB=y
+ # CONFIG_FIRMWARE_EDID is not set
+ # CONFIG_FB_DDC is not set
++# CONFIG_FB_BOOT_VESA_SUPPORT is not set
+ CONFIG_FB_CFB_FILLRECT=y
+ CONFIG_FB_CFB_COPYAREA=y
+ CONFIG_FB_CFB_IMAGEBLIT=y
+@@ -750,8 +949,8 @@
+ # CONFIG_FB_SYS_FILLRECT is not set
+ # CONFIG_FB_SYS_COPYAREA is not set
+ # CONFIG_FB_SYS_IMAGEBLIT is not set
++# CONFIG_FB_FOREIGN_ENDIAN is not set
+ # CONFIG_FB_SYS_FOPS is not set
+-CONFIG_FB_DEFERRED_IO=y
+ # CONFIG_FB_SVGALIB is not set
+ # CONFIG_FB_MACMODES is not set
+ # CONFIG_FB_BACKLIGHT is not set
+@@ -765,7 +964,15 @@
+ # CONFIG_FB_S1D13XXX is not set
+ CONFIG_FB_ATMEL=y
+ # CONFIG_FB_VIRTUAL is not set
+-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
++# CONFIG_FB_METRONOME is not set
++# CONFIG_FB_MB862XX is not set
++# CONFIG_FB_BROADSHEET is not set
++CONFIG_BACKLIGHT_LCD_SUPPORT=y
++# CONFIG_LCD_CLASS_DEVICE is not set
++CONFIG_BACKLIGHT_CLASS_DEVICE=y
++CONFIG_BACKLIGHT_ATMEL_LCDC=y
++# CONFIG_BACKLIGHT_ATMEL_PWM is not set
++# CONFIG_BACKLIGHT_GENERIC is not set
+ #
+ # Display device support
+@@ -779,11 +986,41 @@
+ CONFIG_DUMMY_CONSOLE=y
+ # CONFIG_FRAMEBUFFER_CONSOLE is not set
+ # CONFIG_LOGO is not set
+-
+-#
+-# Sound
+-#
+-# CONFIG_SOUND is not set
++CONFIG_SOUND=y
++CONFIG_SOUND_OSS_CORE=y
++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_PCM_OSS_PLUGINS=y
++# CONFIG_SND_SEQUENCER_OSS is not set
++# 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
++CONFIG_SND_VMASTER=y
++CONFIG_SND_AC97_CODEC=y
++# CONFIG_SND_DRIVERS is not set
++# CONFIG_SND_ARM is not set
++
++#
++# Atmel devices (AVR32 and AT91)
++#
++CONFIG_SND_ATMEL_AC97C=y
++# CONFIG_SND_SPI is not set
++CONFIG_SND_USB=y
++CONFIG_SND_USB_AUDIO=m
++# CONFIG_SND_USB_CAIAQ is not set
++# CONFIG_SND_SOC is not set
++# CONFIG_SOUND_PRIME is not set
++CONFIG_AC97_BUS=y
+ CONFIG_HID_SUPPORT=y
+ CONFIG_HID=y
+ # CONFIG_HID_DEBUG is not set
+@@ -793,57 +1030,68 @@
+ # USB Input Devices
+ #
+ # CONFIG_USB_HID is not set
++# CONFIG_HID_PID is not set
+ #
+-# USB HID Boot Protocol drivers
++# Special HID 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
++# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
+ #
+ # Miscellaneous USB options
+ #
+ CONFIG_USB_DEVICEFS=y
+-CONFIG_USB_DEVICE_CLASS=y
++# CONFIG_USB_DEVICE_CLASS is not set
+ # CONFIG_USB_DYNAMIC_MINORS is not set
++# CONFIG_USB_SUSPEND is not set
+ # CONFIG_USB_OTG is not set
++# CONFIG_USB_MON is not set
++# CONFIG_USB_WUSB is not set
++# CONFIG_USB_WUSB_CBAF is not set
+ #
+ # USB Host Controller Drivers
+ #
++# CONFIG_USB_C67X00_HCD is not set
++# CONFIG_USB_OXU210HP_HCD is not set
+ # CONFIG_USB_ISP116X_HCD is not set
++# CONFIG_USB_ISP1760_HCD is not set
+ CONFIG_USB_OHCI_HCD=y
+ # CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+ # CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+ CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+ # CONFIG_USB_SL811_HCD is not set
+ # CONFIG_USB_R8A66597_HCD is not set
++# CONFIG_USB_HWA_HCD is not set
++# CONFIG_USB_MUSB_HDRC is not set
++# CONFIG_USB_GADGET_MUSB_HDRC is not set
+ #
+ # USB Device Class drivers
+ #
+ # CONFIG_USB_ACM is not set
+ # CONFIG_USB_PRINTER is not set
++# CONFIG_USB_WDM is not set
++# CONFIG_USB_TMC is not set
+ #
+-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
++# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
+ #
+ #
+-# may also be needed; see USB_STORAGE Help for more information
++# also be needed; see USB_STORAGE Help for more info
+ #
+ CONFIG_USB_STORAGE=y
+ # CONFIG_USB_STORAGE_DEBUG is not set
+ # CONFIG_USB_STORAGE_DATAFAB is not set
+ # CONFIG_USB_STORAGE_FREECOM is not set
+ # CONFIG_USB_STORAGE_ISD200 is not set
+-# CONFIG_USB_STORAGE_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
+@@ -851,6 +1099,7 @@
+ # CONFIG_USB_STORAGE_ALAUDA is not set
+ # CONFIG_USB_STORAGE_ONETOUCH is not set
+ # CONFIG_USB_STORAGE_KARMA is not set
++# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
+ # CONFIG_USB_LIBUSUAL is not set
+ #
+@@ -858,15 +1107,10 @@
+ #
+ # 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
+ #
+@@ -875,7 +1119,7 @@
+ # 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_SEVSEG is not set
+ # CONFIG_USB_RIO500 is not set
+ # CONFIG_USB_LEGOTOWER is not set
+ # CONFIG_USB_LCD is not set
+@@ -883,7 +1127,6 @@
+ # 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
+@@ -891,56 +1134,95 @@
+ # 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_ISIGHTFW is not set
++# CONFIG_USB_VST is not set
+ CONFIG_USB_GADGET=y
+-# CONFIG_USB_GADGET_DEBUG is not set
+ # CONFIG_USB_GADGET_DEBUG_FILES is not set
++CONFIG_USB_GADGET_VBUS_DRAW=2
+ CONFIG_USB_GADGET_SELECTED=y
+-# CONFIG_USB_GADGET_AMD5536UDC is not set
++CONFIG_USB_GADGET_AT91=y
++CONFIG_USB_AT91=y
+ # 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_PXA25X is not set
++# CONFIG_USB_GADGET_PXA27X is not set
+ # CONFIG_USB_GADGET_S3C2410 is not set
+-CONFIG_USB_GADGET_AT91=y
+-CONFIG_USB_AT91=y
++# CONFIG_USB_GADGET_IMX is not set
++# CONFIG_USB_GADGET_M66592 is not set
++# CONFIG_USB_GADGET_AMD5536UDC is not set
++# CONFIG_USB_GADGET_FSL_QE is not set
++# CONFIG_USB_GADGET_CI13XXX is not set
++# CONFIG_USB_GADGET_NET2280 is not set
++# CONFIG_USB_GADGET_GOKU 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 is not set
+-CONFIG_USB_GADGETFS=m
++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=m
+ # CONFIG_USB_MIDI_GADGET is not set
++# CONFIG_USB_G_PRINTER is not set
++CONFIG_USB_CDC_COMPOSITE=m
++
++#
++# OTG and related infrastructure
++#
++# CONFIG_USB_GPIO_VBUS is not set
++# CONFIG_NOP_USB_XCEIV is not set
+ CONFIG_MMC=y
+ # CONFIG_MMC_DEBUG is not set
+ # CONFIG_MMC_UNSAFE_RESUME is not set
+ #
+-# MMC/SD Card Drivers
++# MMC/SD/SDIO Card Drivers
+ #
+ CONFIG_MMC_BLOCK=y
+ CONFIG_MMC_BLOCK_BOUNCE=y
+-# CONFIG_SDIO_UART is not set
++CONFIG_SDIO_UART=m
++# CONFIG_MMC_TEST is not set
+ #
+-# MMC/SD Host Controller Drivers
++# MMC/SD/SDIO Host Controller Drivers
+ #
+-CONFIG_MMC_AT91=m
++# CONFIG_MMC_SDHCI is not set
++CONFIG_MMC_AT91=y
++# CONFIG_MMC_ATMELMCI is not set
+ # CONFIG_MMC_SPI is not set
+-# CONFIG_NEW_LEDS is not set
++# CONFIG_MEMSTICK is not set
++# CONFIG_ACCESSIBILITY is not set
++CONFIG_NEW_LEDS=y
++CONFIG_LEDS_CLASS=y
++
++#
++# LED drivers
++#
++CONFIG_LEDS_ATMEL_PWM=y
++# CONFIG_LEDS_PCA9532 is not set
++CONFIG_LEDS_GPIO=y
++CONFIG_LEDS_GPIO_PLATFORM=y
++# CONFIG_LEDS_LP5521 is not set
++# CONFIG_LEDS_PCA955X is not set
++# CONFIG_LEDS_DAC124S085 is not set
++# CONFIG_LEDS_BD2802 is not set
++
++#
++# LED Triggers
++#
++CONFIG_LEDS_TRIGGERS=y
++CONFIG_LEDS_TRIGGER_TIMER=y
++CONFIG_LEDS_TRIGGER_HEARTBEAT=y
++# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
++CONFIG_LEDS_TRIGGER_GPIO=y
++# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set
++
++#
++# iptables trigger is under Netfilter config (LED target)
++#
+ CONFIG_RTC_LIB=y
+ CONFIG_RTC_CLASS=y
+ CONFIG_RTC_HCTOSYS=y
+@@ -969,28 +1251,47 @@
+ # CONFIG_RTC_DRV_PCF8563 is not set
+ # CONFIG_RTC_DRV_PCF8583 is not set
+ # CONFIG_RTC_DRV_M41T80 is not set
++# CONFIG_RTC_DRV_S35390A is not set
++# CONFIG_RTC_DRV_FM3130 is not set
++# CONFIG_RTC_DRV_RX8581 is not set
+ #
+ # SPI RTC drivers
+ #
+-# CONFIG_RTC_DRV_RS5C348 is not set
++# CONFIG_RTC_DRV_M41T94 is not set
++# CONFIG_RTC_DRV_DS1305 is not set
++# CONFIG_RTC_DRV_DS1390 is not set
+ # CONFIG_RTC_DRV_MAX6902 is not set
++# CONFIG_RTC_DRV_R9701 is not set
++# CONFIG_RTC_DRV_RS5C348 is not set
++# CONFIG_RTC_DRV_DS3234 is not set
+ #
+ # Platform RTC drivers
+ #
+ # CONFIG_RTC_DRV_CMOS is not set
++# CONFIG_RTC_DRV_DS1286 is not set
++# CONFIG_RTC_DRV_DS1511 is not set
+ # CONFIG_RTC_DRV_DS1553 is not set
+-# CONFIG_RTC_DRV_STK17TA8 is not set
+ # CONFIG_RTC_DRV_DS1742 is not set
++# CONFIG_RTC_DRV_STK17TA8 is not set
+ # CONFIG_RTC_DRV_M48T86 is not set
++# CONFIG_RTC_DRV_M48T35 is not set
+ # CONFIG_RTC_DRV_M48T59 is not set
++# CONFIG_RTC_DRV_BQ4802 is not set
+ # CONFIG_RTC_DRV_V3020 is not set
+ #
+ # on-CPU RTC drivers
+ #
+ CONFIG_RTC_DRV_AT91SAM9=y
++CONFIG_RTC_DRV_AT91SAM9_RTT=0
++CONFIG_RTC_DRV_AT91SAM9_GPBR=0
++# CONFIG_DMADEVICES is not set
++# CONFIG_AUXDISPLAY is not set
++# CONFIG_REGULATOR is not set
++# CONFIG_UIO is not set
++# CONFIG_STAGING is not set
+ #
+ # File systems
+@@ -999,24 +1300,28 @@
+ # 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_EXT4_FS is not set
+ # CONFIG_REISERFS_FS is not set
+ # CONFIG_JFS_FS is not set
+ # CONFIG_FS_POSIX_ACL is not set
++CONFIG_FILE_LOCKING=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_BTRFS_FS is not set
++CONFIG_DNOTIFY=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 is not set
+ # CONFIG_FUSE_FS is not set
+ #
++# Caches
++#
++# CONFIG_FSCACHE is not set
++
++#
+ # CD-ROM/DVD Filesystems
+ #
+ # CONFIG_ISO9660_FS is not set
+@@ -1026,7 +1331,7 @@
+ # DOS/FAT/NT Filesystems
+ #
+ CONFIG_FAT_FS=y
+-# CONFIG_MSDOS_FS is not set
++CONFIG_MSDOS_FS=y
+ CONFIG_VFAT_FS=y
+ CONFIG_FAT_DEFAULT_CODEPAGE=437
+ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+@@ -1037,15 +1342,13 @@
+ #
+ CONFIG_PROC_FS=y
+ CONFIG_PROC_SYSCTL=y
++CONFIG_PROC_PAGE_MONITOR=y
+ CONFIG_SYSFS=y
+ CONFIG_TMPFS=y
+ # CONFIG_TMPFS_POSIX_ACL is not set
+ # CONFIG_HUGETLB_PAGE is not set
+ # CONFIG_CONFIGFS_FS is not set
+-
+-#
+-# Miscellaneous filesystems
+-#
++CONFIG_MISC_FILESYSTEMS=y
+ # CONFIG_ADFS_FS is not set
+ # CONFIG_AFFS_FS is not set
+ # CONFIG_HFS_FS is not set
+@@ -1057,30 +1360,36 @@
+ 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_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_CRAMFS=m
++CONFIG_SQUASHFS=m
++CONFIG_SQUASHFS_EMBEDDED=y
++CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
+ # CONFIG_VXFS_FS is not set
++# CONFIG_MINIX_FS is not set
++# CONFIG_OMFS_FS is not set
+ # CONFIG_HPFS_FS is not set
+ # CONFIG_QNX4FS_FS is not set
++# CONFIG_ROMFS_FS is not set
+ # CONFIG_SYSV_FS is not set
+ # CONFIG_UFS_FS is not set
++# CONFIG_NILFS2_FS is not set
+ CONFIG_NETWORK_FILESYSTEMS=y
+ CONFIG_NFS_FS=y
+-# CONFIG_NFS_V3 is not set
++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
+@@ -1130,14 +1439,11 @@
+ # 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_ISO8859_15=y
+ # CONFIG_NLS_KOI8_R is not set
+ # CONFIG_NLS_KOI8_U is not set
+-# CONFIG_NLS_UTF8 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
+@@ -1145,64 +1451,161 @@
+ # CONFIG_PRINTK_TIME is not set
+ CONFIG_ENABLE_WARN_DEPRECATED=y
+ CONFIG_ENABLE_MUST_CHECK=y
++CONFIG_FRAME_WARN=1024
+ # 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_KERNEL 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_DEBUG_MEMORY_INIT=y
++# CONFIG_RCU_CPU_STALL_DETECTOR is not set
++# CONFIG_LATENCYTOP is not set
++# CONFIG_SYSCTL_SYSCALL_CHECK is not set
++CONFIG_HAVE_FUNCTION_TRACER=y
++CONFIG_TRACING_SUPPORT=y
++
++#
++# Tracers
++#
++# CONFIG_FUNCTION_TRACER is not set
++# CONFIG_IRQSOFF_TRACER is not set
++# CONFIG_SCHED_TRACER is not set
++# CONFIG_CONTEXT_SWITCH_TRACER is not set
++# CONFIG_EVENT_TRACER is not set
++# CONFIG_BOOT_TRACER is not set
++# CONFIG_TRACE_BRANCH_PROFILING is not set
++# CONFIG_STACK_TRACER is not set
++# CONFIG_KMEMTRACE is not set
++# CONFIG_WORKQUEUE_TRACER is not set
++# CONFIG_BLK_DEV_IO_TRACE is not set
+ # CONFIG_SAMPLES is not set
++CONFIG_HAVE_ARCH_KGDB=y
++CONFIG_ARM_UNWIND=y
+ 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_SECURITYFS is not set
+ # CONFIG_SECURITY_FILE_CAPABILITIES is not set
+-# CONFIG_CRYPTO is not set
++CONFIG_CRYPTO=y
++
++#
++# Crypto core or helper
++#
++# CONFIG_CRYPTO_FIPS is not set
++CONFIG_CRYPTO_ALGAPI=y
++CONFIG_CRYPTO_ALGAPI2=y
++CONFIG_CRYPTO_AEAD2=y
++CONFIG_CRYPTO_BLKCIPHER=y
++CONFIG_CRYPTO_BLKCIPHER2=y
++CONFIG_CRYPTO_HASH2=y
++CONFIG_CRYPTO_RNG2=y
++CONFIG_CRYPTO_PCOMP=y
++CONFIG_CRYPTO_MANAGER=y
++CONFIG_CRYPTO_MANAGER2=y
++# CONFIG_CRYPTO_GF128MUL is not set
++# CONFIG_CRYPTO_NULL is not set
++CONFIG_CRYPTO_WORKQUEUE=y
++# CONFIG_CRYPTO_CRYPTD is not set
++# CONFIG_CRYPTO_AUTHENC is not set
++# CONFIG_CRYPTO_TEST is not set
++
++#
++# Authenticated Encryption with Associated Data
++#
++# CONFIG_CRYPTO_CCM is not set
++# CONFIG_CRYPTO_GCM is not set
++# CONFIG_CRYPTO_SEQIV is not set
++
++#
++# Block modes
++#
++# CONFIG_CRYPTO_CBC is not set
++# CONFIG_CRYPTO_CTR is not set
++# CONFIG_CRYPTO_CTS is not set
++CONFIG_CRYPTO_ECB=y
++# CONFIG_CRYPTO_LRW is not set
++# CONFIG_CRYPTO_PCBC is not set
++# CONFIG_CRYPTO_XTS is not set
++
++#
++# Hash modes
++#
++# CONFIG_CRYPTO_HMAC is not set
++# CONFIG_CRYPTO_XCBC is not set
++
++#
++# Digest
++#
++# CONFIG_CRYPTO_CRC32C is not set
++# CONFIG_CRYPTO_MD4 is not set
++# CONFIG_CRYPTO_MD5 is not set
++# CONFIG_CRYPTO_MICHAEL_MIC is not set
++# CONFIG_CRYPTO_RMD128 is not set
++# CONFIG_CRYPTO_RMD160 is not set
++# CONFIG_CRYPTO_RMD256 is not set
++# CONFIG_CRYPTO_RMD320 is not set
++# CONFIG_CRYPTO_SHA1 is not set
++# CONFIG_CRYPTO_SHA256 is not set
++# CONFIG_CRYPTO_SHA512 is not set
++# CONFIG_CRYPTO_TGR192 is not set
++# CONFIG_CRYPTO_WP512 is not set
++
++#
++# Ciphers
++#
++CONFIG_CRYPTO_AES=y
++# CONFIG_CRYPTO_ANUBIS is not set
++CONFIG_CRYPTO_ARC4=y
++# CONFIG_CRYPTO_BLOWFISH is not set
++# CONFIG_CRYPTO_CAMELLIA is not set
++# CONFIG_CRYPTO_CAST5 is not set
++# CONFIG_CRYPTO_CAST6 is not set
++# CONFIG_CRYPTO_DES is not set
++# CONFIG_CRYPTO_FCRYPT is not set
++# CONFIG_CRYPTO_KHAZAD is not set
++# CONFIG_CRYPTO_SALSA20 is not set
++# CONFIG_CRYPTO_SEED is not set
++# CONFIG_CRYPTO_SERPENT is not set
++# CONFIG_CRYPTO_TEA is not set
++# CONFIG_CRYPTO_TWOFISH is not set
++
++#
++# Compression
++#
++# CONFIG_CRYPTO_DEFLATE is not set
++# CONFIG_CRYPTO_ZLIB is not set
++# CONFIG_CRYPTO_LZO is not set
++
++#
++# Random Number Generation
++#
++# CONFIG_CRYPTO_ANSI_CPRNG is not set
++# CONFIG_CRYPTO_HW is not set
++# CONFIG_BINARY_PRINTF is not set
+ #
+ # Library routines
+ #
+ CONFIG_BITREVERSE=y
++CONFIG_GENERIC_FIND_LAST_BIT=y
+ # CONFIG_CRC_CCITT is not set
+ # CONFIG_CRC16 is not set
+-# CONFIG_CRC_ITU_T is not set
++# CONFIG_CRC_T10DIF is not set
++CONFIG_CRC_ITU_T=m
+ 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_DECOMPRESS_GZIP=y
++CONFIG_DECOMPRESS_BZIP2=y
++CONFIG_DECOMPRESS_LZMA=y
+ CONFIG_HAS_IOMEM=y
+ CONFIG_HAS_IOPORT=y
+ CONFIG_HAS_DMA=y
++CONFIG_NLATTR=y
+Index: linux-2.6.30/arch/arm/configs/at91sam9g45ekes_defconfig
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.30/arch/arm/configs/at91sam9g45ekes_defconfig    2011-02-01 16:40:30.197007464 +0100
+@@ -0,0 +1,1617 @@
++#
++# Automatically generated make config: don't edit
++# Linux kernel version: 2.6.30
++# Mon Oct 12 17:39:21 2009
++#
++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_HAVE_LATENCYTOP_SUPPORT=y
++CONFIG_LOCKDEP_SUPPORT=y
++CONFIG_TRACE_IRQFLAGS_SUPPORT=y
++CONFIG_HARDIRQS_SW_RESEND=y
++CONFIG_GENERIC_IRQ_PROBE=y
++CONFIG_RWSEM_GENERIC_SPINLOCK=y
++# CONFIG_ARCH_HAS_ILOG2_U32 is not set
++# CONFIG_ARCH_HAS_ILOG2_U64 is not set
++CONFIG_GENERIC_HWEIGHT=y
++CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=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_AUDIT is not set
++
++#
++# RCU Subsystem
++#
++CONFIG_CLASSIC_RCU=y
++# CONFIG_TREE_RCU is not set
++# CONFIG_PREEMPT_RCU is not set
++# CONFIG_TREE_RCU_TRACE is not set
++# CONFIG_PREEMPT_RCU_TRACE is not set
++# CONFIG_IKCONFIG is not set
++CONFIG_LOG_BUF_SHIFT=14
++# CONFIG_GROUP_SCHED is not set
++# CONFIG_CGROUPS is not set
++CONFIG_SYSFS_DEPRECATED=y
++CONFIG_SYSFS_DEPRECATED_V2=y
++# CONFIG_RELAY is not set
++CONFIG_NAMESPACES=y
++# CONFIG_UTS_NS is not set
++# CONFIG_IPC_NS is not set
++# CONFIG_USER_NS is not set
++# CONFIG_PID_NS is not set
++# CONFIG_NET_NS is not set
++CONFIG_BLK_DEV_INITRD=y
++CONFIG_INITRAMFS_SOURCE=""
++CONFIG_RD_GZIP=y
++CONFIG_RD_BZIP2=y
++CONFIG_RD_LZMA=y
++CONFIG_CC_OPTIMIZE_FOR_SIZE=y
++CONFIG_SYSCTL=y
++CONFIG_ANON_INODES=y
++# CONFIG_EMBEDDED is not set
++CONFIG_UID16=y
++CONFIG_SYSCTL_SYSCALL=y
++CONFIG_KALLSYMS=y
++# CONFIG_KALLSYMS_EXTRA_PASS is not set
++CONFIG_STRIP_ASM_SYMS=y
++CONFIG_HOTPLUG=y
++CONFIG_PRINTK=y
++CONFIG_BUG=y
++CONFIG_ELF_CORE=y
++CONFIG_BASE_FULL=y
++CONFIG_FUTEX=y
++CONFIG_EPOLL=y
++CONFIG_SIGNALFD=y
++CONFIG_TIMERFD=y
++CONFIG_EVENTFD=y
++CONFIG_SHMEM=y
++CONFIG_AIO=y
++CONFIG_VM_EVENT_COUNTERS=y
++CONFIG_COMPAT_BRK=y
++CONFIG_SLAB=y
++# CONFIG_SLUB is not set
++# CONFIG_SLOB is not set
++# CONFIG_PROFILING is not set
++# CONFIG_MARKERS is not set
++CONFIG_HAVE_OPROFILE=y
++# CONFIG_KPROBES is not set
++CONFIG_HAVE_KPROBES=y
++CONFIG_HAVE_KRETPROBES=y
++CONFIG_HAVE_CLK=y
++# CONFIG_SLOW_WORK is not set
++CONFIG_HAVE_GENERIC_DMA_COHERENT=y
++CONFIG_SLABINFO=y
++CONFIG_RT_MUTEXES=y
++CONFIG_BASE_SMALL=0
++CONFIG_MODULES=y
++# CONFIG_MODULE_FORCE_LOAD is not set
++CONFIG_MODULE_UNLOAD=y
++# CONFIG_MODULE_FORCE_UNLOAD is not set
++# CONFIG_MODVERSIONS is not set
++# CONFIG_MODULE_SRCVERSION_ALL is not set
++CONFIG_BLOCK=y
++# CONFIG_LBD is not set
++# CONFIG_BLK_DEV_BSG is not set
++# CONFIG_BLK_DEV_INTEGRITY 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"
++# CONFIG_FREEZER is not set
++
++#
++# 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_CLPS711X is not set
++# CONFIG_ARCH_EBSA110 is not set
++# CONFIG_ARCH_EP93XX is not set
++# CONFIG_ARCH_GEMINI 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_KIRKWOOD is not set
++# CONFIG_ARCH_KS8695 is not set
++# CONFIG_ARCH_NS9XXX is not set
++# CONFIG_ARCH_LOKI is not set
++# CONFIG_ARCH_MV78XX0 is not set
++# CONFIG_ARCH_MXC is not set
++# CONFIG_ARCH_ORION5X is not set
++# CONFIG_ARCH_PNX4008 is not set
++# CONFIG_ARCH_PXA is not set
++# CONFIG_ARCH_MMP is not set
++# CONFIG_ARCH_RPC is not set
++# CONFIG_ARCH_SA1100 is not set
++# CONFIG_ARCH_S3C2410 is not set
++# CONFIG_ARCH_S3C64XX is not set
++# CONFIG_ARCH_SHARK is not set
++# CONFIG_ARCH_LH7A40X is not set
++# CONFIG_ARCH_DAVINCI is not set
++# CONFIG_ARCH_OMAP is not set
++# CONFIG_ARCH_MSM is not set
++# CONFIG_ARCH_W90X900 is not set
++
++#
++# Atmel AT91 System-on-Chip
++#
++# CONFIG_ARCH_AT91RM9200 is not set
++# CONFIG_ARCH_AT91SAM9260 is not set
++# CONFIG_ARCH_AT91SAM9261 is not set
++# CONFIG_ARCH_AT91SAM9G10 is not set
++# CONFIG_ARCH_AT91SAM9263 is not set
++# CONFIG_ARCH_AT91SAM9RL is not set
++# CONFIG_ARCH_AT91SAM9G20 is not set
++CONFIG_ARCH_AT91SAM9G45=y
++# CONFIG_ARCH_AT91CAP9 is not set
++# CONFIG_ARCH_AT572D940HF is not set
++# CONFIG_ARCH_AT91X40 is not set
++CONFIG_AT91_PMC_UNIT=y
++
++#
++# AT91SAM9G45 Board Type
++#
++CONFIG_MACH_AT91SAM9G45EKES=y
++
++#
++# AT91 Board Options
++#
++# CONFIG_MTD_NAND_ATMEL_BUSWIDTH_16 is not set
++
++#
++# AT91 Feature Selections
++#
++CONFIG_AT91_PROGRAMMABLE_CLOCKS=y
++CONFIG_AT91_TIMER_HZ=100
++CONFIG_AT91_EARLY_DBGU=y
++# CONFIG_AT91_EARLY_USART0 is not set
++# CONFIG_AT91_EARLY_USART1 is not set
++# CONFIG_AT91_EARLY_USART2 is not set
++# CONFIG_AT91_EARLY_USART3 is not set
++# CONFIG_AT91_EARLY_USART4 is not set
++# CONFIG_AT91_EARLY_USART5 is not set
++
++#
++# Processor Type
++#
++CONFIG_CPU_32=y
++CONFIG_CPU_ARM926T=y
++CONFIG_CPU_32v5=y
++CONFIG_CPU_ABRT_EV5TJ=y
++CONFIG_CPU_PABRT_NOIFAR=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
++# CONFIG_PCCARD is not set
++
++#
++# Kernel Features
++#
++# CONFIG_NO_HZ is not set
++# CONFIG_HIGH_RES_TIMERS is not set
++CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
++CONFIG_VMSPLIT_3G=y
++# CONFIG_VMSPLIT_2G is not set
++# CONFIG_VMSPLIT_1G is not set
++CONFIG_PAGE_OFFSET=0xC0000000
++# CONFIG_PREEMPT is not set
++CONFIG_HZ=100
++CONFIG_AEABI=y
++CONFIG_OABI_COMPAT=y
++# CONFIG_ARCH_HAS_HOLES_MEMORYMODEL is not set
++# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
++# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
++# CONFIG_HIGHMEM is not set
++CONFIG_SELECT_MEMORY_MODEL=y
++CONFIG_FLATMEM_MANUAL=y
++# CONFIG_DISCONTIGMEM_MANUAL is not set
++# CONFIG_SPARSEMEM_MANUAL is not set
++CONFIG_FLATMEM=y
++CONFIG_FLAT_NODE_MEM_MAP=y
++CONFIG_PAGEFLAGS_EXTENDED=y
++CONFIG_SPLIT_PTLOCK_CPUS=4096
++# CONFIG_PHYS_ADDR_T_64BIT is not set
++CONFIG_ZONE_DMA_FLAG=0
++CONFIG_VIRT_TO_BUS=y
++CONFIG_UNEVICTABLE_LRU=y
++CONFIG_HAVE_MLOCK=y
++CONFIG_HAVE_MLOCKED_PAGE_BIT=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="mem=64M console=ttyS0,115200 initrd=0x71100000,25165824 root=/dev/ram0 rw"
++# CONFIG_XIP_KERNEL is not set
++# CONFIG_KEXEC is not set
++
++#
++# CPU Power Management
++#
++# CONFIG_CPU_IDLE is not set
++
++#
++# Floating point emulation
++#
++
++#
++# At least one emulation must be selected
++#
++CONFIG_FPE_NWFPE=y
++# CONFIG_FPE_NWFPE_XP is not set
++# CONFIG_FPE_FASTFPE is not set
++# CONFIG_VFP is not set
++
++#
++# Userspace binary formats
++#
++CONFIG_BINFMT_ELF=y
++# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
++CONFIG_HAVE_AOUT=y
++# CONFIG_BINFMT_AOUT is not set
++# CONFIG_BINFMT_MISC is not set
++
++#
++# Power management options
++#
++# CONFIG_PM is not set
++CONFIG_ARCH_SUSPEND_POSSIBLE=y
++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 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_IPV6 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_NET_DSA is not set
++# CONFIG_VLAN_8021Q is not set
++# CONFIG_DECNET is not set
++# CONFIG_LLC2 is not set
++# CONFIG_IPX is not set
++# CONFIG_ATALK is not set
++# CONFIG_X25 is not set
++# CONFIG_LAPB is not set
++# CONFIG_ECONET is not set
++# CONFIG_WAN_ROUTER is not set
++# CONFIG_PHONET is not set
++# CONFIG_NET_SCHED is not set
++# CONFIG_DCB is not set
++
++#
++# Network testing
++#
++# CONFIG_NET_PKTGEN is not set
++# CONFIG_HAMRADIO is not set
++# CONFIG_CAN is not set
++# CONFIG_IRDA is not set
++# CONFIG_BT is not set
++# CONFIG_AF_RXRPC is not set
++CONFIG_WIRELESS=y
++CONFIG_CFG80211=y
++# CONFIG_CFG80211_REG_DEBUG is not set
++# CONFIG_WIRELESS_OLD_REGULATORY is not set
++CONFIG_WIRELESS_EXT=y
++CONFIG_WIRELESS_EXT_SYSFS=y
++CONFIG_LIB80211=y
++# CONFIG_LIB80211_DEBUG is not set
++CONFIG_MAC80211=y
++
++#
++# Rate control algorithm selection
++#
++CONFIG_MAC80211_RC_MINSTREL=y
++# CONFIG_MAC80211_RC_DEFAULT_PID is not set
++CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
++CONFIG_MAC80211_RC_DEFAULT="minstrel"
++# CONFIG_MAC80211_MESH is not set
++# CONFIG_MAC80211_LEDS is not set
++# CONFIG_MAC80211_DEBUG_MENU is not set
++# CONFIG_WIMAX 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_FIRMWARE_IN_KERNEL=y
++CONFIG_EXTRA_FIRMWARE=""
++# CONFIG_SYS_HYPERVISOR is not set
++# CONFIG_CONNECTOR is not set
++CONFIG_MTD=y
++# CONFIG_MTD_DEBUG is not set
++# CONFIG_MTD_CONCAT is not set
++CONFIG_MTD_PARTITIONS=y
++# CONFIG_MTD_TESTS is not set
++# CONFIG_MTD_REDBOOT_PARTS is not set
++CONFIG_MTD_CMDLINE_PARTS=y
++# CONFIG_MTD_AFS_PARTS is not set
++# CONFIG_MTD_AR7_PARTS is not set
++
++#
++# User Modules And Translation Layers
++#
++CONFIG_MTD_CHAR=y
++CONFIG_MTD_BLKDEVS=y
++CONFIG_MTD_BLOCK=y
++# CONFIG_FTL is not set
++# CONFIG_NFTL is not set
++# CONFIG_INFTL is not set
++# CONFIG_RFD_FTL is not set
++# CONFIG_SSFDC is not set
++# CONFIG_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 is not set
++# CONFIG_MTD_NAND_ECC_SMC is not set
++# CONFIG_MTD_NAND_MUSEUM_IDS is not set
++# CONFIG_MTD_NAND_GPIO is not set
++CONFIG_MTD_NAND_IDS=y
++# CONFIG_MTD_NAND_DISKONCHIP is not set
++CONFIG_MTD_NAND_ATMEL=y
++CONFIG_MTD_NAND_ATMEL_ECC_SOFT=y
++# CONFIG_MTD_NAND_ATMEL_ECC_HW is not set
++# CONFIG_MTD_NAND_ATMEL_ECC_NONE is not set
++# CONFIG_MTD_NAND_NANDSIM is not set
++# CONFIG_MTD_NAND_PLATFORM is not set
++# CONFIG_MTD_ALAUDA is not set
++# CONFIG_MTD_ONENAND is not set
++
++#
++# LPDDR flash memory drivers
++#
++# CONFIG_MTD_LPDDR is not set
++
++#
++# 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=4
++CONFIG_BLK_DEV_RAM_SIZE=8192
++# CONFIG_BLK_DEV_XIP is not set
++# CONFIG_CDROM_PKTCDVD is not set
++# CONFIG_ATA_OVER_ETH is not set
++CONFIG_MISC_DEVICES=y
++# CONFIG_ATMEL_PWM is not set
++CONFIG_ATMEL_TCLIB=y
++CONFIG_ATMEL_TCB_CLKSRC=y
++CONFIG_ATMEL_TCB_CLKSRC_BLOCK=0
++# CONFIG_ICS932S401 is not set
++# CONFIG_ATMEL_SSC is not set
++# CONFIG_ENCLOSURE_SERVICES is not set
++# CONFIG_ISL29003 is not set
++# CONFIG_C2PORT is not set
++
++#
++# EEPROM support
++#
++# CONFIG_EEPROM_AT24 is not set
++# CONFIG_EEPROM_AT25 is not set
++# CONFIG_EEPROM_LEGACY is not set
++CONFIG_EEPROM_93CX6=m
++CONFIG_HAVE_IDE=y
++# 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=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 is not set
++# CONFIG_SCSI_DH is not set
++# CONFIG_SCSI_OSD_INITIATOR is not set
++# CONFIG_ATA is not set
++# CONFIG_MD is not set
++CONFIG_NETDEVICES=y
++CONFIG_COMPAT_NET_DEV_OPS=y
++# CONFIG_DUMMY is not set
++# CONFIG_BONDING is not set
++# CONFIG_MACVLAN is not set
++# CONFIG_EQUALIZER is not set
++# CONFIG_TUN is not set
++# CONFIG_VETH is not set
++CONFIG_PHYLIB=y
++
++#
++# MII PHY device drivers
++#
++# CONFIG_MARVELL_PHY is not set
++CONFIG_DAVICOM_PHY=y
++# 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_REALTEK_PHY is not set
++# CONFIG_NATIONAL_PHY is not set
++# CONFIG_STE10XP is not set
++# CONFIG_LSI_ET1011C_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_ENC28J60 is not set
++# CONFIG_ETHOC is not set
++# CONFIG_SMC911X is not set
++# CONFIG_SMSC911X is not set
++# CONFIG_DNET is not set
++# CONFIG_IBM_NEW_EMAC_ZMII is not set
++# CONFIG_IBM_NEW_EMAC_RGMII is not set
++# CONFIG_IBM_NEW_EMAC_TAH is not set
++# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
++# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
++# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
++# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
++# CONFIG_B44 is not set
++# CONFIG_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_SPI=m
++# CONFIG_LIBERTAS_DEBUG is not set
++# CONFIG_LIBERTAS_THINFIRM is not set
++# CONFIG_AT76C50X_USB is not set
++CONFIG_USB_ZD1201=m
++# CONFIG_USB_NET_RNDIS_WLAN is not set
++CONFIG_RTL8187=m
++# CONFIG_MAC80211_HWSIM is not set
++# CONFIG_P54_COMMON is not set
++CONFIG_AR9170_USB=m
++# CONFIG_HOSTAP is not set
++# CONFIG_B43 is not set
++# CONFIG_B43LEGACY is not set
++CONFIG_ZD1211RW=m
++# CONFIG_ZD1211RW_DEBUG is not set
++CONFIG_RT2X00=m
++CONFIG_RT2500USB=m
++CONFIG_RT73USB=m
++CONFIG_RT2X00_LIB_USB=m
++CONFIG_RT2X00_LIB=m
++CONFIG_RT2X00_LIB_FIRMWARE=y
++CONFIG_RT2X00_LIB_CRYPTO=y
++CONFIG_RT2X00_LIB_RFKILL=y
++CONFIG_RT2X00_LIB_LEDS=y
++# CONFIG_RT2X00_DEBUG is not set
++
++#
++# Enable WiMAX (Networking options) to see the WiMAX drivers
++#
++
++#
++# USB Network Adapters
++#
++# CONFIG_USB_CATC is not set
++# CONFIG_USB_KAWETH is not set
++# CONFIG_USB_PEGASUS is not set
++# CONFIG_USB_RTL8150 is not set
++# CONFIG_USB_USBNET is not set
++# CONFIG_WAN is not set
++# CONFIG_PPP is not set
++# CONFIG_SLIP is not set
++# CONFIG_NETCONSOLE is not set
++# CONFIG_NETPOLL is not set
++# CONFIG_NET_POLL_CONTROLLER is not set
++# CONFIG_ISDN is not set
++
++#
++# Input device support
++#
++CONFIG_INPUT=y
++# CONFIG_INPUT_FF_MEMLESS is not set
++CONFIG_INPUT_POLLDEV=m
++
++#
++# Userland interfaces
++#
++CONFIG_INPUT_MOUSEDEV=y
++# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
++CONFIG_INPUT_MOUSEDEV_SCREEN_X=480
++CONFIG_INPUT_MOUSEDEV_SCREEN_Y=272
++CONFIG_INPUT_JOYDEV=y
++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_INPUT_MOUSE is not set
++# CONFIG_INPUT_JOYSTICK is not set
++# CONFIG_INPUT_TABLET is not set
++CONFIG_INPUT_TOUCHSCREEN=y
++# CONFIG_TOUCHSCREEN_ADS7846 is not set
++# CONFIG_TOUCHSCREEN_AD7877 is not set
++# CONFIG_TOUCHSCREEN_AD7879_I2C is not set
++# CONFIG_TOUCHSCREEN_AD7879_SPI is not set
++# CONFIG_TOUCHSCREEN_AD7879 is not set
++# CONFIG_TOUCHSCREEN_FUJITSU is not set
++# CONFIG_TOUCHSCREEN_GUNZE is not set
++# CONFIG_TOUCHSCREEN_ELO is not set
++# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
++# CONFIG_TOUCHSCREEN_MTOUCH is not set
++# CONFIG_TOUCHSCREEN_INEXIO 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_ATMEL_TSADCC=y
++# CONFIG_TOUCHSCREEN_WM97XX is not set
++# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
++# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
++# CONFIG_TOUCHSCREEN_TSC2007 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_CONSOLE_TRANSLATIONS=y
++CONFIG_VT_CONSOLE=y
++CONFIG_HW_CONSOLE=y
++# CONFIG_VT_HW_CONSOLE_BINDING is not set
++CONFIG_DEVKMEM=y
++# 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_PDC=y
++# CONFIG_SERIAL_ATMEL_TTYAT is not set
++# CONFIG_SERIAL_MAX3100 is not set
++CONFIG_SERIAL_CORE=y
++CONFIG_SERIAL_CORE_CONSOLE=y
++CONFIG_UNIX98_PTYS=y
++# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
++CONFIG_LEGACY_PTYS=y
++CONFIG_LEGACY_PTY_COUNT=4
++# CONFIG_IPMI_HANDLER is not set
++CONFIG_HW_RANDOM=y
++# CONFIG_HW_RANDOM_TIMERIOMEM is not set
++# CONFIG_R3964 is not set
++# CONFIG_RAW_DRIVER is not set
++# CONFIG_TCG_TPM is not set
++CONFIG_I2C=y
++CONFIG_I2C_BOARDINFO=y
++# CONFIG_I2C_CHARDEV is not set
++CONFIG_I2C_HELPER_AUTO=y
++CONFIG_I2C_ALGOBIT=y
++
++#
++# I2C Hardware Bus support
++#
++
++#
++# I2C system bus drivers (mostly embedded / system-on-chip)
++#
++CONFIG_I2C_GPIO=y
++# CONFIG_I2C_OCORES is not set
++# CONFIG_I2C_SIMTEC is not set
++
++#
++# External I2C/SMBus adapter drivers
++#
++# CONFIG_I2C_PARPORT_LIGHT is not set
++# CONFIG_I2C_TAOS_EVM is not set
++# CONFIG_I2C_TINY_USB is not set
++
++#
++# Other I2C/SMBus bus drivers
++#
++# CONFIG_I2C_PCA_PLATFORM is not set
++# CONFIG_I2C_STUB is not set
++
++#
++# Miscellaneous I2C Chip support
++#
++# CONFIG_DS1682 is not set
++# CONFIG_SENSORS_PCF8574 is not set
++# CONFIG_PCF8575 is not set
++# CONFIG_SENSORS_PCA9539 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
++CONFIG_SPI=y
++CONFIG_SPI_MASTER=y
++
++#
++# SPI Master Controller Drivers
++#
++CONFIG_SPI_ATMEL=y
++# CONFIG_SPI_BITBANG is not set
++# CONFIG_SPI_GPIO is not set
++
++#
++# SPI Protocol Masters
++#
++# CONFIG_SPI_SPIDEV is not set
++# CONFIG_SPI_TLE62X0 is not set
++CONFIG_ARCH_REQUIRE_GPIOLIB=y
++CONFIG_GPIOLIB=y
++# CONFIG_GPIO_SYSFS is not set
++
++#
++# Memory mapped GPIO expanders:
++#
++
++#
++# I2C GPIO expanders:
++#
++# CONFIG_GPIO_MAX732X is not set
++# CONFIG_GPIO_PCA953X is not set
++# CONFIG_GPIO_PCF857X is not set
++
++#
++# PCI GPIO expanders:
++#
++
++#
++# SPI GPIO expanders:
++#
++# CONFIG_GPIO_MAX7301 is not set
++# CONFIG_GPIO_MCP23S08 is not set
++# CONFIG_W1 is not set
++# CONFIG_POWER_SUPPLY is not set
++# CONFIG_HWMON is not set
++# CONFIG_THERMAL is not set
++# CONFIG_THERMAL_HWMON is not set
++# CONFIG_WATCHDOG is not set
++CONFIG_SSB_POSSIBLE=y
++
++#
++# Sonics Silicon Backplane
++#
++# CONFIG_SSB is not set
++
++#
++# Multifunction device drivers
++#
++# CONFIG_MFD_CORE is not set
++# CONFIG_MFD_SM501 is not set
++# CONFIG_MFD_ASIC3 is not set
++# CONFIG_HTC_EGPIO is not set
++# CONFIG_HTC_PASIC3 is not set
++# CONFIG_UCB1400_CORE is not set
++# CONFIG_TPS65010 is not set
++# CONFIG_TWL4030_CORE is not set
++# CONFIG_MFD_TMIO is not set
++# CONFIG_MFD_T7L66XB is not set
++# CONFIG_MFD_TC6387XB is not set
++# CONFIG_MFD_TC6393XB is not set
++# CONFIG_PMIC_DA903X is not set
++# CONFIG_MFD_WM8400 is not set
++# CONFIG_MFD_WM8350_I2C is not set
++# CONFIG_MFD_PCF50633 is not set
++
++#
++# Multimedia devices
++#
++
++#
++# Multimedia core support
++#
++# CONFIG_VIDEO_DEV is not set
++# CONFIG_DVB_CORE is not set
++# CONFIG_VIDEO_MEDIA is not set
++
++#
++# Multimedia drivers
++#
++# 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_BOOT_VESA_SUPPORT is not set
++CONFIG_FB_CFB_FILLRECT=y
++CONFIG_FB_CFB_COPYAREA=y
++CONFIG_FB_CFB_IMAGEBLIT=y
++# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
++# CONFIG_FB_SYS_FILLRECT is not set
++# CONFIG_FB_SYS_COPYAREA is not set
++# CONFIG_FB_SYS_IMAGEBLIT is not set
++# CONFIG_FB_FOREIGN_ENDIAN is not set
++# CONFIG_FB_SYS_FOPS is not set
++# CONFIG_FB_SVGALIB is not set
++# CONFIG_FB_MACMODES is not set
++# CONFIG_FB_BACKLIGHT is not set
++# CONFIG_FB_MODE_HELPERS is not set
++# CONFIG_FB_TILEBLITTING is not set
++
++#
++# Frame buffer hardware drivers
++#
++# CONFIG_FB_S1D15605 is not set
++# CONFIG_FB_S1D13XXX is not set
++CONFIG_FB_ATMEL=y
++# CONFIG_FB_VIRTUAL is not set
++# CONFIG_FB_METRONOME is not set
++# CONFIG_FB_MB862XX is not set
++# CONFIG_FB_BROADSHEET is not set
++CONFIG_BACKLIGHT_LCD_SUPPORT=y
++# CONFIG_LCD_CLASS_DEVICE is not set
++CONFIG_BACKLIGHT_CLASS_DEVICE=y
++CONFIG_BACKLIGHT_ATMEL_LCDC=y
++# CONFIG_BACKLIGHT_GENERIC 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 is not set
++# CONFIG_LOGO is not set
++CONFIG_SOUND=y
++CONFIG_SOUND_OSS_CORE=y
++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_PCM_OSS_PLUGINS=y
++# CONFIG_SND_SEQUENCER_OSS is not set
++# 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
++CONFIG_SND_VMASTER=y
++CONFIG_SND_AC97_CODEC=y
++# CONFIG_SND_DRIVERS is not set
++# CONFIG_SND_ARM is not set
++
++#
++# Atmel devices (AVR32 and AT91)
++#
++CONFIG_SND_ATMEL_AC97C=y
++# CONFIG_SND_SPI is not set
++CONFIG_SND_USB=y
++CONFIG_SND_USB_AUDIO=m
++# CONFIG_SND_USB_CAIAQ is not set
++# CONFIG_SND_SOC is not set
++# 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 is not set
++# CONFIG_HID_PID is not set
++
++#
++# Special HID drivers
++#
++CONFIG_USB_SUPPORT=y
++CONFIG_USB_ARCH_HAS_HCD=y
++CONFIG_USB_ARCH_HAS_OHCI=y
++CONFIG_USB_ARCH_HAS_EHCI=y
++CONFIG_USB=y
++# CONFIG_USB_DEBUG is not set
++CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
++
++#
++# Miscellaneous USB options
++#
++CONFIG_USB_DEVICEFS=y
++# CONFIG_USB_DEVICE_CLASS is not set
++# CONFIG_USB_DYNAMIC_MINORS is not set
++# CONFIG_USB_OTG is not set
++# CONFIG_USB_MON is not set
++# CONFIG_USB_WUSB is not set
++# CONFIG_USB_WUSB_CBAF is not set
++
++#
++# USB Host Controller Drivers
++#
++# CONFIG_USB_C67X00_HCD is not set
++CONFIG_USB_EHCI_HCD=y
++# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
++# CONFIG_USB_EHCI_TT_NEWSCHED is not set
++# CONFIG_USB_OXU210HP_HCD is not set
++# CONFIG_USB_ISP116X_HCD is not set
++# CONFIG_USB_ISP1760_HCD is not set
++CONFIG_USB_OHCI_HCD=y
++# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
++# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
++CONFIG_USB_OHCI_LITTLE_ENDIAN=y
++# CONFIG_USB_SL811_HCD is not set
++# CONFIG_USB_R8A66597_HCD is not set
++# CONFIG_USB_HWA_HCD is not set
++# CONFIG_USB_MUSB_HDRC is not set
++# CONFIG_USB_GADGET_MUSB_HDRC is not set
++
++#
++# USB Device Class drivers
++#
++# CONFIG_USB_ACM is not set
++# CONFIG_USB_PRINTER is not set
++# CONFIG_USB_WDM is not set
++# CONFIG_USB_TMC is not set
++
++#
++# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
++#
++
++#
++# also be needed; see USB_STORAGE Help for more info
++#
++CONFIG_USB_STORAGE=y
++# CONFIG_USB_STORAGE_DEBUG is not set
++# CONFIG_USB_STORAGE_DATAFAB is not set
++# CONFIG_USB_STORAGE_FREECOM is not set
++# CONFIG_USB_STORAGE_ISD200 is not set
++# CONFIG_USB_STORAGE_USBAT is not set
++# CONFIG_USB_STORAGE_SDDR09 is not set
++# CONFIG_USB_STORAGE_SDDR55 is not set
++# CONFIG_USB_STORAGE_JUMPSHOT is not set
++# CONFIG_USB_STORAGE_ALAUDA is not set
++# CONFIG_USB_STORAGE_ONETOUCH is not set
++# CONFIG_USB_STORAGE_KARMA is not set
++# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
++# CONFIG_USB_LIBUSUAL is not set
++
++#
++# USB Imaging devices
++#
++# CONFIG_USB_MDC800 is not set
++# CONFIG_USB_MICROTEK is not set
++
++#
++# USB port drivers
++#
++# CONFIG_USB_SERIAL is not set
++
++#
++# USB Miscellaneous drivers
++#
++# CONFIG_USB_EMI62 is not set
++# CONFIG_USB_EMI26 is not set
++# CONFIG_USB_ADUTUX is not set
++# CONFIG_USB_SEVSEG is not set
++# CONFIG_USB_RIO500 is not set
++# CONFIG_USB_LEGOTOWER is not set
++# CONFIG_USB_LCD is not set
++# CONFIG_USB_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_IDMOUSE is not set
++# CONFIG_USB_FTDI_ELAN is not set
++# CONFIG_USB_APPLEDISPLAY is not set
++# CONFIG_USB_SISUSBVGA is not set
++# CONFIG_USB_LD is not set
++# CONFIG_USB_TRANCEVIBRATOR is not set
++# CONFIG_USB_IOWARRIOR is not set
++# CONFIG_USB_TEST is not set
++# CONFIG_USB_ISIGHTFW is not set
++# CONFIG_USB_VST is not set
++CONFIG_USB_GADGET=y
++# CONFIG_USB_GADGET_DEBUG_FILES is not set
++CONFIG_USB_GADGET_VBUS_DRAW=2
++CONFIG_USB_GADGET_SELECTED=y
++# CONFIG_USB_GADGET_AT91 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_LH7A40X is not set
++# CONFIG_USB_GADGET_OMAP is not set
++# CONFIG_USB_GADGET_PXA25X is not set
++# CONFIG_USB_GADGET_PXA27X is not set
++# CONFIG_USB_GADGET_S3C2410 is not set
++# CONFIG_USB_GADGET_IMX is not set
++# CONFIG_USB_GADGET_M66592 is not set
++# CONFIG_USB_GADGET_AMD5536UDC is not set
++# CONFIG_USB_GADGET_FSL_QE is not set
++# CONFIG_USB_GADGET_CI13XXX is not set
++# CONFIG_USB_GADGET_NET2280 is not set
++# CONFIG_USB_GADGET_GOKU 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 is not set
++# CONFIG_USB_FILE_STORAGE is not set
++CONFIG_USB_G_SERIAL=m
++# CONFIG_USB_MIDI_GADGET is not set
++# CONFIG_USB_G_PRINTER is not set
++CONFIG_USB_CDC_COMPOSITE=m
++
++#
++# OTG and related infrastructure
++#
++# CONFIG_USB_GPIO_VBUS is not set
++# CONFIG_NOP_USB_XCEIV is not set
++CONFIG_MMC=y
++# CONFIG_MMC_DEBUG is not set
++# CONFIG_MMC_UNSAFE_RESUME is not set
++
++#
++# MMC/SD/SDIO Card Drivers
++#
++CONFIG_MMC_BLOCK=y
++# CONFIG_MMC_BLOCK_BOUNCE is not set
++CONFIG_SDIO_UART=m
++# CONFIG_MMC_TEST is not set
++
++#
++# MMC/SD/SDIO Host Controller Drivers
++#
++# CONFIG_MMC_SDHCI is not set
++# CONFIG_MMC_AT91 is not set
++CONFIG_MMC_ATMELMCI=y
++CONFIG_MMC_ATMELMCI_DMA=y
++# CONFIG_MMC_SPI is not set
++# CONFIG_MEMSTICK is not set
++# CONFIG_ACCESSIBILITY is not set
++CONFIG_NEW_LEDS=y
++CONFIG_LEDS_CLASS=y
++
++#
++# LED drivers
++#
++# CONFIG_LEDS_PCA9532 is not set
++CONFIG_LEDS_GPIO=y
++CONFIG_LEDS_GPIO_PLATFORM=y
++# CONFIG_LEDS_LP5521 is not set
++# CONFIG_LEDS_PCA955X is not set
++# CONFIG_LEDS_DAC124S085 is not set
++# CONFIG_LEDS_BD2802 is not set
++
++#
++# LED Triggers
++#
++CONFIG_LEDS_TRIGGERS=y
++CONFIG_LEDS_TRIGGER_TIMER=y
++CONFIG_LEDS_TRIGGER_HEARTBEAT=y
++# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
++CONFIG_LEDS_TRIGGER_GPIO=y
++# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set
++
++#
++# iptables trigger is under Netfilter config (LED target)
++#
++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
++# CONFIG_RTC_DRV_S35390A is not set
++# CONFIG_RTC_DRV_FM3130 is not set
++# CONFIG_RTC_DRV_RX8581 is not set
++
++#
++# SPI RTC drivers
++#
++# CONFIG_RTC_DRV_M41T94 is not set
++# CONFIG_RTC_DRV_DS1305 is not set
++# CONFIG_RTC_DRV_DS1390 is not set
++# CONFIG_RTC_DRV_MAX6902 is not set
++# CONFIG_RTC_DRV_R9701 is not set
++# CONFIG_RTC_DRV_RS5C348 is not set
++# CONFIG_RTC_DRV_DS3234 is not set
++
++#
++# Platform RTC drivers
++#
++# CONFIG_RTC_DRV_CMOS is not set
++# CONFIG_RTC_DRV_DS1286 is not set
++# CONFIG_RTC_DRV_DS1511 is not set
++# CONFIG_RTC_DRV_DS1553 is not set
++# CONFIG_RTC_DRV_DS1742 is not set
++# CONFIG_RTC_DRV_STK17TA8 is not set
++# CONFIG_RTC_DRV_M48T86 is not set
++# CONFIG_RTC_DRV_M48T35 is not set
++# CONFIG_RTC_DRV_M48T59 is not set
++# CONFIG_RTC_DRV_BQ4802 is not set
++# CONFIG_RTC_DRV_V3020 is not set
++
++#
++# on-CPU RTC drivers
++#
++CONFIG_RTC_DRV_AT91SAM9=y
++CONFIG_RTC_DRV_AT91SAM9_RTT=0
++CONFIG_RTC_DRV_AT91SAM9_GPBR=0
++CONFIG_DMADEVICES=y
++
++#
++# DMA Devices
++#
++CONFIG_AT_HDMAC=y
++CONFIG_DMA_ENGINE=y
++
++#
++# DMA Clients
++#
++# CONFIG_NET_DMA is not set
++# CONFIG_ASYNC_TX_DMA is not set
++CONFIG_DMATEST=m
++# CONFIG_AUXDISPLAY is not set
++# CONFIG_REGULATOR is not set
++# CONFIG_UIO is not set
++# CONFIG_STAGING is not set
++
++#
++# File systems
++#
++CONFIG_EXT2_FS=y
++# CONFIG_EXT2_FS_XATTR is not set
++# CONFIG_EXT2_FS_XIP is not set
++# CONFIG_EXT3_FS is not set
++# CONFIG_EXT4_FS is not set
++# CONFIG_REISERFS_FS is not set
++# CONFIG_JFS_FS is not set
++# CONFIG_FS_POSIX_ACL is not set
++CONFIG_FILE_LOCKING=y
++# CONFIG_XFS_FS is not set
++# CONFIG_OCFS2_FS is not set
++# CONFIG_BTRFS_FS is not set
++CONFIG_DNOTIFY=y
++CONFIG_INOTIFY=y
++CONFIG_INOTIFY_USER=y
++# CONFIG_QUOTA is not set
++# CONFIG_AUTOFS_FS is not set
++# CONFIG_AUTOFS4_FS is not set
++# CONFIG_FUSE_FS is not set
++
++#
++# Caches
++#
++# CONFIG_FSCACHE is not set
++
++#
++# CD-ROM/DVD Filesystems
++#
++# CONFIG_ISO9660_FS is not set
++# CONFIG_UDF_FS is not set
++
++#
++# DOS/FAT/NT Filesystems
++#
++CONFIG_FAT_FS=y
++# CONFIG_MSDOS_FS 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_PROC_PAGE_MONITOR=y
++CONFIG_SYSFS=y
++CONFIG_TMPFS=y
++# CONFIG_TMPFS_POSIX_ACL is not set
++# CONFIG_HUGETLB_PAGE is not set
++# CONFIG_CONFIGFS_FS is not set
++CONFIG_MISC_FILESYSTEMS=y
++# CONFIG_ADFS_FS is not set
++# CONFIG_AFFS_FS is not set
++# CONFIG_HFS_FS is not set
++# CONFIG_HFSPLUS_FS is not set
++# CONFIG_BEFS_FS is not set
++# CONFIG_BFS_FS is not set
++# CONFIG_EFS_FS is not set
++CONFIG_JFFS2_FS=y
++CONFIG_JFFS2_FS_DEBUG=0
++CONFIG_JFFS2_FS_WRITEBUFFER=y
++# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
++CONFIG_JFFS2_SUMMARY=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_JFFS2_CMODE_NONE is not set
++# CONFIG_JFFS2_CMODE_PRIORITY is not set
++# CONFIG_JFFS2_CMODE_SIZE is not set
++# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
++CONFIG_CRAMFS=m
++CONFIG_SQUASHFS=m
++CONFIG_SQUASHFS_EMBEDDED=y
++CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
++# CONFIG_VXFS_FS is not set
++# CONFIG_MINIX_FS is not set
++# CONFIG_OMFS_FS is not set
++# CONFIG_HPFS_FS is not set
++# CONFIG_QNX4FS_FS is not set
++# CONFIG_ROMFS_FS is not set
++# CONFIG_SYSV_FS is not set
++# CONFIG_UFS_FS is not set
++# CONFIG_NILFS2_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_NFSD is not set
++CONFIG_LOCKD=y
++CONFIG_LOCKD_V4=y
++CONFIG_NFS_COMMON=y
++CONFIG_SUNRPC=y
++# CONFIG_RPCSEC_GSS_KRB5 is not set
++# CONFIG_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
++
++#
++# Kernel hacking
++#
++# CONFIG_PRINTK_TIME is not set
++CONFIG_ENABLE_WARN_DEPRECATED=y
++CONFIG_ENABLE_MUST_CHECK=y
++CONFIG_FRAME_WARN=1024
++# 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_DEBUG_MEMORY_INIT=y
++# CONFIG_RCU_CPU_STALL_DETECTOR is not set
++# CONFIG_LATENCYTOP is not set
++# CONFIG_SYSCTL_SYSCALL_CHECK is not set
++CONFIG_HAVE_FUNCTION_TRACER=y
++CONFIG_TRACING_SUPPORT=y
++
++#
++# Tracers
++#
++# CONFIG_FUNCTION_TRACER is not set
++# CONFIG_IRQSOFF_TRACER is not set
++# CONFIG_SCHED_TRACER is not set
++# CONFIG_CONTEXT_SWITCH_TRACER is not set
++# CONFIG_EVENT_TRACER is not set
++# CONFIG_BOOT_TRACER is not set
++# CONFIG_TRACE_BRANCH_PROFILING is not set
++# CONFIG_STACK_TRACER is not set
++# CONFIG_KMEMTRACE is not set
++# CONFIG_WORKQUEUE_TRACER is not set
++# CONFIG_BLK_DEV_IO_TRACE is not set
++# CONFIG_SAMPLES is not set
++CONFIG_HAVE_ARCH_KGDB=y
++CONFIG_ARM_UNWIND=y
++CONFIG_DEBUG_USER=y
++
++#
++# Security options
++#
++# CONFIG_KEYS is not set
++# CONFIG_SECURITY is not set
++# CONFIG_SECURITYFS is not set
++# CONFIG_SECURITY_FILE_CAPABILITIES is not set
++CONFIG_CRYPTO=y
++
++#
++# Crypto core or helper
++#
++# CONFIG_CRYPTO_FIPS is not set
++CONFIG_CRYPTO_ALGAPI=y
++CONFIG_CRYPTO_ALGAPI2=y
++CONFIG_CRYPTO_AEAD2=y
++CONFIG_CRYPTO_BLKCIPHER=y
++CONFIG_CRYPTO_BLKCIPHER2=y
++CONFIG_CRYPTO_HASH2=y
++CONFIG_CRYPTO_RNG2=y
++CONFIG_CRYPTO_PCOMP=y
++CONFIG_CRYPTO_MANAGER=y
++CONFIG_CRYPTO_MANAGER2=y
++# CONFIG_CRYPTO_GF128MUL is not set
++# CONFIG_CRYPTO_NULL is not set
++CONFIG_CRYPTO_WORKQUEUE=y
++# CONFIG_CRYPTO_CRYPTD is not set
++# CONFIG_CRYPTO_AUTHENC is not set
++# CONFIG_CRYPTO_TEST is not set
++
++#
++# Authenticated Encryption with Associated Data
++#
++# CONFIG_CRYPTO_CCM is not set
++# CONFIG_CRYPTO_GCM is not set
++# CONFIG_CRYPTO_SEQIV is not set
++
++#
++# Block modes
++#
++# CONFIG_CRYPTO_CBC is not set
++# CONFIG_CRYPTO_CTR is not set
++# CONFIG_CRYPTO_CTS is not set
++CONFIG_CRYPTO_ECB=y
++# CONFIG_CRYPTO_LRW is not set
++# CONFIG_CRYPTO_PCBC is not set
++# CONFIG_CRYPTO_XTS is not set
++
++#
++# Hash modes
++#
++# CONFIG_CRYPTO_HMAC is not set
++# CONFIG_CRYPTO_XCBC is not set
++
++#
++# Digest
++#
++# CONFIG_CRYPTO_CRC32C is not set
++# CONFIG_CRYPTO_MD4 is not set
++# CONFIG_CRYPTO_MD5 is not set
++# CONFIG_CRYPTO_MICHAEL_MIC is not set
++# CONFIG_CRYPTO_RMD128 is not set
++# CONFIG_CRYPTO_RMD160 is not set
++# CONFIG_CRYPTO_RMD256 is not set
++# CONFIG_CRYPTO_RMD320 is not set
++# CONFIG_CRYPTO_SHA1 is not set
++# CONFIG_CRYPTO_SHA256 is not set
++# CONFIG_CRYPTO_SHA512 is not set
++# CONFIG_CRYPTO_TGR192 is not set
++# CONFIG_CRYPTO_WP512 is not set
++
++#
++# Ciphers
++#
++CONFIG_CRYPTO_AES=y
++# CONFIG_CRYPTO_ANUBIS is not set
++CONFIG_CRYPTO_ARC4=y
++# CONFIG_CRYPTO_BLOWFISH is not set
++# CONFIG_CRYPTO_CAMELLIA is not set
++# CONFIG_CRYPTO_CAST5 is not set
++# CONFIG_CRYPTO_CAST6 is not set
++# CONFIG_CRYPTO_DES is not set
++# CONFIG_CRYPTO_FCRYPT is not set
++# CONFIG_CRYPTO_KHAZAD is not set
++# CONFIG_CRYPTO_SALSA20 is not set
++# CONFIG_CRYPTO_SEED is not set
++# CONFIG_CRYPTO_SERPENT is not set
++# CONFIG_CRYPTO_TEA is not set
++# CONFIG_CRYPTO_TWOFISH is not set
++
++#
++# Compression
++#
++# CONFIG_CRYPTO_DEFLATE is not set
++# CONFIG_CRYPTO_ZLIB is not set
++# CONFIG_CRYPTO_LZO is not set
++
++#
++# Random Number Generation
++#
++# CONFIG_CRYPTO_ANSI_CPRNG is not set
++# CONFIG_CRYPTO_HW is not set
++# CONFIG_BINARY_PRINTF is not set
++
++#
++# Library routines
++#
++CONFIG_BITREVERSE=y
++CONFIG_GENERIC_FIND_LAST_BIT=y
++# CONFIG_CRC_CCITT is not set
++# CONFIG_CRC16 is not set
++# CONFIG_CRC_T10DIF is not set
++CONFIG_CRC_ITU_T=m
++CONFIG_CRC32=y
++# CONFIG_CRC7 is not set
++# CONFIG_LIBCRC32C is not set
++CONFIG_ZLIB_INFLATE=y
++CONFIG_ZLIB_DEFLATE=y
++CONFIG_DECOMPRESS_GZIP=y
++CONFIG_DECOMPRESS_BZIP2=y
++CONFIG_DECOMPRESS_LZMA=y
++CONFIG_HAS_IOMEM=y
++CONFIG_HAS_IOPORT=y
++CONFIG_HAS_DMA=y
++CONFIG_NLATTR=y
+Index: linux-2.6.30/arch/arm/configs/at91sam9g20ek_2mmc_defconfig
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.30/arch/arm/configs/at91sam9g20ek_2mmc_defconfig 2011-02-01 16:40:30.197007464 +0100
+@@ -0,0 +1,1557 @@
++#
++# Automatically generated make config: don't edit
++# Linux kernel version: 2.6.30
++# Mon Oct 12 18:24:05 2009
++#
++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_HAVE_LATENCYTOP_SUPPORT=y
++CONFIG_LOCKDEP_SUPPORT=y
++CONFIG_TRACE_IRQFLAGS_SUPPORT=y
++CONFIG_HARDIRQS_SW_RESEND=y
++CONFIG_GENERIC_IRQ_PROBE=y
++CONFIG_RWSEM_GENERIC_SPINLOCK=y
++# CONFIG_ARCH_HAS_ILOG2_U32 is not set
++# CONFIG_ARCH_HAS_ILOG2_U64 is not set
++CONFIG_GENERIC_HWEIGHT=y
++CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=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_AUDIT is not set
++
++#
++# RCU Subsystem
++#
++CONFIG_CLASSIC_RCU=y
++# CONFIG_TREE_RCU is not set
++# CONFIG_PREEMPT_RCU is not set
++# CONFIG_TREE_RCU_TRACE is not set
++# CONFIG_PREEMPT_RCU_TRACE is not set
++# CONFIG_IKCONFIG is not set
++CONFIG_LOG_BUF_SHIFT=14
++# CONFIG_GROUP_SCHED is not set
++# CONFIG_CGROUPS is not set
++CONFIG_SYSFS_DEPRECATED=y
++CONFIG_SYSFS_DEPRECATED_V2=y
++# CONFIG_RELAY is not set
++CONFIG_NAMESPACES=y
++# CONFIG_UTS_NS is not set
++# CONFIG_IPC_NS is not set
++# CONFIG_USER_NS is not set
++# CONFIG_PID_NS is not set
++# CONFIG_NET_NS is not set
++CONFIG_BLK_DEV_INITRD=y
++CONFIG_INITRAMFS_SOURCE=""
++CONFIG_RD_GZIP=y
++CONFIG_RD_BZIP2=y
++CONFIG_RD_LZMA=y
++CONFIG_CC_OPTIMIZE_FOR_SIZE=y
++CONFIG_SYSCTL=y
++CONFIG_ANON_INODES=y
++# CONFIG_EMBEDDED is not set
++CONFIG_UID16=y
++CONFIG_SYSCTL_SYSCALL=y
++CONFIG_KALLSYMS=y
++# CONFIG_KALLSYMS_EXTRA_PASS is not set
++CONFIG_STRIP_ASM_SYMS=y
++CONFIG_HOTPLUG=y
++CONFIG_PRINTK=y
++CONFIG_BUG=y
++CONFIG_ELF_CORE=y
++CONFIG_BASE_FULL=y
++CONFIG_FUTEX=y
++CONFIG_EPOLL=y
++CONFIG_SIGNALFD=y
++CONFIG_TIMERFD=y
++CONFIG_EVENTFD=y
++CONFIG_SHMEM=y
++CONFIG_AIO=y
++CONFIG_VM_EVENT_COUNTERS=y
++CONFIG_COMPAT_BRK=y
++CONFIG_SLAB=y
++# CONFIG_SLUB is not set
++# CONFIG_SLOB is not set
++# CONFIG_PROFILING is not set
++# CONFIG_MARKERS is not set
++CONFIG_HAVE_OPROFILE=y
++# CONFIG_KPROBES is not set
++CONFIG_HAVE_KPROBES=y
++CONFIG_HAVE_KRETPROBES=y
++CONFIG_HAVE_CLK=y
++# CONFIG_SLOW_WORK is not set
++CONFIG_HAVE_GENERIC_DMA_COHERENT=y
++CONFIG_SLABINFO=y
++CONFIG_RT_MUTEXES=y
++CONFIG_BASE_SMALL=0
++CONFIG_MODULES=y
++# CONFIG_MODULE_FORCE_LOAD is not set
++CONFIG_MODULE_UNLOAD=y
++# CONFIG_MODULE_FORCE_UNLOAD is not set
++# CONFIG_MODVERSIONS is not set
++# CONFIG_MODULE_SRCVERSION_ALL is not set
++CONFIG_BLOCK=y
++# CONFIG_LBD is not set
++# CONFIG_BLK_DEV_BSG is not set
++# CONFIG_BLK_DEV_INTEGRITY 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"
++CONFIG_FREEZER=y
++
++#
++# 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_CLPS711X is not set
++# CONFIG_ARCH_EBSA110 is not set
++# CONFIG_ARCH_EP93XX is not set
++# CONFIG_ARCH_GEMINI 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_KIRKWOOD is not set
++# CONFIG_ARCH_KS8695 is not set
++# CONFIG_ARCH_NS9XXX is not set
++# CONFIG_ARCH_LOKI is not set
++# CONFIG_ARCH_MV78XX0 is not set
++# CONFIG_ARCH_MXC is not set
++# CONFIG_ARCH_ORION5X is not set
++# CONFIG_ARCH_PNX4008 is not set
++# CONFIG_ARCH_PXA is not set
++# CONFIG_ARCH_MMP is not set
++# CONFIG_ARCH_RPC is not set
++# CONFIG_ARCH_SA1100 is not set
++# CONFIG_ARCH_S3C2410 is not set
++# CONFIG_ARCH_S3C64XX is not set
++# CONFIG_ARCH_SHARK is not set
++# CONFIG_ARCH_LH7A40X is not set
++# CONFIG_ARCH_DAVINCI is not set
++# CONFIG_ARCH_OMAP is not set
++# CONFIG_ARCH_MSM is not set
++# CONFIG_ARCH_W90X900 is not set
++
++#
++# Atmel AT91 System-on-Chip
++#
++# CONFIG_ARCH_AT91RM9200 is not set
++# CONFIG_ARCH_AT91SAM9260 is not set
++# CONFIG_ARCH_AT91SAM9261 is not set
++# CONFIG_ARCH_AT91SAM9G10 is not set
++# CONFIG_ARCH_AT91SAM9263 is not set
++# CONFIG_ARCH_AT91SAM9RL is not set
++CONFIG_ARCH_AT91SAM9G20=y
++# CONFIG_ARCH_AT91SAM9G45 is not set
++# CONFIG_ARCH_AT91CAP9 is not set
++# CONFIG_ARCH_AT572D940HF is not set
++# CONFIG_ARCH_AT91X40 is not set
++CONFIG_AT91_PMC_UNIT=y
++
++#
++# AT91SAM9G20 Board Type
++#
++# CONFIG_MACH_AT91SAM9G20EK is not set
++CONFIG_MACH_AT91SAM9G20EK_2MMC=y
++# CONFIG_MACH_USB_A9G20 is not set
++# CONFIG_MACH_QIL_A9G20 is not set
++# CONFIG_MACH_SBC35_A9G20 is not set
++
++#
++# AT91 Board Options
++#
++# CONFIG_MTD_NAND_ATMEL_BUSWIDTH_16 is not set
++
++#
++# AT91 Feature Selections
++#
++CONFIG_AT91_PROGRAMMABLE_CLOCKS=y
++# CONFIG_AT91_SLOW_CLOCK is not set
++CONFIG_AT91_TIMER_HZ=100
++CONFIG_AT91_EARLY_DBGU=y
++# CONFIG_AT91_EARLY_USART0 is not set
++# CONFIG_AT91_EARLY_USART1 is not set
++# CONFIG_AT91_EARLY_USART2 is not set
++# CONFIG_AT91_EARLY_USART3 is not set
++# CONFIG_AT91_EARLY_USART4 is not set
++# CONFIG_AT91_EARLY_USART5 is not set
++
++#
++# Processor Type
++#
++CONFIG_CPU_32=y
++CONFIG_CPU_ARM926T=y
++CONFIG_CPU_32v5=y
++CONFIG_CPU_ABRT_EV5TJ=y
++CONFIG_CPU_PABRT_NOIFAR=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
++# CONFIG_PCCARD is not set
++
++#
++# Kernel Features
++#
++# CONFIG_NO_HZ is not set
++# CONFIG_HIGH_RES_TIMERS is not set
++CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
++CONFIG_VMSPLIT_3G=y
++# CONFIG_VMSPLIT_2G is not set
++# CONFIG_VMSPLIT_1G is not set
++CONFIG_PAGE_OFFSET=0xC0000000
++# CONFIG_PREEMPT is not set
++CONFIG_HZ=100
++CONFIG_AEABI=y
++CONFIG_OABI_COMPAT=y
++# CONFIG_ARCH_HAS_HOLES_MEMORYMODEL is not set
++# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
++# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
++# CONFIG_HIGHMEM is not set
++CONFIG_SELECT_MEMORY_MODEL=y
++CONFIG_FLATMEM_MANUAL=y
++# CONFIG_DISCONTIGMEM_MANUAL is not set
++# CONFIG_SPARSEMEM_MANUAL is not set
++CONFIG_FLATMEM=y
++CONFIG_FLAT_NODE_MEM_MAP=y
++CONFIG_PAGEFLAGS_EXTENDED=y
++CONFIG_SPLIT_PTLOCK_CPUS=4096
++# CONFIG_PHYS_ADDR_T_64BIT is not set
++CONFIG_ZONE_DMA_FLAG=0
++CONFIG_VIRT_TO_BUS=y
++CONFIG_UNEVICTABLE_LRU=y
++CONFIG_HAVE_MLOCK=y
++CONFIG_HAVE_MLOCKED_PAGE_BIT=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="mem=64M console=ttyS0,115200 initrd=0x21100000,3145728 root=/dev/ram0 rw"
++# CONFIG_XIP_KERNEL is not set
++# CONFIG_KEXEC is not set
++
++#
++# CPU Power Management
++#
++# CONFIG_CPU_IDLE is not set
++
++#
++# Floating point emulation
++#
++
++#
++# At least one emulation must be selected
++#
++CONFIG_FPE_NWFPE=y
++# CONFIG_FPE_NWFPE_XP is not set
++# CONFIG_FPE_FASTFPE is not set
++# CONFIG_VFP is not set
++
++#
++# Userspace binary formats
++#
++CONFIG_BINFMT_ELF=y
++# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
++CONFIG_HAVE_AOUT=y
++# CONFIG_BINFMT_AOUT is not set
++# CONFIG_BINFMT_MISC is not set
++
++#
++# Power management options
++#
++CONFIG_PM=y
++# CONFIG_PM_DEBUG is not set
++CONFIG_PM_SLEEP=y
++CONFIG_SUSPEND=y
++CONFIG_SUSPEND_FREEZER=y
++# CONFIG_APM_EMULATION is not set
++CONFIG_ARCH_SUSPEND_POSSIBLE=y
++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 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_IPV6 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_NET_DSA is not set
++# CONFIG_VLAN_8021Q is not set
++# CONFIG_DECNET is not set
++# CONFIG_LLC2 is not set
++# CONFIG_IPX is not set
++# CONFIG_ATALK is not set
++# CONFIG_X25 is not set
++# CONFIG_LAPB is not set
++# CONFIG_ECONET is not set
++# CONFIG_WAN_ROUTER is not set
++# CONFIG_PHONET is not set
++# CONFIG_NET_SCHED is not set
++# CONFIG_DCB is not set
++
++#
++# Network testing
++#
++# CONFIG_NET_PKTGEN is not set
++# CONFIG_HAMRADIO is not set
++# CONFIG_CAN is not set
++# CONFIG_IRDA is not set
++# CONFIG_BT is not set
++# CONFIG_AF_RXRPC is not set
++CONFIG_WIRELESS=y
++CONFIG_CFG80211=y
++# CONFIG_CFG80211_REG_DEBUG is not set
++# CONFIG_WIRELESS_OLD_REGULATORY is not set
++CONFIG_WIRELESS_EXT=y
++CONFIG_WIRELESS_EXT_SYSFS=y
++CONFIG_LIB80211=y
++# CONFIG_LIB80211_DEBUG is not set
++CONFIG_MAC80211=y
++
++#
++# Rate control algorithm selection
++#
++CONFIG_MAC80211_RC_MINSTREL=y
++# CONFIG_MAC80211_RC_DEFAULT_PID is not set
++CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
++CONFIG_MAC80211_RC_DEFAULT="minstrel"
++# CONFIG_MAC80211_MESH is not set
++# CONFIG_MAC80211_LEDS is not set
++# CONFIG_MAC80211_DEBUG_MENU is not set
++# CONFIG_WIMAX 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_FIRMWARE_IN_KERNEL=y
++CONFIG_EXTRA_FIRMWARE=""
++# CONFIG_SYS_HYPERVISOR is not set
++# CONFIG_CONNECTOR is not set
++CONFIG_MTD=y
++# CONFIG_MTD_DEBUG is not set
++# CONFIG_MTD_CONCAT is not set
++CONFIG_MTD_PARTITIONS=y
++# CONFIG_MTD_TESTS is not set
++# CONFIG_MTD_REDBOOT_PARTS is not set
++CONFIG_MTD_CMDLINE_PARTS=y
++# CONFIG_MTD_AFS_PARTS is not set
++# CONFIG_MTD_AR7_PARTS is not set
++
++#
++# User Modules And Translation Layers
++#
++CONFIG_MTD_CHAR=y
++CONFIG_MTD_BLKDEVS=y
++CONFIG_MTD_BLOCK=y
++# CONFIG_FTL is not set
++# CONFIG_NFTL is not set
++# CONFIG_INFTL is not set
++# CONFIG_RFD_FTL is not set
++# CONFIG_SSFDC is not set
++# CONFIG_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=y
++# CONFIG_MTD_DATAFLASH_WRITE_VERIFY is not set
++# CONFIG_MTD_DATAFLASH_OTP 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_GPIO is not set
++CONFIG_MTD_NAND_IDS=y
++# CONFIG_MTD_NAND_DISKONCHIP is not set
++CONFIG_MTD_NAND_ATMEL=y
++CONFIG_MTD_NAND_ATMEL_ECC_SOFT=y
++# CONFIG_MTD_NAND_ATMEL_ECC_HW is not set
++# CONFIG_MTD_NAND_ATMEL_ECC_NONE is not set
++# CONFIG_MTD_NAND_NANDSIM is not set
++# CONFIG_MTD_NAND_PLATFORM is not set
++# CONFIG_MTD_ALAUDA is not set
++# CONFIG_MTD_ONENAND is not set
++
++#
++# LPDDR flash memory drivers
++#
++# CONFIG_MTD_LPDDR is not set
++
++#
++# 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=4
++CONFIG_BLK_DEV_RAM_SIZE=8192
++# CONFIG_BLK_DEV_XIP is not set
++# CONFIG_CDROM_PKTCDVD is not set
++# CONFIG_ATA_OVER_ETH is not set
++CONFIG_MISC_DEVICES=y
++CONFIG_ATMEL_TCLIB=y
++CONFIG_ATMEL_TCB_CLKSRC=y
++CONFIG_ATMEL_TCB_CLKSRC_BLOCK=0
++# CONFIG_ICS932S401 is not set
++CONFIG_ATMEL_SSC=y
++# CONFIG_ENCLOSURE_SERVICES is not set
++# CONFIG_ISL29003 is not set
++# CONFIG_C2PORT is not set
++
++#
++# EEPROM support
++#
++# CONFIG_EEPROM_AT24 is not set
++# CONFIG_EEPROM_AT25 is not set
++# CONFIG_EEPROM_LEGACY is not set
++CONFIG_EEPROM_93CX6=m
++CONFIG_HAVE_IDE=y
++# 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=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 is not set
++# CONFIG_SCSI_DH is not set
++# CONFIG_SCSI_OSD_INITIATOR is not set
++# CONFIG_ATA is not set
++# CONFIG_MD is not set
++CONFIG_NETDEVICES=y
++CONFIG_COMPAT_NET_DEV_OPS=y
++# CONFIG_DUMMY is not set
++# CONFIG_BONDING is not set
++# CONFIG_MACVLAN is not set
++# CONFIG_EQUALIZER is not set
++# CONFIG_TUN is not set
++# CONFIG_VETH is not set
++CONFIG_PHYLIB=y
++
++#
++# MII PHY device drivers
++#
++# CONFIG_MARVELL_PHY is not set
++CONFIG_DAVICOM_PHY=y
++# 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_REALTEK_PHY is not set
++# CONFIG_NATIONAL_PHY is not set
++# CONFIG_STE10XP is not set
++# CONFIG_LSI_ET1011C_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_ENC28J60 is not set
++# CONFIG_ETHOC is not set
++# CONFIG_SMC911X is not set
++# CONFIG_SMSC911X is not set
++# CONFIG_DNET is not set
++# CONFIG_IBM_NEW_EMAC_ZMII is not set
++# CONFIG_IBM_NEW_EMAC_RGMII is not set
++# CONFIG_IBM_NEW_EMAC_TAH is not set
++# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
++# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
++# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
++# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
++# CONFIG_B44 is not set
++# CONFIG_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_SPI=m
++# CONFIG_LIBERTAS_DEBUG is not set
++# CONFIG_LIBERTAS_THINFIRM is not set
++# CONFIG_AT76C50X_USB is not set
++CONFIG_USB_ZD1201=m
++# CONFIG_USB_NET_RNDIS_WLAN is not set
++CONFIG_RTL8187=m
++# CONFIG_MAC80211_HWSIM is not set
++# CONFIG_P54_COMMON is not set
++CONFIG_AR9170_USB=m
++# CONFIG_HOSTAP is not set
++# CONFIG_B43 is not set
++# CONFIG_B43LEGACY is not set
++CONFIG_ZD1211RW=m
++# CONFIG_ZD1211RW_DEBUG is not set
++CONFIG_RT2X00=m
++CONFIG_RT2500USB=m
++CONFIG_RT73USB=m
++CONFIG_RT2X00_LIB_USB=m
++CONFIG_RT2X00_LIB=m
++CONFIG_RT2X00_LIB_FIRMWARE=y
++CONFIG_RT2X00_LIB_CRYPTO=y
++CONFIG_RT2X00_LIB_RFKILL=y
++CONFIG_RT2X00_LIB_LEDS=y
++# CONFIG_RT2X00_DEBUG is not set
++
++#
++# Enable WiMAX (Networking options) to see the WiMAX drivers
++#
++
++#
++# USB Network Adapters
++#
++# CONFIG_USB_CATC is not set
++# CONFIG_USB_KAWETH is not set
++# CONFIG_USB_PEGASUS is not set
++# CONFIG_USB_RTL8150 is not set
++# CONFIG_USB_USBNET is not set
++# CONFIG_WAN is not set
++# CONFIG_PPP is not set
++# CONFIG_SLIP is not set
++# CONFIG_NETCONSOLE is not set
++# CONFIG_NETPOLL is not set
++# CONFIG_NET_POLL_CONTROLLER is not set
++# CONFIG_ISDN is not set
++
++#
++# Input device support
++#
++CONFIG_INPUT=y
++# CONFIG_INPUT_FF_MEMLESS is not set
++CONFIG_INPUT_POLLDEV=m
++
++#
++# 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_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_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_CONSOLE_TRANSLATIONS=y
++CONFIG_VT_CONSOLE=y
++CONFIG_HW_CONSOLE=y
++# CONFIG_VT_HW_CONSOLE_BINDING is not set
++CONFIG_DEVKMEM=y
++# 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_PDC=y
++# CONFIG_SERIAL_ATMEL_TTYAT is not set
++# CONFIG_SERIAL_MAX3100 is not set
++CONFIG_SERIAL_CORE=y
++CONFIG_SERIAL_CORE_CONSOLE=y
++CONFIG_UNIX98_PTYS=y
++# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
++CONFIG_LEGACY_PTYS=y
++CONFIG_LEGACY_PTY_COUNT=4
++# CONFIG_IPMI_HANDLER is not set
++CONFIG_HW_RANDOM=y
++# CONFIG_HW_RANDOM_TIMERIOMEM is not set
++# CONFIG_R3964 is not set
++# CONFIG_RAW_DRIVER is not set
++# CONFIG_TCG_TPM is not set
++CONFIG_I2C=y
++CONFIG_I2C_BOARDINFO=y
++CONFIG_I2C_CHARDEV=m
++CONFIG_I2C_HELPER_AUTO=y
++CONFIG_I2C_ALGOBIT=y
++
++#
++# I2C Hardware Bus support
++#
++
++#
++# I2C system bus drivers (mostly embedded / system-on-chip)
++#
++CONFIG_I2C_GPIO=y
++# CONFIG_I2C_OCORES is not set
++# CONFIG_I2C_SIMTEC is not set
++
++#
++# External I2C/SMBus adapter drivers
++#
++# CONFIG_I2C_PARPORT_LIGHT is not set
++# CONFIG_I2C_TAOS_EVM is not set
++# CONFIG_I2C_TINY_USB is not set
++
++#
++# Other I2C/SMBus bus drivers
++#
++# CONFIG_I2C_PCA_PLATFORM is not set
++# CONFIG_I2C_STUB is not set
++
++#
++# Miscellaneous I2C Chip support
++#
++# CONFIG_DS1682 is not set
++# CONFIG_SENSORS_PCF8574 is not set
++# CONFIG_PCF8575 is not set
++# CONFIG_SENSORS_PCA9539 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
++CONFIG_SPI=y
++CONFIG_SPI_MASTER=y
++
++#
++# SPI Master Controller Drivers
++#
++CONFIG_SPI_ATMEL=y
++# CONFIG_SPI_BITBANG is not set
++# CONFIG_SPI_GPIO is not set
++
++#
++# SPI Protocol Masters
++#
++CONFIG_SPI_SPIDEV=y
++# CONFIG_SPI_TLE62X0 is not set
++CONFIG_ARCH_REQUIRE_GPIOLIB=y
++CONFIG_GPIOLIB=y
++# CONFIG_GPIO_SYSFS is not set
++
++#
++# Memory mapped GPIO expanders:
++#
++
++#
++# I2C GPIO expanders:
++#
++# CONFIG_GPIO_MAX732X is not set
++# CONFIG_GPIO_PCA953X is not set
++# CONFIG_GPIO_PCF857X is not set
++
++#
++# PCI GPIO expanders:
++#
++
++#
++# SPI GPIO expanders:
++#
++# CONFIG_GPIO_MAX7301 is not set
++# CONFIG_GPIO_MCP23S08 is not set
++# CONFIG_W1 is not set
++# CONFIG_POWER_SUPPLY is not set
++# CONFIG_HWMON is not set
++# CONFIG_THERMAL is not set
++# CONFIG_THERMAL_HWMON is not set
++# CONFIG_WATCHDOG is not set
++CONFIG_SSB_POSSIBLE=y
++
++#
++# Sonics Silicon Backplane
++#
++# CONFIG_SSB is not set
++
++#
++# Multifunction device drivers
++#
++# CONFIG_MFD_CORE is not set
++# CONFIG_MFD_SM501 is not set
++# CONFIG_MFD_ASIC3 is not set
++# CONFIG_HTC_EGPIO is not set
++# CONFIG_HTC_PASIC3 is not set
++# CONFIG_TPS65010 is not set
++# CONFIG_TWL4030_CORE is not set
++# CONFIG_MFD_TMIO is not set
++# CONFIG_MFD_T7L66XB is not set
++# CONFIG_MFD_TC6387XB is not set
++# CONFIG_MFD_TC6393XB is not set
++# CONFIG_PMIC_DA903X is not set
++# CONFIG_MFD_WM8400 is not set
++# CONFIG_MFD_WM8350_I2C is not set
++# CONFIG_MFD_PCF50633 is not set
++
++#
++# Multimedia devices
++#
++
++#
++# Multimedia core support
++#
++# CONFIG_VIDEO_DEV is not set
++# CONFIG_DVB_CORE is not set
++# CONFIG_VIDEO_MEDIA is not set
++
++#
++# Multimedia drivers
++#
++# 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
++
++#
++# Console display driver support
++#
++# CONFIG_VGA_CONSOLE is not set
++CONFIG_DUMMY_CONSOLE=y
++CONFIG_SOUND=y
++CONFIG_SOUND_OSS_CORE=y
++CONFIG_SND=y
++CONFIG_SND_TIMER=y
++CONFIG_SND_PCM=y
++CONFIG_SND_HWDEP=m
++CONFIG_SND_RAWMIDI=m
++CONFIG_SND_JACK=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 is not set
++# CONFIG_SND_VERBOSE_PROCFS is not set
++# CONFIG_SND_VERBOSE_PRINTK is not set
++# CONFIG_SND_DEBUG is not set
++# CONFIG_SND_DRIVERS is not set
++# CONFIG_SND_ARM is not set
++
++#
++# Atmel devices (AVR32 and AT91)
++#
++# CONFIG_SND_ATMEL_AC97C is not set
++# CONFIG_SND_SPI is not set
++CONFIG_SND_USB=y
++CONFIG_SND_USB_AUDIO=m
++# CONFIG_SND_USB_CAIAQ is not set
++CONFIG_SND_SOC=y
++CONFIG_SND_ATMEL_SOC=y
++CONFIG_SND_ATMEL_SOC_SSC=y
++CONFIG_SND_AT91_SOC_SAM9G20_WM8731=y
++CONFIG_SND_SOC_I2C_AND_SPI=y
++# CONFIG_SND_SOC_ALL_CODECS is not set
++CONFIG_SND_SOC_WM8731=y
++# 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
++# CONFIG_HID_PID is not set
++
++#
++# Special HID drivers
++#
++CONFIG_USB_SUPPORT=y
++CONFIG_USB_ARCH_HAS_HCD=y
++CONFIG_USB_ARCH_HAS_OHCI=y
++# CONFIG_USB_ARCH_HAS_EHCI is not set
++CONFIG_USB=y
++# CONFIG_USB_DEBUG is not set
++# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
++
++#
++# Miscellaneous USB options
++#
++CONFIG_USB_DEVICEFS=y
++# CONFIG_USB_DEVICE_CLASS is not set
++# CONFIG_USB_DYNAMIC_MINORS is not set
++# CONFIG_USB_SUSPEND is not set
++# CONFIG_USB_OTG is not set
++# CONFIG_USB_MON is not set
++# CONFIG_USB_WUSB is not set
++# CONFIG_USB_WUSB_CBAF is not set
++
++#
++# USB Host Controller Drivers
++#
++# CONFIG_USB_C67X00_HCD is not set
++# CONFIG_USB_OXU210HP_HCD is not set
++# CONFIG_USB_ISP116X_HCD is not set
++# CONFIG_USB_ISP1760_HCD is not set
++CONFIG_USB_OHCI_HCD=y
++# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
++# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
++CONFIG_USB_OHCI_LITTLE_ENDIAN=y
++# CONFIG_USB_SL811_HCD is not set
++# CONFIG_USB_R8A66597_HCD is not set
++# CONFIG_USB_HWA_HCD is not set
++# CONFIG_USB_MUSB_HDRC is not set
++# CONFIG_USB_GADGET_MUSB_HDRC is not set
++
++#
++# USB Device Class drivers
++#
++# CONFIG_USB_ACM is not set
++# CONFIG_USB_PRINTER is not set
++# CONFIG_USB_WDM is not set
++# CONFIG_USB_TMC is not set
++
++#
++# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
++#
++
++#
++# also be needed; see USB_STORAGE Help for more info
++#
++CONFIG_USB_STORAGE=y
++# CONFIG_USB_STORAGE_DEBUG is not set
++# CONFIG_USB_STORAGE_DATAFAB is not set
++# CONFIG_USB_STORAGE_FREECOM is not set
++# CONFIG_USB_STORAGE_ISD200 is not set
++# CONFIG_USB_STORAGE_USBAT is not set
++# CONFIG_USB_STORAGE_SDDR09 is not set
++# CONFIG_USB_STORAGE_SDDR55 is not set
++# CONFIG_USB_STORAGE_JUMPSHOT is not set
++# CONFIG_USB_STORAGE_ALAUDA is not set
++# CONFIG_USB_STORAGE_ONETOUCH is not set
++# CONFIG_USB_STORAGE_KARMA is not set
++# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
++# CONFIG_USB_LIBUSUAL is not set
++
++#
++# USB Imaging devices
++#
++# CONFIG_USB_MDC800 is not set
++# CONFIG_USB_MICROTEK is not set
++
++#
++# USB port drivers
++#
++# CONFIG_USB_SERIAL is not set
++
++#
++# USB Miscellaneous drivers
++#
++# CONFIG_USB_EMI62 is not set
++# CONFIG_USB_EMI26 is not set
++# CONFIG_USB_ADUTUX is not set
++# CONFIG_USB_SEVSEG is not set
++# CONFIG_USB_RIO500 is not set
++# CONFIG_USB_LEGOTOWER is not set
++# CONFIG_USB_LCD is not set
++# CONFIG_USB_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_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
++# CONFIG_USB_ISIGHTFW is not set
++# CONFIG_USB_VST is not set
++CONFIG_USB_GADGET=y
++# CONFIG_USB_GADGET_DEBUG_FILES is not set
++CONFIG_USB_GADGET_VBUS_DRAW=2
++CONFIG_USB_GADGET_SELECTED=y
++CONFIG_USB_GADGET_AT91=y
++CONFIG_USB_AT91=y
++# CONFIG_USB_GADGET_ATMEL_USBA is not set
++# CONFIG_USB_GADGET_FSL_USB2 is not set
++# CONFIG_USB_GADGET_LH7A40X is not set
++# CONFIG_USB_GADGET_OMAP is not set
++# CONFIG_USB_GADGET_PXA25X is not set
++# CONFIG_USB_GADGET_PXA27X is not set
++# CONFIG_USB_GADGET_S3C2410 is not set
++# CONFIG_USB_GADGET_IMX is not set
++# CONFIG_USB_GADGET_M66592 is not set
++# CONFIG_USB_GADGET_AMD5536UDC is not set
++# CONFIG_USB_GADGET_FSL_QE is not set
++# CONFIG_USB_GADGET_CI13XXX is not set
++# CONFIG_USB_GADGET_NET2280 is not set
++# CONFIG_USB_GADGET_GOKU 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 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_USB_G_PRINTER is not set
++CONFIG_USB_CDC_COMPOSITE=m
++
++#
++# OTG and related infrastructure
++#
++# CONFIG_USB_GPIO_VBUS is not set
++# CONFIG_NOP_USB_XCEIV is not set
++CONFIG_MMC=y
++# CONFIG_MMC_DEBUG is not set
++# CONFIG_MMC_UNSAFE_RESUME is not set
++
++#
++# MMC/SD/SDIO Card Drivers
++#
++CONFIG_MMC_BLOCK=y
++CONFIG_MMC_BLOCK_BOUNCE=y
++CONFIG_SDIO_UART=m
++# CONFIG_MMC_TEST is not set
++
++#
++# MMC/SD/SDIO Host Controller Drivers
++#
++# CONFIG_MMC_SDHCI is not set
++CONFIG_MMC_AT91=y
++# CONFIG_MMC_ATMELMCI is not set
++# CONFIG_MMC_SPI is not set
++# CONFIG_MEMSTICK is not set
++# CONFIG_ACCESSIBILITY is not set
++CONFIG_NEW_LEDS=y
++CONFIG_LEDS_CLASS=y
++
++#
++# LED drivers
++#
++# CONFIG_LEDS_PCA9532 is not set
++CONFIG_LEDS_GPIO=y
++CONFIG_LEDS_GPIO_PLATFORM=y
++# CONFIG_LEDS_LP5521 is not set
++# CONFIG_LEDS_PCA955X is not set
++# CONFIG_LEDS_DAC124S085 is not set
++# CONFIG_LEDS_BD2802 is not set
++
++#
++# LED Triggers
++#
++CONFIG_LEDS_TRIGGERS=y
++CONFIG_LEDS_TRIGGER_TIMER=y
++CONFIG_LEDS_TRIGGER_HEARTBEAT=y
++# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
++CONFIG_LEDS_TRIGGER_GPIO=y
++# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set
++
++#
++# iptables trigger is under Netfilter config (LED target)
++#
++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
++# CONFIG_RTC_DRV_S35390A is not set
++# CONFIG_RTC_DRV_FM3130 is not set
++# CONFIG_RTC_DRV_RX8581 is not set
++
++#
++# SPI RTC drivers
++#
++# CONFIG_RTC_DRV_M41T94 is not set
++# CONFIG_RTC_DRV_DS1305 is not set
++# CONFIG_RTC_DRV_DS1390 is not set
++# CONFIG_RTC_DRV_MAX6902 is not set
++# CONFIG_RTC_DRV_R9701 is not set
++# CONFIG_RTC_DRV_RS5C348 is not set
++# CONFIG_RTC_DRV_DS3234 is not set
++
++#
++# Platform RTC drivers
++#
++# CONFIG_RTC_DRV_CMOS is not set
++# CONFIG_RTC_DRV_DS1286 is not set
++# CONFIG_RTC_DRV_DS1511 is not set
++# CONFIG_RTC_DRV_DS1553 is not set
++# CONFIG_RTC_DRV_DS1742 is not set
++# CONFIG_RTC_DRV_STK17TA8 is not set
++# CONFIG_RTC_DRV_M48T86 is not set
++# CONFIG_RTC_DRV_M48T35 is not set
++# CONFIG_RTC_DRV_M48T59 is not set
++# CONFIG_RTC_DRV_BQ4802 is not set
++# CONFIG_RTC_DRV_V3020 is not set
++
++#
++# on-CPU RTC drivers
++#
++CONFIG_RTC_DRV_AT91SAM9=y
++CONFIG_RTC_DRV_AT91SAM9_RTT=0
++CONFIG_RTC_DRV_AT91SAM9_GPBR=0
++# CONFIG_DMADEVICES is not set
++# CONFIG_AUXDISPLAY is not set
++# CONFIG_REGULATOR is not set
++# CONFIG_UIO is not set
++# CONFIG_STAGING is not set
++
++#
++# File systems
++#
++CONFIG_EXT2_FS=y
++# CONFIG_EXT2_FS_XATTR is not set
++# CONFIG_EXT2_FS_XIP is not set
++# CONFIG_EXT3_FS is not set
++# CONFIG_EXT4_FS is not set
++# CONFIG_REISERFS_FS is not set
++# CONFIG_JFS_FS is not set
++# CONFIG_FS_POSIX_ACL is not set
++CONFIG_FILE_LOCKING=y
++# CONFIG_XFS_FS is not set
++# CONFIG_OCFS2_FS is not set
++# CONFIG_BTRFS_FS is not set
++CONFIG_DNOTIFY=y
++CONFIG_INOTIFY=y
++CONFIG_INOTIFY_USER=y
++# CONFIG_QUOTA is not set
++# CONFIG_AUTOFS_FS is not set
++# CONFIG_AUTOFS4_FS is not set
++# CONFIG_FUSE_FS is not set
++
++#
++# Caches
++#
++# CONFIG_FSCACHE is not set
++
++#
++# CD-ROM/DVD Filesystems
++#
++# CONFIG_ISO9660_FS is not set
++# CONFIG_UDF_FS is not set
++
++#
++# DOS/FAT/NT Filesystems
++#
++CONFIG_FAT_FS=y
++CONFIG_MSDOS_FS=y
++CONFIG_VFAT_FS=y
++CONFIG_FAT_DEFAULT_CODEPAGE=437
++CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
++# CONFIG_NTFS_FS is not set
++
++#
++# Pseudo filesystems
++#
++CONFIG_PROC_FS=y
++CONFIG_PROC_SYSCTL=y
++CONFIG_PROC_PAGE_MONITOR=y
++CONFIG_SYSFS=y
++CONFIG_TMPFS=y
++# CONFIG_TMPFS_POSIX_ACL is not set
++# CONFIG_HUGETLB_PAGE is not set
++# CONFIG_CONFIGFS_FS is not set
++CONFIG_MISC_FILESYSTEMS=y
++# CONFIG_ADFS_FS is not set
++# CONFIG_AFFS_FS is not set
++# CONFIG_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=m
++CONFIG_SQUASHFS=m
++CONFIG_SQUASHFS_EMBEDDED=y
++CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
++# CONFIG_VXFS_FS is not set
++# CONFIG_MINIX_FS is not set
++# CONFIG_OMFS_FS is not set
++# CONFIG_HPFS_FS is not set
++# CONFIG_QNX4FS_FS is not set
++# CONFIG_ROMFS_FS is not set
++# CONFIG_SYSV_FS is not set
++# CONFIG_UFS_FS is not set
++# CONFIG_NILFS2_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_NFSD is not set
++CONFIG_LOCKD=y
++CONFIG_LOCKD_V4=y
++CONFIG_NFS_COMMON=y
++CONFIG_SUNRPC=y
++# CONFIG_RPCSEC_GSS_KRB5 is not set
++# CONFIG_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
++
++#
++# Kernel hacking
++#
++# CONFIG_PRINTK_TIME is not set
++CONFIG_ENABLE_WARN_DEPRECATED=y
++CONFIG_ENABLE_MUST_CHECK=y
++CONFIG_FRAME_WARN=1024
++# 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_DEBUG_MEMORY_INIT=y
++# CONFIG_RCU_CPU_STALL_DETECTOR is not set
++# CONFIG_LATENCYTOP is not set
++# CONFIG_SYSCTL_SYSCALL_CHECK is not set
++CONFIG_HAVE_FUNCTION_TRACER=y
++CONFIG_TRACING_SUPPORT=y
++
++#
++# Tracers
++#
++# CONFIG_FUNCTION_TRACER is not set
++# CONFIG_IRQSOFF_TRACER is not set
++# CONFIG_SCHED_TRACER is not set
++# CONFIG_CONTEXT_SWITCH_TRACER is not set
++# CONFIG_EVENT_TRACER is not set
++# CONFIG_BOOT_TRACER is not set
++# CONFIG_TRACE_BRANCH_PROFILING is not set
++# CONFIG_STACK_TRACER is not set
++# CONFIG_KMEMTRACE is not set
++# CONFIG_WORKQUEUE_TRACER is not set
++# CONFIG_BLK_DEV_IO_TRACE is not set
++# CONFIG_SAMPLES is not set
++CONFIG_HAVE_ARCH_KGDB=y
++CONFIG_ARM_UNWIND=y
++CONFIG_DEBUG_USER=y
++
++#
++# Security options
++#
++# CONFIG_KEYS is not set
++# CONFIG_SECURITY is not set
++# CONFIG_SECURITYFS is not set
++# CONFIG_SECURITY_FILE_CAPABILITIES is not set
++CONFIG_CRYPTO=y
++
++#
++# Crypto core or helper
++#
++# CONFIG_CRYPTO_FIPS is not set
++CONFIG_CRYPTO_ALGAPI=y
++CONFIG_CRYPTO_ALGAPI2=y
++CONFIG_CRYPTO_AEAD2=y
++CONFIG_CRYPTO_BLKCIPHER=y
++CONFIG_CRYPTO_BLKCIPHER2=y
++CONFIG_CRYPTO_HASH2=y
++CONFIG_CRYPTO_RNG2=y
++CONFIG_CRYPTO_PCOMP=y
++CONFIG_CRYPTO_MANAGER=y
++CONFIG_CRYPTO_MANAGER2=y
++# CONFIG_CRYPTO_GF128MUL is not set
++# CONFIG_CRYPTO_NULL is not set
++CONFIG_CRYPTO_WORKQUEUE=y
++# CONFIG_CRYPTO_CRYPTD is not set
++# CONFIG_CRYPTO_AUTHENC is not set
++# CONFIG_CRYPTO_TEST is not set
++
++#
++# Authenticated Encryption with Associated Data
++#
++# CONFIG_CRYPTO_CCM is not set
++# CONFIG_CRYPTO_GCM is not set
++# CONFIG_CRYPTO_SEQIV is not set
++
++#
++# Block modes
++#
++# CONFIG_CRYPTO_CBC is not set
++# CONFIG_CRYPTO_CTR is not set
++# CONFIG_CRYPTO_CTS is not set
++CONFIG_CRYPTO_ECB=y
++# CONFIG_CRYPTO_LRW is not set
++# CONFIG_CRYPTO_PCBC is not set
++# CONFIG_CRYPTO_XTS is not set
++
++#
++# Hash modes
++#
++# CONFIG_CRYPTO_HMAC is not set
++# CONFIG_CRYPTO_XCBC is not set
++
++#
++# Digest
++#
++# CONFIG_CRYPTO_CRC32C is not set
++# CONFIG_CRYPTO_MD4 is not set
++# CONFIG_CRYPTO_MD5 is not set
++# CONFIG_CRYPTO_MICHAEL_MIC is not set
++# CONFIG_CRYPTO_RMD128 is not set
++# CONFIG_CRYPTO_RMD160 is not set
++# CONFIG_CRYPTO_RMD256 is not set
++# CONFIG_CRYPTO_RMD320 is not set
++# CONFIG_CRYPTO_SHA1 is not set
++# CONFIG_CRYPTO_SHA256 is not set
++# CONFIG_CRYPTO_SHA512 is not set
++# CONFIG_CRYPTO_TGR192 is not set
++# CONFIG_CRYPTO_WP512 is not set
++
++#
++# Ciphers
++#
++CONFIG_CRYPTO_AES=y
++# CONFIG_CRYPTO_ANUBIS is not set
++CONFIG_CRYPTO_ARC4=y
++# CONFIG_CRYPTO_BLOWFISH is not set
++# CONFIG_CRYPTO_CAMELLIA is not set
++# CONFIG_CRYPTO_CAST5 is not set
++# CONFIG_CRYPTO_CAST6 is not set
++# CONFIG_CRYPTO_DES is not set
++# CONFIG_CRYPTO_FCRYPT is not set
++# CONFIG_CRYPTO_KHAZAD is not set
++# CONFIG_CRYPTO_SALSA20 is not set
++# CONFIG_CRYPTO_SEED is not set
++# CONFIG_CRYPTO_SERPENT is not set
++# CONFIG_CRYPTO_TEA is not set
++# CONFIG_CRYPTO_TWOFISH is not set
++
++#
++# Compression
++#
++# CONFIG_CRYPTO_DEFLATE is not set
++# CONFIG_CRYPTO_ZLIB is not set
++# CONFIG_CRYPTO_LZO is not set
++
++#
++# Random Number Generation
++#
++# CONFIG_CRYPTO_ANSI_CPRNG is not set
++# CONFIG_CRYPTO_HW is not set
++# CONFIG_BINARY_PRINTF is not set
++
++#
++# Library routines
++#
++CONFIG_BITREVERSE=y
++CONFIG_GENERIC_FIND_LAST_BIT=y
++# CONFIG_CRC_CCITT is not set
++# CONFIG_CRC16 is not set
++# CONFIG_CRC_T10DIF is not set
++CONFIG_CRC_ITU_T=m
++CONFIG_CRC32=y
++# CONFIG_CRC7 is not set
++# CONFIG_LIBCRC32C is not set
++CONFIG_ZLIB_INFLATE=y
++CONFIG_ZLIB_DEFLATE=y
++CONFIG_DECOMPRESS_GZIP=y
++CONFIG_DECOMPRESS_BZIP2=y
++CONFIG_DECOMPRESS_LZMA=y
++CONFIG_HAS_IOMEM=y
++CONFIG_HAS_IOPORT=y
++CONFIG_HAS_DMA=y
++CONFIG_NLATTR=y
+Index: linux-2.6.30/arch/arm/configs/at91sam9g20ek_defconfig
+===================================================================
+--- linux-2.6.30.orig/arch/arm/configs/at91sam9g20ek_defconfig 2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/arch/arm/configs/at91sam9g20ek_defconfig      2011-02-01 16:40:30.197007464 +0100
+@@ -1,7 +1,7 @@
+ #
+ # Automatically generated make config: don't edit
+-# Linux kernel version: 2.6.24
+-# Tue Jun 10 15:51:52 2008
++# Linux kernel version: 2.6.30
++# Mon Oct 12 18:24:05 2009
+ #
+ CONFIG_ARM=y
+ CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+@@ -12,6 +12,7 @@
+ # CONFIG_NO_IOPORT is not set
+ CONFIG_GENERIC_HARDIRQS=y
+ CONFIG_STACKTRACE_SUPPORT=y
++CONFIG_HAVE_LATENCYTOP_SUPPORT=y
+ CONFIG_LOCKDEP_SUPPORT=y
+ CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+ CONFIG_HARDIRQS_SW_RESEND=y
+@@ -21,7 +22,7 @@
+ # CONFIG_ARCH_HAS_ILOG2_U64 is not set
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
+-CONFIG_ZONE_DMA=y
++CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
+ CONFIG_VECTORS_BASE=0xffff0000
+ CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+@@ -39,54 +40,82 @@
+ # 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
++
++#
++# RCU Subsystem
++#
++CONFIG_CLASSIC_RCU=y
++# CONFIG_TREE_RCU is not set
++# CONFIG_PREEMPT_RCU is not set
++# CONFIG_TREE_RCU_TRACE is not set
++# CONFIG_PREEMPT_RCU_TRACE is not set
+ # CONFIG_IKCONFIG is not set
+ CONFIG_LOG_BUF_SHIFT=14
++# CONFIG_GROUP_SCHED is not set
+ # CONFIG_CGROUPS is not set
+-# CONFIG_FAIR_GROUP_SCHED is not set
+ CONFIG_SYSFS_DEPRECATED=y
++CONFIG_SYSFS_DEPRECATED_V2=y
+ # CONFIG_RELAY is not set
++CONFIG_NAMESPACES=y
++# CONFIG_UTS_NS is not set
++# CONFIG_IPC_NS is not set
++# CONFIG_USER_NS is not set
++# CONFIG_PID_NS is not set
++# CONFIG_NET_NS is not set
+ CONFIG_BLK_DEV_INITRD=y
+ CONFIG_INITRAMFS_SOURCE=""
++CONFIG_RD_GZIP=y
++CONFIG_RD_BZIP2=y
++CONFIG_RD_LZMA=y
+ CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+ CONFIG_SYSCTL=y
++CONFIG_ANON_INODES=y
+ # CONFIG_EMBEDDED is not set
+ CONFIG_UID16=y
+ CONFIG_SYSCTL_SYSCALL=y
+ CONFIG_KALLSYMS=y
+ # CONFIG_KALLSYMS_EXTRA_PASS is not set
++CONFIG_STRIP_ASM_SYMS=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=y
+ CONFIG_SIGNALFD=y
++CONFIG_TIMERFD=y
+ CONFIG_EVENTFD=y
+ CONFIG_SHMEM=y
++CONFIG_AIO=y
+ CONFIG_VM_EVENT_COUNTERS=y
++CONFIG_COMPAT_BRK=y
+ CONFIG_SLAB=y
+ # CONFIG_SLUB is not set
+ # CONFIG_SLOB is not set
++# CONFIG_PROFILING is not set
++# CONFIG_MARKERS is not set
++CONFIG_HAVE_OPROFILE=y
++# CONFIG_KPROBES is not set
++CONFIG_HAVE_KPROBES=y
++CONFIG_HAVE_KRETPROBES=y
++CONFIG_HAVE_CLK=y
++# CONFIG_SLOW_WORK is not set
++CONFIG_HAVE_GENERIC_DMA_COHERENT=y
+ CONFIG_SLABINFO=y
+ CONFIG_RT_MUTEXES=y
+-# CONFIG_TINY_SHMEM is not set
+ CONFIG_BASE_SMALL=0
+ CONFIG_MODULES=y
++# CONFIG_MODULE_FORCE_LOAD is not set
+ CONFIG_MODULE_UNLOAD=y
+ # CONFIG_MODULE_FORCE_UNLOAD is not set
+ # CONFIG_MODVERSIONS 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
++# CONFIG_BLK_DEV_INTEGRITY is not set
+ #
+ # IO Schedulers
+@@ -100,6 +129,7 @@
+ # CONFIG_DEFAULT_CFQ is not set
+ # CONFIG_DEFAULT_NOOP is not set
+ CONFIG_DEFAULT_IOSCHED="anticipatory"
++CONFIG_FREEZER=y
+ #
+ # System Type
+@@ -109,11 +139,10 @@
+ # 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_GEMINI is not set
+ # CONFIG_ARCH_FOOTBRIDGE is not set
+ # CONFIG_ARCH_NETX is not set
+ # CONFIG_ARCH_H720X is not set
+@@ -125,26 +154,26 @@
+ # CONFIG_ARCH_IXP2000 is not set
+ # CONFIG_ARCH_IXP4XX is not set
+ # CONFIG_ARCH_L7200 is not set
++# CONFIG_ARCH_KIRKWOOD is not set
+ # CONFIG_ARCH_KS8695 is not set
+ # CONFIG_ARCH_NS9XXX is not set
++# CONFIG_ARCH_LOKI is not set
++# CONFIG_ARCH_MV78XX0 is not set
+ # CONFIG_ARCH_MXC is not set
++# CONFIG_ARCH_ORION5X is not set
+ # CONFIG_ARCH_PNX4008 is not set
+ # CONFIG_ARCH_PXA is not set
++# CONFIG_ARCH_MMP is not set
+ # CONFIG_ARCH_RPC is not set
+ # CONFIG_ARCH_SA1100 is not set
+ # CONFIG_ARCH_S3C2410 is not set
++# CONFIG_ARCH_S3C64XX is not set
+ # CONFIG_ARCH_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
+-#
++# CONFIG_ARCH_MSM is not set
++# CONFIG_ARCH_W90X900 is not set
+ #
+ # Atmel AT91 System-on-Chip
+@@ -152,10 +181,13 @@
+ # CONFIG_ARCH_AT91RM9200 is not set
+ # CONFIG_ARCH_AT91SAM9260 is not set
+ # CONFIG_ARCH_AT91SAM9261 is not set
++# CONFIG_ARCH_AT91SAM9G10 is not set
+ # CONFIG_ARCH_AT91SAM9263 is not set
+ # CONFIG_ARCH_AT91SAM9RL is not set
+ CONFIG_ARCH_AT91SAM9G20=y
++# CONFIG_ARCH_AT91SAM9G45 is not set
+ # CONFIG_ARCH_AT91CAP9 is not set
++# CONFIG_ARCH_AT572D940HF is not set
+ # CONFIG_ARCH_AT91X40 is not set
+ CONFIG_AT91_PMC_UNIT=y
+@@ -163,6 +195,10 @@
+ # AT91SAM9G20 Board Type
+ #
+ CONFIG_MACH_AT91SAM9G20EK=y
++# CONFIG_MACH_AT91SAM9G20EK_2MMC is not set
++# CONFIG_MACH_USB_A9G20 is not set
++# CONFIG_MACH_QIL_A9G20 is not set
++# CONFIG_MACH_SBC35_A9G20 is not set
+ #
+ # AT91 Board Options
+@@ -191,6 +227,7 @@
+ CONFIG_CPU_ARM926T=y
+ CONFIG_CPU_32v5=y
+ CONFIG_CPU_ABRT_EV5TJ=y
++CONFIG_CPU_PABRT_NOIFAR=y
+ CONFIG_CPU_CACHE_VIVT=y
+ CONFIG_CPU_COPY_V4WB=y
+ CONFIG_CPU_TLB_V4WBI=y
+@@ -200,7 +237,7 @@
+ #
+ # Processor Features
+ #
+-# CONFIG_ARM_THUMB is not set
++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
+@@ -217,28 +254,35 @@
+ #
+ # 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_VMSPLIT_3G=y
++# CONFIG_VMSPLIT_2G is not set
++# CONFIG_VMSPLIT_1G is not set
++CONFIG_PAGE_OFFSET=0xC0000000
+ # CONFIG_PREEMPT is not set
+ CONFIG_HZ=100
+ CONFIG_AEABI=y
+ CONFIG_OABI_COMPAT=y
+-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
++# CONFIG_ARCH_HAS_HOLES_MEMORYMODEL is not set
++# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
++# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
++# CONFIG_HIGHMEM is not set
+ CONFIG_SELECT_MEMORY_MODEL=y
+ CONFIG_FLATMEM_MANUAL=y
+ # CONFIG_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_PAGEFLAGS_EXTENDED=y
+ CONFIG_SPLIT_PTLOCK_CPUS=4096
+-# CONFIG_RESOURCES_64BIT is not set
+-CONFIG_ZONE_DMA_FLAG=1
+-CONFIG_BOUNCE=y
++# CONFIG_PHYS_ADDR_T_64BIT is not set
++CONFIG_ZONE_DMA_FLAG=0
+ CONFIG_VIRT_TO_BUS=y
++CONFIG_UNEVICTABLE_LRU=y
++CONFIG_HAVE_MLOCK=y
++CONFIG_HAVE_MLOCKED_PAGE_BIT=y
+ CONFIG_LEDS=y
+ CONFIG_LEDS_CPU=y
+ CONFIG_ALIGNMENT_TRAP=y
+@@ -253,6 +297,11 @@
+ # CONFIG_KEXEC is not set
+ #
++# CPU Power Management
++#
++# CONFIG_CPU_IDLE is not set
++
++#
+ # Floating point emulation
+ #
+@@ -268,6 +317,8 @@
+ # Userspace binary formats
+ #
+ CONFIG_BINFMT_ELF=y
++# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
++CONFIG_HAVE_AOUT=y
+ # CONFIG_BINFMT_AOUT is not set
+ # CONFIG_BINFMT_MISC is not set
+@@ -275,16 +326,12 @@
+ # 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_SUSPEND_FREEZER=y
+ # CONFIG_APM_EMULATION is not set
+-
+-#
+-# Networking
+-#
++CONFIG_ARCH_SUSPEND_POSSIBLE=y
+ CONFIG_NET=y
+ #
+@@ -295,15 +342,13 @@
+ CONFIG_UNIX=y
+ # CONFIG_NET_KEY is not set
+ CONFIG_INET=y
+-# CONFIG_IP_MULTICAST is not set
++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=y
+-# CONFIG_IP_PNP_RARP is not set
++# 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 is not set
+ # CONFIG_INET_AH is not set
+@@ -315,15 +360,12 @@
+ # 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_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
+@@ -331,6 +373,7 @@
+ # CONFIG_TIPC is not set
+ # CONFIG_ATM is not set
+ # CONFIG_BRIDGE is not set
++# CONFIG_NET_DSA is not set
+ # CONFIG_VLAN_8021Q is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_LLC2 is not set
+@@ -340,24 +383,40 @@
+ # CONFIG_LAPB is not set
+ # CONFIG_ECONET is not set
+ # CONFIG_WAN_ROUTER is not set
++# CONFIG_PHONET is not set
+ # CONFIG_NET_SCHED is not set
++# CONFIG_DCB is not set
+ #
+ # Network testing
+ #
+ # CONFIG_NET_PKTGEN is not set
+ # CONFIG_HAMRADIO is not set
++# CONFIG_CAN is not set
+ # CONFIG_IRDA is not set
+ # CONFIG_BT is not set
+ # CONFIG_AF_RXRPC is not set
+-
+-#
+-# Wireless
+-#
+-# CONFIG_CFG80211 is not set
+-# CONFIG_WIRELESS_EXT is not set
+-# CONFIG_MAC80211 is not set
+-# CONFIG_IEEE80211 is not set
++CONFIG_WIRELESS=y
++CONFIG_CFG80211=y
++# CONFIG_CFG80211_REG_DEBUG is not set
++# CONFIG_WIRELESS_OLD_REGULATORY is not set
++CONFIG_WIRELESS_EXT=y
++CONFIG_WIRELESS_EXT_SYSFS=y
++CONFIG_LIB80211=y
++# CONFIG_LIB80211_DEBUG is not set
++CONFIG_MAC80211=y
++
++#
++# Rate control algorithm selection
++#
++CONFIG_MAC80211_RC_MINSTREL=y
++# CONFIG_MAC80211_RC_DEFAULT_PID is not set
++CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
++CONFIG_MAC80211_RC_DEFAULT="minstrel"
++# CONFIG_MAC80211_MESH is not set
++# CONFIG_MAC80211_LEDS is not set
++# CONFIG_MAC80211_DEBUG_MENU is not set
++# CONFIG_WIMAX is not set
+ # CONFIG_RFKILL is not set
+ # CONFIG_NET_9P is not set
+@@ -371,16 +430,20 @@
+ CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+ CONFIG_STANDALONE=y
+ CONFIG_PREVENT_FIRMWARE_BUILD=y
+-# CONFIG_FW_LOADER is not set
++CONFIG_FW_LOADER=y
++CONFIG_FIRMWARE_IN_KERNEL=y
++CONFIG_EXTRA_FIRMWARE=""
+ # CONFIG_SYS_HYPERVISOR is not set
+ # CONFIG_CONNECTOR is not set
+ CONFIG_MTD=y
+ # CONFIG_MTD_DEBUG is not set
+-CONFIG_MTD_CONCAT=y
++# CONFIG_MTD_CONCAT is not set
+ CONFIG_MTD_PARTITIONS=y
++# CONFIG_MTD_TESTS is not set
+ # CONFIG_MTD_REDBOOT_PARTS is not set
+ CONFIG_MTD_CMDLINE_PARTS=y
+ # CONFIG_MTD_AFS_PARTS is not set
++# CONFIG_MTD_AR7_PARTS is not set
+ #
+ # User Modules And Translation Layers
+@@ -424,6 +487,8 @@
+ # Self-contained MTD device drivers
+ #
+ CONFIG_MTD_DATAFLASH=y
++# CONFIG_MTD_DATAFLASH_WRITE_VERIFY is not set
++# CONFIG_MTD_DATAFLASH_OTP is not set
+ # CONFIG_MTD_M25P80 is not set
+ # CONFIG_MTD_SLRAM is not set
+ # CONFIG_MTD_PHRAM is not set
+@@ -440,6 +505,7 @@
+ # 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_GPIO is not set
+ CONFIG_MTD_NAND_IDS=y
+ # CONFIG_MTD_NAND_DISKONCHIP is not set
+ CONFIG_MTD_NAND_ATMEL=y
+@@ -452,6 +518,11 @@
+ # CONFIG_MTD_ONENAND is not set
+ #
++# LPDDR flash memory drivers
++#
++# CONFIG_MTD_LPDDR is not set
++
++#
+ # UBI - Unsorted block images
+ #
+ # CONFIG_MTD_UBI is not set
+@@ -463,15 +534,30 @@
+ # 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_COUNT=4
+ CONFIG_BLK_DEV_RAM_SIZE=8192
+-CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
++# CONFIG_BLK_DEV_XIP is not set
+ # CONFIG_CDROM_PKTCDVD is not set
+ # CONFIG_ATA_OVER_ETH is not set
+ CONFIG_MISC_DEVICES=y
+-CONFIG_ATMEL_PWM=y
+-# CONFIG_EEPROM_93CX6 is not set
++CONFIG_ATMEL_TCLIB=y
++CONFIG_ATMEL_TCB_CLKSRC=y
++CONFIG_ATMEL_TCB_CLKSRC_BLOCK=0
++# CONFIG_ICS932S401 is not set
+ CONFIG_ATMEL_SSC=y
++# CONFIG_ENCLOSURE_SERVICES is not set
++# CONFIG_ISL29003 is not set
++# CONFIG_C2PORT is not set
++
++#
++# EEPROM support
++#
++# CONFIG_EEPROM_AT24 is not set
++# CONFIG_EEPROM_AT25 is not set
++# CONFIG_EEPROM_LEGACY is not set
++CONFIG_EEPROM_93CX6=m
++CONFIG_HAVE_IDE=y
++# CONFIG_IDE is not set
+ #
+ # SCSI device support
+@@ -511,10 +597,12 @@
+ # CONFIG_SCSI_SAS_LIBSAS is not set
+ # CONFIG_SCSI_SRP_ATTRS is not set
+ # CONFIG_SCSI_LOWLEVEL is not set
++# CONFIG_SCSI_DH is not set
++# CONFIG_SCSI_OSD_INITIATOR is not set
+ # CONFIG_ATA is not set
+ # CONFIG_MD is not set
+ CONFIG_NETDEVICES=y
+-# CONFIG_NETDEVICES_MULTIQUEUE is not set
++CONFIG_COMPAT_NET_DEV_OPS=y
+ # CONFIG_DUMMY is not set
+ # CONFIG_BONDING is not set
+ # CONFIG_MACVLAN is not set
+@@ -527,7 +615,7 @@
+ # MII PHY device drivers
+ #
+ # CONFIG_MARVELL_PHY is not set
+-# CONFIG_DAVICOM_PHY is not set
++CONFIG_DAVICOM_PHY=y
+ # CONFIG_QSEMI_PHY is not set
+ # CONFIG_LXT_PHY is not set
+ # CONFIG_CICADA_PHY is not set
+@@ -535,6 +623,10 @@
+ # CONFIG_SMSC_PHY is not set
+ # CONFIG_BROADCOM_PHY is not set
+ # CONFIG_ICPLUS_PHY is not set
++# CONFIG_REALTEK_PHY is not set
++# CONFIG_NATIONAL_PHY is not set
++# CONFIG_STE10XP is not set
++# CONFIG_LSI_ET1011C_PHY is not set
+ # CONFIG_FIXED_PHY is not set
+ # CONFIG_MDIO_BITBANG is not set
+ CONFIG_NET_ETHERNET=y
+@@ -543,10 +635,18 @@
+ # CONFIG_AX88796 is not set
+ # CONFIG_SMC91X is not set
+ # CONFIG_DM9000 is not set
++# CONFIG_ENC28J60 is not set
++# CONFIG_ETHOC is not set
++# CONFIG_SMC911X is not set
++# CONFIG_SMSC911X is not set
++# CONFIG_DNET is not set
+ # CONFIG_IBM_NEW_EMAC_ZMII is not set
+ # CONFIG_IBM_NEW_EMAC_RGMII is not set
+ # CONFIG_IBM_NEW_EMAC_TAH is not set
+ # CONFIG_IBM_NEW_EMAC_EMAC4 is not set
++# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
++# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
++# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
+ # CONFIG_B44 is not set
+ # CONFIG_NETDEV_1000 is not set
+ # CONFIG_NETDEV_10000 is not set
+@@ -555,7 +655,39 @@
+ # Wireless LAN
+ #
+ # CONFIG_WLAN_PRE80211 is not set
+-# CONFIG_WLAN_80211 is not set
++CONFIG_WLAN_80211=y
++CONFIG_LIBERTAS=m
++CONFIG_LIBERTAS_USB=m
++CONFIG_LIBERTAS_SDIO=m
++CONFIG_LIBERTAS_SPI=m
++# CONFIG_LIBERTAS_DEBUG is not set
++# CONFIG_LIBERTAS_THINFIRM is not set
++# CONFIG_AT76C50X_USB is not set
++CONFIG_USB_ZD1201=m
++# CONFIG_USB_NET_RNDIS_WLAN is not set
++CONFIG_RTL8187=m
++# CONFIG_MAC80211_HWSIM is not set
++# CONFIG_P54_COMMON is not set
++CONFIG_AR9170_USB=m
++# CONFIG_HOSTAP is not set
++# CONFIG_B43 is not set
++# CONFIG_B43LEGACY is not set
++CONFIG_ZD1211RW=m
++# CONFIG_ZD1211RW_DEBUG is not set
++CONFIG_RT2X00=m
++CONFIG_RT2500USB=m
++CONFIG_RT73USB=m
++CONFIG_RT2X00_LIB_USB=m
++CONFIG_RT2X00_LIB=m
++CONFIG_RT2X00_LIB_FIRMWARE=y
++CONFIG_RT2X00_LIB_CRYPTO=y
++CONFIG_RT2X00_LIB_RFKILL=y
++CONFIG_RT2X00_LIB_LEDS=y
++# CONFIG_RT2X00_DEBUG is not set
++
++#
++# Enable WiMAX (Networking options) to see the WiMAX drivers
++#
+ #
+ # USB Network Adapters
+@@ -568,7 +700,6 @@
+ # 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
+@@ -579,15 +710,15 @@
+ #
+ CONFIG_INPUT=y
+ # CONFIG_INPUT_FF_MEMLESS is not set
+-# CONFIG_INPUT_POLLDEV is not set
++CONFIG_INPUT_POLLDEV=m
+ #
+ # Userland interfaces
+ #
+ CONFIG_INPUT_MOUSEDEV=y
+ # CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+-CONFIG_INPUT_MOUSEDEV_SCREEN_X=320
+-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=240
++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
+@@ -612,18 +743,18 @@
+ #
+ # Hardware I/O ports
+ #
+-CONFIG_SERIO=y
+-CONFIG_SERIO_SERPORT=y
+-# CONFIG_SERIO_RAW is not set
++# CONFIG_SERIO is not set
+ # CONFIG_GAMEPORT is not set
+ #
+ # Character devices
+ #
+ CONFIG_VT=y
++CONFIG_CONSOLE_TRANSLATIONS=y
+ CONFIG_VT_CONSOLE=y
+ CONFIG_HW_CONSOLE=y
+ # CONFIG_VT_HW_CONSOLE_BINDING is not set
++CONFIG_DEVKMEM=y
+ # CONFIG_SERIAL_NONSTANDARD is not set
+ #
+@@ -636,23 +767,64 @@
+ #
+ CONFIG_SERIAL_ATMEL=y
+ CONFIG_SERIAL_ATMEL_CONSOLE=y
++CONFIG_SERIAL_ATMEL_PDC=y
+ # CONFIG_SERIAL_ATMEL_TTYAT is not set
++# CONFIG_SERIAL_MAX3100 is not set
+ CONFIG_SERIAL_CORE=y
+ CONFIG_SERIAL_CORE_CONSOLE=y
+ CONFIG_UNIX98_PTYS=y
++# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
+ CONFIG_LEGACY_PTYS=y
+-CONFIG_LEGACY_PTY_COUNT=16
++CONFIG_LEGACY_PTY_COUNT=4
+ # CONFIG_IPMI_HANDLER is not set
+ CONFIG_HW_RANDOM=y
+-# CONFIG_NVRAM is not set
++# CONFIG_HW_RANDOM_TIMERIOMEM is not set
+ # CONFIG_R3964 is not set
+ # CONFIG_RAW_DRIVER is not set
+ # CONFIG_TCG_TPM is not set
+-# CONFIG_I2C is not set
++CONFIG_I2C=y
++CONFIG_I2C_BOARDINFO=y
++CONFIG_I2C_CHARDEV=m
++CONFIG_I2C_HELPER_AUTO=y
++CONFIG_I2C_ALGOBIT=y
+ #
+-# SPI support
++# I2C Hardware Bus support
+ #
++
++#
++# I2C system bus drivers (mostly embedded / system-on-chip)
++#
++CONFIG_I2C_GPIO=y
++# CONFIG_I2C_OCORES is not set
++# CONFIG_I2C_SIMTEC is not set
++
++#
++# External I2C/SMBus adapter drivers
++#
++# CONFIG_I2C_PARPORT_LIGHT is not set
++# CONFIG_I2C_TAOS_EVM is not set
++# CONFIG_I2C_TINY_USB is not set
++
++#
++# Other I2C/SMBus bus drivers
++#
++# CONFIG_I2C_PCA_PLATFORM is not set
++# CONFIG_I2C_STUB is not set
++
++#
++# Miscellaneous I2C Chip support
++#
++# CONFIG_DS1682 is not set
++# CONFIG_SENSORS_PCF8574 is not set
++# CONFIG_PCF8575 is not set
++# CONFIG_SENSORS_PCA9539 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
+ CONFIG_SPI=y
+ CONFIG_SPI_MASTER=y
+@@ -661,34 +833,83 @@
+ #
+ CONFIG_SPI_ATMEL=y
+ # CONFIG_SPI_BITBANG is not set
++# CONFIG_SPI_GPIO is not set
+ #
+ # SPI Protocol Masters
+ #
+-# CONFIG_EEPROM_AT25 is not set
+ CONFIG_SPI_SPIDEV=y
+ # CONFIG_SPI_TLE62X0 is not set
++CONFIG_ARCH_REQUIRE_GPIOLIB=y
++CONFIG_GPIOLIB=y
++# CONFIG_GPIO_SYSFS is not set
++
++#
++# Memory mapped GPIO expanders:
++#
++
++#
++# I2C GPIO expanders:
++#
++# CONFIG_GPIO_MAX732X is not set
++# CONFIG_GPIO_PCA953X is not set
++# CONFIG_GPIO_PCF857X is not set
++
++#
++# PCI GPIO expanders:
++#
++
++#
++# SPI GPIO expanders:
++#
++# CONFIG_GPIO_MAX7301 is not set
++# CONFIG_GPIO_MCP23S08 is not set
+ # CONFIG_W1 is not set
+ # CONFIG_POWER_SUPPLY is not set
+ # CONFIG_HWMON is not set
++# CONFIG_THERMAL is not set
++# CONFIG_THERMAL_HWMON is not set
+ # CONFIG_WATCHDOG is not set
++CONFIG_SSB_POSSIBLE=y
+ #
+ # Sonics Silicon Backplane
+ #
+-CONFIG_SSB_POSSIBLE=y
+ # CONFIG_SSB is not set
+ #
+ # Multifunction device drivers
+ #
++# CONFIG_MFD_CORE is not set
+ # CONFIG_MFD_SM501 is not set
++# CONFIG_MFD_ASIC3 is not set
++# CONFIG_HTC_EGPIO is not set
++# CONFIG_HTC_PASIC3 is not set
++# CONFIG_TPS65010 is not set
++# CONFIG_TWL4030_CORE is not set
++# CONFIG_MFD_TMIO is not set
++# CONFIG_MFD_T7L66XB is not set
++# CONFIG_MFD_TC6387XB is not set
++# CONFIG_MFD_TC6393XB is not set
++# CONFIG_PMIC_DA903X is not set
++# CONFIG_MFD_WM8400 is not set
++# CONFIG_MFD_WM8350_I2C is not set
++# CONFIG_MFD_PCF50633 is not set
+ #
+ # Multimedia devices
+ #
++
++#
++# Multimedia core support
++#
+ # CONFIG_VIDEO_DEV is not set
+ # CONFIG_DVB_CORE is not set
++# CONFIG_VIDEO_MEDIA is not set
++
++#
++# Multimedia drivers
++#
+ # CONFIG_DAB is not set
+ #
+@@ -709,18 +930,14 @@
+ #
+ # CONFIG_VGA_CONSOLE is not set
+ CONFIG_DUMMY_CONSOLE=y
+-
+-#
+-# Sound
+-#
+ CONFIG_SOUND=y
+-
+-#
+-# Advanced Linux Sound Architecture
+-#
++CONFIG_SOUND_OSS_CORE=y
+ CONFIG_SND=y
+ CONFIG_SND_TIMER=y
+ CONFIG_SND_PCM=y
++CONFIG_SND_HWDEP=m
++CONFIG_SND_RAWMIDI=m
++CONFIG_SND_JACK=y
+ CONFIG_SND_SEQUENCER=y
+ # CONFIG_SND_SEQ_DUMMY is not set
+ CONFIG_SND_OSSEMUL=y
+@@ -729,49 +946,28 @@
+ 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_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
++# CONFIG_SND_DRIVERS is not set
++# CONFIG_SND_ARM 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_AT91_AC97 is not set
+-
+-#
+-# SPI devices
+-#
+-CONFIG_SND_AT73C213=y
+-CONFIG_SND_AT73C213_TARGET_BITRATE=48000
+-
++# Atmel devices (AVR32 and AT91)
+ #
+-# USB devices
+-#
+-# CONFIG_SND_USB_AUDIO is not set
++# CONFIG_SND_ATMEL_AC97C is not set
++# CONFIG_SND_SPI is not set
++CONFIG_SND_USB=y
++CONFIG_SND_USB_AUDIO=m
+ # 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_SND_SOC=y
++CONFIG_SND_ATMEL_SOC=y
++CONFIG_SND_ATMEL_SOC_SSC=y
++CONFIG_SND_AT91_SOC_SAM9G20_WM8731=y
++CONFIG_SND_SOC_I2C_AND_SPI=y
++# CONFIG_SND_SOC_ALL_CODECS is not set
++CONFIG_SND_SOC_WM8731=y
+ # CONFIG_SOUND_PRIME is not set
+ CONFIG_HID_SUPPORT=y
+ CONFIG_HID=y
+@@ -781,16 +977,19 @@
+ #
+ # 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_HID is not set
++# CONFIG_HID_PID is not set
++
++#
++# Special HID drivers
++#
+ CONFIG_USB_SUPPORT=y
+ CONFIG_USB_ARCH_HAS_HCD=y
+ CONFIG_USB_ARCH_HAS_OHCI=y
+ # CONFIG_USB_ARCH_HAS_EHCI is not set
+ CONFIG_USB=y
+ # CONFIG_USB_DEBUG is not set
++# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
+ #
+ # Miscellaneous USB options
+@@ -799,45 +998,56 @@
+ # 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
++# CONFIG_USB_MON is not set
++# CONFIG_USB_WUSB is not set
++# CONFIG_USB_WUSB_CBAF is not set
+ #
+ # USB Host Controller Drivers
+ #
++# CONFIG_USB_C67X00_HCD is not set
++# CONFIG_USB_OXU210HP_HCD is not set
+ # CONFIG_USB_ISP116X_HCD is not set
++# CONFIG_USB_ISP1760_HCD is not set
+ CONFIG_USB_OHCI_HCD=y
+ # CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+ # CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+ CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+ # CONFIG_USB_SL811_HCD is not set
+ # CONFIG_USB_R8A66597_HCD is not set
++# CONFIG_USB_HWA_HCD is not set
++# CONFIG_USB_MUSB_HDRC is not set
++# CONFIG_USB_GADGET_MUSB_HDRC is not set
+ #
+ # USB Device Class drivers
+ #
+ # CONFIG_USB_ACM is not set
+ # CONFIG_USB_PRINTER is not set
++# CONFIG_USB_WDM is not set
++# CONFIG_USB_TMC is not set
+ #
+-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
++# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
+ #
+ #
+-# may also be needed; see USB_STORAGE Help for more information
++# also be needed; see USB_STORAGE Help for more info
+ #
+ CONFIG_USB_STORAGE=y
+ # CONFIG_USB_STORAGE_DEBUG is not set
+ # CONFIG_USB_STORAGE_DATAFAB is not set
+ # CONFIG_USB_STORAGE_FREECOM is not set
+ # CONFIG_USB_STORAGE_ISD200 is not set
+-# CONFIG_USB_STORAGE_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_STORAGE_CYPRESS_ATACB is not set
+ # CONFIG_USB_LIBUSUAL is not set
+ #
+@@ -845,15 +1055,10 @@
+ #
+ # 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
+ #
+@@ -862,7 +1067,7 @@
+ # 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_SEVSEG is not set
+ # CONFIG_USB_RIO500 is not set
+ # CONFIG_USB_LEGOTOWER is not set
+ # CONFIG_USB_LCD is not set
+@@ -870,7 +1075,6 @@
+ # 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
+@@ -878,62 +1082,80 @@
+ # 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_ISIGHTFW is not set
++# CONFIG_USB_VST is not set
+ CONFIG_USB_GADGET=y
+ # CONFIG_USB_GADGET_DEBUG_FILES is not set
++CONFIG_USB_GADGET_VBUS_DRAW=2
+ CONFIG_USB_GADGET_SELECTED=y
+-# CONFIG_USB_GADGET_AMD5536UDC is not set
++CONFIG_USB_GADGET_AT91=y
++CONFIG_USB_AT91=y
+ # 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_PXA25X is not set
++# CONFIG_USB_GADGET_PXA27X is not set
+ # CONFIG_USB_GADGET_S3C2410 is not set
+-CONFIG_USB_GADGET_AT91=y
+-CONFIG_USB_AT91=y
++# CONFIG_USB_GADGET_IMX is not set
++# CONFIG_USB_GADGET_M66592 is not set
++# CONFIG_USB_GADGET_AMD5536UDC is not set
++# CONFIG_USB_GADGET_FSL_QE is not set
++# CONFIG_USB_GADGET_CI13XXX is not set
++# CONFIG_USB_GADGET_NET2280 is not set
++# CONFIG_USB_GADGET_GOKU 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 is not set
+-CONFIG_USB_GADGETFS=m
++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=m
+ # CONFIG_USB_MIDI_GADGET is not set
++# CONFIG_USB_G_PRINTER is not set
++CONFIG_USB_CDC_COMPOSITE=m
++
++#
++# OTG and related infrastructure
++#
++# CONFIG_USB_GPIO_VBUS is not set
++# CONFIG_NOP_USB_XCEIV is not set
+ CONFIG_MMC=y
+ # CONFIG_MMC_DEBUG is not set
+ # CONFIG_MMC_UNSAFE_RESUME is not set
+ #
+-# MMC/SD Card Drivers
++# MMC/SD/SDIO Card Drivers
+ #
+ CONFIG_MMC_BLOCK=y
+ CONFIG_MMC_BLOCK_BOUNCE=y
+-# CONFIG_SDIO_UART is not set
++CONFIG_SDIO_UART=m
++# CONFIG_MMC_TEST is not set
+ #
+-# MMC/SD Host Controller Drivers
++# MMC/SD/SDIO Host Controller Drivers
+ #
++# CONFIG_MMC_SDHCI is not set
+ CONFIG_MMC_AT91=y
++# CONFIG_MMC_ATMELMCI is not set
+ # CONFIG_MMC_SPI is not set
++# CONFIG_MEMSTICK is not set
++# CONFIG_ACCESSIBILITY is not set
+ CONFIG_NEW_LEDS=y
+ CONFIG_LEDS_CLASS=y
+ #
+ # LED drivers
+ #
+-CONFIG_LEDS_ATMEL_PWM=y
++# CONFIG_LEDS_PCA9532 is not set
+ CONFIG_LEDS_GPIO=y
++CONFIG_LEDS_GPIO_PLATFORM=y
++# CONFIG_LEDS_LP5521 is not set
++# CONFIG_LEDS_PCA955X is not set
++# CONFIG_LEDS_DAC124S085 is not set
++# CONFIG_LEDS_BD2802 is not set
+ #
+ # LED Triggers
+@@ -941,6 +1163,13 @@
+ CONFIG_LEDS_TRIGGERS=y
+ CONFIG_LEDS_TRIGGER_TIMER=y
+ CONFIG_LEDS_TRIGGER_HEARTBEAT=y
++# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
++CONFIG_LEDS_TRIGGER_GPIO=y
++# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set
++
++#
++# iptables trigger is under Netfilter config (LED target)
++#
+ CONFIG_RTC_LIB=y
+ CONFIG_RTC_CLASS=y
+ CONFIG_RTC_HCTOSYS=y
+@@ -957,20 +1186,46 @@
+ # 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
++# CONFIG_RTC_DRV_S35390A is not set
++# CONFIG_RTC_DRV_FM3130 is not set
++# CONFIG_RTC_DRV_RX8581 is not set
++
++#
+ # SPI RTC drivers
+ #
+-# CONFIG_RTC_DRV_RS5C348 is not set
++# CONFIG_RTC_DRV_M41T94 is not set
++# CONFIG_RTC_DRV_DS1305 is not set
++# CONFIG_RTC_DRV_DS1390 is not set
+ # CONFIG_RTC_DRV_MAX6902 is not set
++# CONFIG_RTC_DRV_R9701 is not set
++# CONFIG_RTC_DRV_RS5C348 is not set
++# CONFIG_RTC_DRV_DS3234 is not set
+ #
+ # Platform RTC drivers
+ #
+ # CONFIG_RTC_DRV_CMOS is not set
++# CONFIG_RTC_DRV_DS1286 is not set
++# CONFIG_RTC_DRV_DS1511 is not set
+ # CONFIG_RTC_DRV_DS1553 is not set
+-# CONFIG_RTC_DRV_STK17TA8 is not set
+ # CONFIG_RTC_DRV_DS1742 is not set
++# CONFIG_RTC_DRV_STK17TA8 is not set
+ # CONFIG_RTC_DRV_M48T86 is not set
++# CONFIG_RTC_DRV_M48T35 is not set
+ # CONFIG_RTC_DRV_M48T59 is not set
++# CONFIG_RTC_DRV_BQ4802 is not set
+ # CONFIG_RTC_DRV_V3020 is not set
+ #
+@@ -979,6 +1234,11 @@
+ CONFIG_RTC_DRV_AT91SAM9=y
+ CONFIG_RTC_DRV_AT91SAM9_RTT=0
+ CONFIG_RTC_DRV_AT91SAM9_GPBR=0
++# CONFIG_DMADEVICES is not set
++# CONFIG_AUXDISPLAY is not set
++# CONFIG_REGULATOR is not set
++# CONFIG_UIO is not set
++# CONFIG_STAGING is not set
+ #
+ # File systems
+@@ -987,24 +1247,28 @@
+ # 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_EXT4_FS is not set
+ # CONFIG_REISERFS_FS is not set
+ # CONFIG_JFS_FS is not set
+ # CONFIG_FS_POSIX_ACL is not set
++CONFIG_FILE_LOCKING=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_BTRFS_FS is not set
++CONFIG_DNOTIFY=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 is not set
+ # CONFIG_FUSE_FS is not set
+ #
++# Caches
++#
++# CONFIG_FSCACHE is not set
++
++#
+ # CD-ROM/DVD Filesystems
+ #
+ # CONFIG_ISO9660_FS is not set
+@@ -1025,15 +1289,13 @@
+ #
+ CONFIG_PROC_FS=y
+ CONFIG_PROC_SYSCTL=y
++CONFIG_PROC_PAGE_MONITOR=y
+ CONFIG_SYSFS=y
+ CONFIG_TMPFS=y
+ # CONFIG_TMPFS_POSIX_ACL is not set
+ # CONFIG_HUGETLB_PAGE is not set
+ # CONFIG_CONFIGFS_FS is not set
+-
+-#
+-# Miscellaneous filesystems
+-#
++CONFIG_MISC_FILESYSTEMS=y
+ # CONFIG_ADFS_FS is not set
+ # CONFIG_AFFS_FS is not set
+ # CONFIG_HFS_FS is not set
+@@ -1052,25 +1314,29 @@
+ # CONFIG_JFFS2_LZO is not set
+ CONFIG_JFFS2_RTIME=y
+ # CONFIG_JFFS2_RUBIN is not set
+-CONFIG_CRAMFS=y
++CONFIG_CRAMFS=m
++CONFIG_SQUASHFS=m
++CONFIG_SQUASHFS_EMBEDDED=y
++CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
+ # CONFIG_VXFS_FS is not set
++# CONFIG_MINIX_FS is not set
++# CONFIG_OMFS_FS is not set
+ # CONFIG_HPFS_FS is not set
+ # CONFIG_QNX4FS_FS is not set
++# CONFIG_ROMFS_FS is not set
+ # CONFIG_SYSV_FS is not set
+ # CONFIG_UFS_FS is not set
++# CONFIG_NILFS2_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
+@@ -1120,49 +1386,173 @@
+ # 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=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=y
++# CONFIG_NLS_UTF8 is not set
+ # CONFIG_DLM is not set
+-# CONFIG_INSTRUMENTATION is not set
+ #
+ # Kernel hacking
+ #
+ # CONFIG_PRINTK_TIME is not set
+-# CONFIG_ENABLE_WARN_DEPRECATED is not set
++CONFIG_ENABLE_WARN_DEPRECATED=y
+ CONFIG_ENABLE_MUST_CHECK=y
++CONFIG_FRAME_WARN=1024
+ # 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_MEMORY_INIT=y
++# CONFIG_RCU_CPU_STALL_DETECTOR is not set
++# CONFIG_LATENCYTOP is not set
++# CONFIG_SYSCTL_SYSCALL_CHECK is not set
++CONFIG_HAVE_FUNCTION_TRACER=y
++CONFIG_TRACING_SUPPORT=y
++
++#
++# Tracers
++#
++# CONFIG_FUNCTION_TRACER is not set
++# CONFIG_IRQSOFF_TRACER is not set
++# CONFIG_SCHED_TRACER is not set
++# CONFIG_CONTEXT_SWITCH_TRACER is not set
++# CONFIG_EVENT_TRACER is not set
++# CONFIG_BOOT_TRACER is not set
++# CONFIG_TRACE_BRANCH_PROFILING is not set
++# CONFIG_STACK_TRACER is not set
++# CONFIG_KMEMTRACE is not set
++# CONFIG_WORKQUEUE_TRACER is not set
++# CONFIG_BLK_DEV_IO_TRACE is not set
+ # CONFIG_SAMPLES is not set
+-# CONFIG_DEBUG_USER is not set
++CONFIG_HAVE_ARCH_KGDB=y
++CONFIG_ARM_UNWIND=y
++CONFIG_DEBUG_USER=y
+ #
+ # Security options
+ #
+ # CONFIG_KEYS is not set
+ # CONFIG_SECURITY is not set
++# CONFIG_SECURITYFS is not set
+ # CONFIG_SECURITY_FILE_CAPABILITIES is not set
+-# CONFIG_CRYPTO is not set
++CONFIG_CRYPTO=y
++
++#
++# Crypto core or helper
++#
++# CONFIG_CRYPTO_FIPS is not set
++CONFIG_CRYPTO_ALGAPI=y
++CONFIG_CRYPTO_ALGAPI2=y
++CONFIG_CRYPTO_AEAD2=y
++CONFIG_CRYPTO_BLKCIPHER=y
++CONFIG_CRYPTO_BLKCIPHER2=y
++CONFIG_CRYPTO_HASH2=y
++CONFIG_CRYPTO_RNG2=y
++CONFIG_CRYPTO_PCOMP=y
++CONFIG_CRYPTO_MANAGER=y
++CONFIG_CRYPTO_MANAGER2=y
++# CONFIG_CRYPTO_GF128MUL is not set
++# CONFIG_CRYPTO_NULL is not set
++CONFIG_CRYPTO_WORKQUEUE=y
++# CONFIG_CRYPTO_CRYPTD is not set
++# CONFIG_CRYPTO_AUTHENC is not set
++# CONFIG_CRYPTO_TEST is not set
++
++#
++# Authenticated Encryption with Associated Data
++#
++# CONFIG_CRYPTO_CCM is not set
++# CONFIG_CRYPTO_GCM is not set
++# CONFIG_CRYPTO_SEQIV is not set
++
++#
++# Block modes
++#
++# CONFIG_CRYPTO_CBC is not set
++# CONFIG_CRYPTO_CTR is not set
++# CONFIG_CRYPTO_CTS is not set
++CONFIG_CRYPTO_ECB=y
++# CONFIG_CRYPTO_LRW is not set
++# CONFIG_CRYPTO_PCBC is not set
++# CONFIG_CRYPTO_XTS is not set
++
++#
++# Hash modes
++#
++# CONFIG_CRYPTO_HMAC is not set
++# CONFIG_CRYPTO_XCBC is not set
++
++#
++# Digest
++#
++# CONFIG_CRYPTO_CRC32C is not set
++# CONFIG_CRYPTO_MD4 is not set
++# CONFIG_CRYPTO_MD5 is not set
++# CONFIG_CRYPTO_MICHAEL_MIC is not set
++# CONFIG_CRYPTO_RMD128 is not set
++# CONFIG_CRYPTO_RMD160 is not set
++# CONFIG_CRYPTO_RMD256 is not set
++# CONFIG_CRYPTO_RMD320 is not set
++# CONFIG_CRYPTO_SHA1 is not set
++# CONFIG_CRYPTO_SHA256 is not set
++# CONFIG_CRYPTO_SHA512 is not set
++# CONFIG_CRYPTO_TGR192 is not set
++# CONFIG_CRYPTO_WP512 is not set
++
++#
++# Ciphers
++#
++CONFIG_CRYPTO_AES=y
++# CONFIG_CRYPTO_ANUBIS is not set
++CONFIG_CRYPTO_ARC4=y
++# CONFIG_CRYPTO_BLOWFISH is not set
++# CONFIG_CRYPTO_CAMELLIA is not set
++# CONFIG_CRYPTO_CAST5 is not set
++# CONFIG_CRYPTO_CAST6 is not set
++# CONFIG_CRYPTO_DES is not set
++# CONFIG_CRYPTO_FCRYPT is not set
++# CONFIG_CRYPTO_KHAZAD is not set
++# CONFIG_CRYPTO_SALSA20 is not set
++# CONFIG_CRYPTO_SEED is not set
++# CONFIG_CRYPTO_SERPENT is not set
++# CONFIG_CRYPTO_TEA is not set
++# CONFIG_CRYPTO_TWOFISH is not set
++
++#
++# Compression
++#
++# CONFIG_CRYPTO_DEFLATE is not set
++# CONFIG_CRYPTO_ZLIB is not set
++# CONFIG_CRYPTO_LZO is not set
++
++#
++# Random Number Generation
++#
++# CONFIG_CRYPTO_ANSI_CPRNG is not set
++# CONFIG_CRYPTO_HW is not set
++# CONFIG_BINARY_PRINTF is not set
+ #
+ # Library routines
+ #
+ CONFIG_BITREVERSE=y
++CONFIG_GENERIC_FIND_LAST_BIT=y
+ # CONFIG_CRC_CCITT is not set
+ # CONFIG_CRC16 is not set
+-# CONFIG_CRC_ITU_T is not set
++# CONFIG_CRC_T10DIF is not set
++CONFIG_CRC_ITU_T=m
+ 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_DECOMPRESS_GZIP=y
++CONFIG_DECOMPRESS_BZIP2=y
++CONFIG_DECOMPRESS_LZMA=y
+ CONFIG_HAS_IOMEM=y
+ CONFIG_HAS_IOPORT=y
++CONFIG_HAS_DMA=y
++CONFIG_NLATTR=y
+Index: linux-2.6.30/arch/arm/configs/at91sam9261ek_defconfig
+===================================================================
+--- linux-2.6.30.orig/arch/arm/configs/at91sam9261ek_defconfig 2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/arch/arm/configs/at91sam9261ek_defconfig      2011-02-01 16:40:30.197007464 +0100
+@@ -1,17 +1,18 @@
+ #
+ # Automatically generated make config: don't edit
+-# Linux kernel version: 2.6.24-rc7
+-# Tue Jan  8 22:21:49 2008
++# Linux kernel version: 2.6.30
++# Tue Oct 13 12:05:37 2009
+ #
+ 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_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_HAVE_LATENCYTOP_SUPPORT=y
+ CONFIG_LOCKDEP_SUPPORT=y
+ CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+ CONFIG_HARDIRQS_SW_RESEND=y
+@@ -21,7 +22,7 @@
+ # CONFIG_ARCH_HAS_ILOG2_U64 is not set
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
+-CONFIG_ZONE_DMA=y
++CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
+ CONFIG_VECTORS_BASE=0xffff0000
+ CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+@@ -39,57 +40,82 @@
+ # 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
++
++#
++# RCU Subsystem
++#
++CONFIG_CLASSIC_RCU=y
++# CONFIG_TREE_RCU is not set
++# CONFIG_PREEMPT_RCU is not set
++# CONFIG_TREE_RCU_TRACE is not set
++# CONFIG_PREEMPT_RCU_TRACE is not set
+ # CONFIG_IKCONFIG is not set
+ CONFIG_LOG_BUF_SHIFT=14
++# CONFIG_GROUP_SCHED is not set
+ # 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_SYSFS_DEPRECATED_V2=y
+ # CONFIG_RELAY is not set
++CONFIG_NAMESPACES=y
++# CONFIG_UTS_NS is not set
++# CONFIG_IPC_NS is not set
++# CONFIG_USER_NS is not set
++# CONFIG_PID_NS is not set
++# CONFIG_NET_NS is not set
+ CONFIG_BLK_DEV_INITRD=y
+ CONFIG_INITRAMFS_SOURCE=""
++CONFIG_RD_GZIP=y
++CONFIG_RD_BZIP2=y
++CONFIG_RD_LZMA=y
+ CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+ CONFIG_SYSCTL=y
++CONFIG_ANON_INODES=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_STRIP_ASM_SYMS=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=y
+ CONFIG_SIGNALFD=y
++CONFIG_TIMERFD=y
+ CONFIG_EVENTFD=y
+ CONFIG_SHMEM=y
++CONFIG_AIO=y
+ CONFIG_VM_EVENT_COUNTERS=y
++CONFIG_COMPAT_BRK=y
+ CONFIG_SLAB=y
+ # CONFIG_SLUB is not set
+ # CONFIG_SLOB is not set
++# CONFIG_PROFILING is not set
++# CONFIG_MARKERS is not set
++CONFIG_HAVE_OPROFILE=y
++# CONFIG_KPROBES is not set
++CONFIG_HAVE_KPROBES=y
++CONFIG_HAVE_KRETPROBES=y
++CONFIG_HAVE_CLK=y
++# CONFIG_SLOW_WORK is not set
++CONFIG_HAVE_GENERIC_DMA_COHERENT=y
+ CONFIG_SLABINFO=y
+ CONFIG_RT_MUTEXES=y
+-# CONFIG_TINY_SHMEM is not set
+ CONFIG_BASE_SMALL=0
+ CONFIG_MODULES=y
++# CONFIG_MODULE_FORCE_LOAD is not set
+ CONFIG_MODULE_UNLOAD=y
+ # CONFIG_MODULE_FORCE_UNLOAD is not set
+ # CONFIG_MODVERSIONS 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
++# CONFIG_BLK_DEV_INTEGRITY is not set
+ #
+ # IO Schedulers
+@@ -103,6 +129,7 @@
+ # CONFIG_DEFAULT_CFQ is not set
+ # CONFIG_DEFAULT_NOOP is not set
+ CONFIG_DEFAULT_IOSCHED="anticipatory"
++CONFIG_FREEZER=y
+ #
+ # System Type
+@@ -112,11 +139,10 @@
+ # 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_GEMINI is not set
+ # CONFIG_ARCH_FOOTBRIDGE is not set
+ # CONFIG_ARCH_NETX is not set
+ # CONFIG_ARCH_H720X is not set
+@@ -128,26 +154,26 @@
+ # CONFIG_ARCH_IXP2000 is not set
+ # CONFIG_ARCH_IXP4XX is not set
+ # CONFIG_ARCH_L7200 is not set
++# CONFIG_ARCH_KIRKWOOD is not set
+ # CONFIG_ARCH_KS8695 is not set
+ # CONFIG_ARCH_NS9XXX is not set
++# CONFIG_ARCH_LOKI is not set
++# CONFIG_ARCH_MV78XX0 is not set
+ # CONFIG_ARCH_MXC is not set
++# CONFIG_ARCH_ORION5X is not set
+ # CONFIG_ARCH_PNX4008 is not set
+ # CONFIG_ARCH_PXA is not set
++# CONFIG_ARCH_MMP is not set
+ # CONFIG_ARCH_RPC is not set
+ # CONFIG_ARCH_SA1100 is not set
+ # CONFIG_ARCH_S3C2410 is not set
++# CONFIG_ARCH_S3C64XX is not set
+ # CONFIG_ARCH_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
+-#
++# CONFIG_ARCH_MSM is not set
++# CONFIG_ARCH_W90X900 is not set
+ #
+ # Atmel AT91 System-on-Chip
+@@ -155,8 +181,13 @@
+ # CONFIG_ARCH_AT91RM9200 is not set
+ # CONFIG_ARCH_AT91SAM9260 is not set
+ CONFIG_ARCH_AT91SAM9261=y
++# CONFIG_ARCH_AT91SAM9G10 is not set
+ # CONFIG_ARCH_AT91SAM9263 is not set
+ # CONFIG_ARCH_AT91SAM9RL is not set
++# CONFIG_ARCH_AT91SAM9G20 is not set
++# CONFIG_ARCH_AT91SAM9G45 is not set
++# CONFIG_ARCH_AT91CAP9 is not set
++# CONFIG_ARCH_AT572D940HF is not set
+ # CONFIG_ARCH_AT91X40 is not set
+ CONFIG_AT91_PMC_UNIT=y
+@@ -175,8 +206,15 @@
+ # AT91 Feature Selections
+ #
+ CONFIG_AT91_PROGRAMMABLE_CLOCKS=y
+-# CONFIG_ATMEL_TCLIB is not set
++# CONFIG_AT91_SLOW_CLOCK is not set
+ CONFIG_AT91_TIMER_HZ=100
++CONFIG_AT91_EARLY_DBGU=y
++# CONFIG_AT91_EARLY_USART0 is not set
++# CONFIG_AT91_EARLY_USART1 is not set
++# CONFIG_AT91_EARLY_USART2 is not set
++# CONFIG_AT91_EARLY_USART3 is not set
++# CONFIG_AT91_EARLY_USART4 is not set
++# CONFIG_AT91_EARLY_USART5 is not set
+ #
+ # Processor Type
+@@ -185,6 +223,7 @@
+ CONFIG_CPU_ARM926T=y
+ CONFIG_CPU_32v5=y
+ CONFIG_CPU_ABRT_EV5TJ=y
++CONFIG_CPU_PABRT_NOIFAR=y
+ CONFIG_CPU_CACHE_VIVT=y
+ CONFIG_CPU_COPY_V4WB=y
+ CONFIG_CPU_TLB_V4WBI=y
+@@ -194,7 +233,7 @@
+ #
+ # Processor Features
+ #
+-# CONFIG_ARM_THUMB is not set
++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
+@@ -211,25 +250,37 @@
+ #
+ # 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_VMSPLIT_3G=y
++# CONFIG_VMSPLIT_2G is not set
++# CONFIG_VMSPLIT_1G is not set
++CONFIG_PAGE_OFFSET=0xC0000000
+ # CONFIG_PREEMPT is not set
+ CONFIG_HZ=100
+-# CONFIG_AEABI is not set
+-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
++CONFIG_AEABI=y
++CONFIG_OABI_COMPAT=y
++# CONFIG_ARCH_HAS_HOLES_MEMORYMODEL is not set
++# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
++# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
++# CONFIG_HIGHMEM is not set
+ CONFIG_SELECT_MEMORY_MODEL=y
+ CONFIG_FLATMEM_MANUAL=y
+ # CONFIG_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_PAGEFLAGS_EXTENDED=y
+ CONFIG_SPLIT_PTLOCK_CPUS=4096
+-# CONFIG_RESOURCES_64BIT is not set
+-CONFIG_ZONE_DMA_FLAG=1
+-CONFIG_BOUNCE=y
++# CONFIG_PHYS_ADDR_T_64BIT is not set
++CONFIG_ZONE_DMA_FLAG=0
+ CONFIG_VIRT_TO_BUS=y
+-# CONFIG_LEDS is not set
++CONFIG_UNEVICTABLE_LRU=y
++CONFIG_HAVE_MLOCK=y
++CONFIG_HAVE_MLOCKED_PAGE_BIT=y
++CONFIG_LEDS=y
++CONFIG_LEDS_CPU=y
+ CONFIG_ALIGNMENT_TRAP=y
+ #
+@@ -242,6 +293,11 @@
+ # CONFIG_KEXEC is not set
+ #
++# CPU Power Management
++#
++# CONFIG_CPU_IDLE is not set
++
++#
+ # Floating point emulation
+ #
+@@ -257,19 +313,21 @@
+ # Userspace binary formats
+ #
+ CONFIG_BINFMT_ELF=y
++# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
++CONFIG_HAVE_AOUT=y
+ # CONFIG_BINFMT_AOUT is not set
+ # CONFIG_BINFMT_MISC is not set
+-# CONFIG_ARTHUR is not set
+ #
+ # Power management options
+ #
+-# CONFIG_PM is not set
+-CONFIG_SUSPEND_UP_POSSIBLE=y
+-
+-#
+-# Networking
+-#
++CONFIG_PM=y
++# CONFIG_PM_DEBUG is not set
++CONFIG_PM_SLEEP=y
++CONFIG_SUSPEND=y
++CONFIG_SUSPEND_FREEZER=y
++# CONFIG_APM_EMULATION is not set
++CONFIG_ARCH_SUSPEND_POSSIBLE=y
+ CONFIG_NET=y
+ #
+@@ -278,21 +336,15 @@
+ 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_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=y
+-# CONFIG_IP_PNP_RARP is not set
++# 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 is not set
+ # CONFIG_INET_AH is not set
+@@ -300,19 +352,16 @@
+ # 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_LRO is not set
+-CONFIG_INET_DIAG=y
+-CONFIG_INET_TCP_DIAG=y
++# 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
+@@ -320,6 +369,7 @@
+ # CONFIG_TIPC is not set
+ # CONFIG_ATM is not set
+ # CONFIG_BRIDGE is not set
++# CONFIG_NET_DSA is not set
+ # CONFIG_VLAN_8021Q is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_LLC2 is not set
+@@ -329,24 +379,40 @@
+ # CONFIG_LAPB is not set
+ # CONFIG_ECONET is not set
+ # CONFIG_WAN_ROUTER is not set
++# CONFIG_PHONET is not set
+ # CONFIG_NET_SCHED is not set
++# CONFIG_DCB is not set
+ #
+ # Network testing
+ #
+ # CONFIG_NET_PKTGEN is not set
+ # CONFIG_HAMRADIO is not set
++# CONFIG_CAN is not set
+ # CONFIG_IRDA is not set
+ # CONFIG_BT is not set
+ # CONFIG_AF_RXRPC is not set
+-
+-#
+-# Wireless
+-#
+-# CONFIG_CFG80211 is not set
+-# CONFIG_WIRELESS_EXT is not set
+-# CONFIG_MAC80211 is not set
+-# CONFIG_IEEE80211 is not set
++CONFIG_WIRELESS=y
++CONFIG_CFG80211=y
++# CONFIG_CFG80211_REG_DEBUG is not set
++# CONFIG_WIRELESS_OLD_REGULATORY is not set
++CONFIG_WIRELESS_EXT=y
++CONFIG_WIRELESS_EXT_SYSFS=y
++CONFIG_LIB80211=y
++# CONFIG_LIB80211_DEBUG is not set
++CONFIG_MAC80211=y
++
++#
++# Rate control algorithm selection
++#
++CONFIG_MAC80211_RC_MINSTREL=y
++# CONFIG_MAC80211_RC_DEFAULT_PID is not set
++CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
++CONFIG_MAC80211_RC_DEFAULT="minstrel"
++# CONFIG_MAC80211_MESH is not set
++# CONFIG_MAC80211_LEDS is not set
++# CONFIG_MAC80211_DEBUG_MENU is not set
++# CONFIG_WIMAX is not set
+ # CONFIG_RFKILL is not set
+ # CONFIG_NET_9P is not set
+@@ -360,23 +426,25 @@
+ 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_FW_LOADER=y
++CONFIG_FIRMWARE_IN_KERNEL=y
++CONFIG_EXTRA_FIRMWARE=""
+ # CONFIG_SYS_HYPERVISOR is not set
+ # CONFIG_CONNECTOR is not set
+ CONFIG_MTD=y
+ # CONFIG_MTD_DEBUG is not set
+ # CONFIG_MTD_CONCAT is not set
+ CONFIG_MTD_PARTITIONS=y
++# CONFIG_MTD_TESTS is not set
+ # CONFIG_MTD_REDBOOT_PARTS is not set
+ CONFIG_MTD_CMDLINE_PARTS=y
+ # CONFIG_MTD_AFS_PARTS is not set
++# CONFIG_MTD_AR7_PARTS is not set
+ #
+ # User Modules And Translation Layers
+ #
+-# CONFIG_MTD_CHAR is not set
++CONFIG_MTD_CHAR=y
+ CONFIG_MTD_BLKDEVS=y
+ CONFIG_MTD_BLOCK=y
+ # CONFIG_FTL is not set
+@@ -414,7 +482,9 @@
+ #
+ # Self-contained MTD device drivers
+ #
+-# CONFIG_MTD_DATAFLASH is not set
++CONFIG_MTD_DATAFLASH=y
++# CONFIG_MTD_DATAFLASH_WRITE_VERIFY is not set
++# CONFIG_MTD_DATAFLASH_OTP is not set
+ # CONFIG_MTD_M25P80 is not set
+ # CONFIG_MTD_SLRAM is not set
+ # CONFIG_MTD_PHRAM is not set
+@@ -431,33 +501,55 @@
+ # 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_GPIO is not set
+ CONFIG_MTD_NAND_IDS=y
+ # CONFIG_MTD_NAND_DISKONCHIP is not set
+ CONFIG_MTD_NAND_ATMEL=y
++CONFIG_MTD_NAND_ATMEL_ECC_SOFT=y
++# CONFIG_MTD_NAND_ATMEL_ECC_HW is not set
++# CONFIG_MTD_NAND_ATMEL_ECC_NONE is not set
+ # CONFIG_MTD_NAND_NANDSIM is not set
+ # CONFIG_MTD_NAND_PLATFORM is not set
+ # CONFIG_MTD_ALAUDA is not set
+ # CONFIG_MTD_ONENAND is not set
+ #
++# LPDDR flash memory drivers
++#
++# CONFIG_MTD_LPDDR is not set
++
++#
+ # 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_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_COUNT=4
+ CONFIG_BLK_DEV_RAM_SIZE=8192
+-CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
++# CONFIG_BLK_DEV_XIP 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_ATMEL_TCLIB=y
++CONFIG_ATMEL_TCB_CLKSRC=y
++CONFIG_ATMEL_TCB_CLKSRC_BLOCK=0
+ CONFIG_ATMEL_SSC=y
++# CONFIG_ENCLOSURE_SERVICES is not set
++# CONFIG_C2PORT is not set
++
++#
++# EEPROM support
++#
++# CONFIG_EEPROM_AT25 is not set
++CONFIG_EEPROM_93CX6=m
++CONFIG_HAVE_IDE=y
++# CONFIG_IDE is not set
+ #
+ # SCSI device support
+@@ -496,29 +588,58 @@
+ # 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 is not set
++# CONFIG_SCSI_DH is not set
++# CONFIG_SCSI_OSD_INITIATOR is not set
+ # CONFIG_ATA is not set
+ # CONFIG_MD is not set
+ CONFIG_NETDEVICES=y
+-# CONFIG_NETDEVICES_MULTIQUEUE is not set
++CONFIG_COMPAT_NET_DEV_OPS=y
+ # CONFIG_DUMMY is not set
+ # CONFIG_BONDING is not set
+ # CONFIG_MACVLAN is not set
+ # CONFIG_EQUALIZER is not set
+ # CONFIG_TUN is not set
+ # CONFIG_VETH is not set
+-# CONFIG_PHYLIB 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_REALTEK_PHY is not set
++# CONFIG_NATIONAL_PHY is not set
++# CONFIG_STE10XP is not set
++# CONFIG_LSI_ET1011C_PHY is not set
++# CONFIG_FIXED_PHY is not set
++# CONFIG_MDIO_BITBANG is not set
+ CONFIG_NET_ETHERNET=y
+ CONFIG_MII=y
+ # CONFIG_AX88796 is not set
+ # CONFIG_SMC91X is not set
+ CONFIG_DM9000=y
++CONFIG_DM9000_DEBUGLEVEL=4
++# CONFIG_DM9000_FORCE_SIMPLE_PHY_POLL is not set
++# CONFIG_ENC28J60 is not set
++# CONFIG_ETHOC is not set
++# CONFIG_SMC911X is not set
++# CONFIG_SMSC911X is not set
++# CONFIG_DNET is not set
+ # CONFIG_IBM_NEW_EMAC_ZMII is not set
+ # CONFIG_IBM_NEW_EMAC_RGMII is not set
+ # CONFIG_IBM_NEW_EMAC_TAH is not set
+ # CONFIG_IBM_NEW_EMAC_EMAC4 is not set
++# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
++# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
++# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
+ # CONFIG_B44 is not set
+ # CONFIG_NETDEV_1000 is not set
+ # CONFIG_NETDEV_10000 is not set
+@@ -527,7 +648,39 @@
+ # Wireless LAN
+ #
+ # CONFIG_WLAN_PRE80211 is not set
+-# CONFIG_WLAN_80211 is not set
++CONFIG_WLAN_80211=y
++CONFIG_LIBERTAS=m
++CONFIG_LIBERTAS_USB=m
++CONFIG_LIBERTAS_SDIO=m
++CONFIG_LIBERTAS_SPI=m
++# CONFIG_LIBERTAS_DEBUG is not set
++# CONFIG_LIBERTAS_THINFIRM is not set
++# CONFIG_AT76C50X_USB is not set
++CONFIG_USB_ZD1201=m
++# CONFIG_USB_NET_RNDIS_WLAN is not set
++CONFIG_RTL8187=m
++# CONFIG_MAC80211_HWSIM is not set
++# CONFIG_P54_COMMON is not set
++CONFIG_AR9170_USB=m
++# CONFIG_HOSTAP is not set
++# CONFIG_B43 is not set
++# CONFIG_B43LEGACY is not set
++CONFIG_ZD1211RW=m
++# CONFIG_ZD1211RW_DEBUG is not set
++CONFIG_RT2X00=m
++CONFIG_RT2500USB=m
++CONFIG_RT73USB=m
++CONFIG_RT2X00_LIB_USB=m
++CONFIG_RT2X00_LIB=m
++CONFIG_RT2X00_LIB_FIRMWARE=y
++CONFIG_RT2X00_LIB_CRYPTO=y
++CONFIG_RT2X00_LIB_RFKILL=y
++CONFIG_RT2X00_LIB_LEDS=y
++# CONFIG_RT2X00_DEBUG is not set
++
++#
++# Enable WiMAX (Networking options) to see the WiMAX drivers
++#
+ #
+ # USB Network Adapters
+@@ -540,7 +693,6 @@
+ # 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
+@@ -551,17 +703,17 @@
+ #
+ CONFIG_INPUT=y
+ # CONFIG_INPUT_FF_MEMLESS is not set
+-# CONFIG_INPUT_POLLDEV is not set
++CONFIG_INPUT_POLLDEV=m
+ #
+ # 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_MOUSEDEV_SCREEN_X=240
++CONFIG_INPUT_MOUSEDEV_SCREEN_Y=320
+ # CONFIG_INPUT_JOYDEV is not set
+-# CONFIG_INPUT_EVDEV is not set
++CONFIG_INPUT_EVDEV=y
+ # CONFIG_INPUT_EVBUG is not set
+ #
+@@ -580,33 +732,38 @@
+ # CONFIG_INPUT_TABLET is not set
+ CONFIG_INPUT_TOUCHSCREEN=y
+ CONFIG_TOUCHSCREEN_ADS7846=y
++# CONFIG_TOUCHSCREEN_AD7877 is not set
++# CONFIG_TOUCHSCREEN_AD7879_SPI is not set
++# CONFIG_TOUCHSCREEN_AD7879 is not set
+ # CONFIG_TOUCHSCREEN_FUJITSU is not set
+ # CONFIG_TOUCHSCREEN_GUNZE is not set
+ # CONFIG_TOUCHSCREEN_ELO is not set
++# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
+ # CONFIG_TOUCHSCREEN_MTOUCH is not set
++# CONFIG_TOUCHSCREEN_INEXIO 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_TOUCHIT213 is not set
+ # CONFIG_INPUT_MISC is not set
+ #
+ # Hardware I/O ports
+ #
+-CONFIG_SERIO=y
+-CONFIG_SERIO_SERPORT=y
+-# CONFIG_SERIO_RAW is not set
++# CONFIG_SERIO is not set
+ # CONFIG_GAMEPORT is not set
+ #
+ # Character devices
+ #
+ CONFIG_VT=y
++CONFIG_CONSOLE_TRANSLATIONS=y
+ CONFIG_VT_CONSOLE=y
+ CONFIG_HW_CONSOLE=y
+ # CONFIG_VT_HW_CONSOLE_BINDING is not set
++CONFIG_DEVKMEM=y
+ # CONFIG_SERIAL_NONSTANDARD is not set
+ #
+@@ -619,112 +776,99 @@
+ #
+ CONFIG_SERIAL_ATMEL=y
+ CONFIG_SERIAL_ATMEL_CONSOLE=y
++CONFIG_SERIAL_ATMEL_PDC=y
+ # CONFIG_SERIAL_ATMEL_TTYAT is not set
++# CONFIG_SERIAL_MAX3100 is not set
+ CONFIG_SERIAL_CORE=y
+ CONFIG_SERIAL_CORE_CONSOLE=y
+ CONFIG_UNIX98_PTYS=y
++# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
+ CONFIG_LEGACY_PTYS=y
+-CONFIG_LEGACY_PTY_COUNT=256
++CONFIG_LEGACY_PTY_COUNT=4
+ # CONFIG_IPMI_HANDLER is not set
+ CONFIG_HW_RANDOM=y
+-# CONFIG_NVRAM is not set
++# CONFIG_HW_RANDOM_TIMERIOMEM is not set
+ # CONFIG_R3964 is not set
+ # CONFIG_RAW_DRIVER is not set
+ # CONFIG_TCG_TPM is not set
+-CONFIG_I2C=y
+-CONFIG_I2C_BOARDINFO=y
+-CONFIG_I2C_CHARDEV=y
++# CONFIG_I2C is not set
++CONFIG_SPI=y
++CONFIG_SPI_MASTER=y
+ #
+-# I2C Algorithms
++# SPI Master Controller Drivers
+ #
+-CONFIG_I2C_ALGOBIT=y
+-# CONFIG_I2C_ALGOPCF is not set
+-# CONFIG_I2C_ALGOPCA is not set
++CONFIG_SPI_ATMEL=y
++# CONFIG_SPI_BITBANG is not set
++# CONFIG_SPI_GPIO is not set
+ #
+-# I2C Hardware Bus support
++# SPI Protocol Masters
+ #
+-CONFIG_I2C_GPIO=y
+-# 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
+-# CONFIG_I2C_PCA is not set
++# CONFIG_SPI_SPIDEV is not set
++# CONFIG_SPI_TLE62X0 is not set
++CONFIG_ARCH_REQUIRE_GPIOLIB=y
++CONFIG_GPIOLIB=y
++# CONFIG_GPIO_SYSFS is not set
+ #
+-# Miscellaneous I2C Chip support
++# Memory mapped GPIO expanders:
+ #
+-# CONFIG_SENSORS_DS1337 is not set
+-# CONFIG_SENSORS_DS1374 is not set
+-# CONFIG_DS1682 is not set
+-# CONFIG_EEPROM_LEGACY 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
++# I2C GPIO expanders:
+ #
+-CONFIG_SPI=y
+-# CONFIG_SPI_DEBUG is not set
+-CONFIG_SPI_MASTER=y
+ #
+-# SPI Master Controller Drivers
++# PCI GPIO expanders:
+ #
+-CONFIG_SPI_ATMEL=y
+-# CONFIG_SPI_BITBANG is not set
+ #
+-# SPI Protocol Masters
++# SPI GPIO expanders:
+ #
+-# CONFIG_EEPROM_AT25 is not set
+-# CONFIG_SPI_SPIDEV is not set
+-# CONFIG_SPI_TLE62X0 is not set
++# CONFIG_GPIO_MAX7301 is not set
++# CONFIG_GPIO_MCP23S08 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_AT91SAM9X_WATCHDOG=y
+-
+-#
+-# USB-based Watchdog Cards
+-#
+-# CONFIG_USBPCWATCHDOG is not set
++# CONFIG_THERMAL is not set
++# CONFIG_THERMAL_HWMON is not set
++# CONFIG_WATCHDOG is not set
++CONFIG_SSB_POSSIBLE=y
+ #
+ # Sonics Silicon Backplane
+ #
+-CONFIG_SSB_POSSIBLE=y
+ # CONFIG_SSB is not set
+ #
+ # Multifunction device drivers
+ #
++# CONFIG_MFD_CORE is not set
+ # CONFIG_MFD_SM501 is not set
++# CONFIG_MFD_ASIC3 is not set
++# CONFIG_HTC_EGPIO is not set
++# CONFIG_HTC_PASIC3 is not set
++# CONFIG_MFD_TMIO is not set
++# CONFIG_MFD_T7L66XB is not set
++# CONFIG_MFD_TC6387XB is not set
++# CONFIG_MFD_TC6393XB is not set
+ #
+ # Multimedia devices
+ #
++
++#
++# Multimedia core support
++#
+ # CONFIG_VIDEO_DEV is not set
+ # CONFIG_DVB_CORE is not set
+-CONFIG_DAB=y
+-# CONFIG_USB_DABUSB is not set
++# CONFIG_VIDEO_MEDIA is not set
++
++#
++# Multimedia drivers
++#
++# CONFIG_DAB is not set
+ #
+ # Graphics support
+@@ -734,6 +878,7 @@
+ CONFIG_FB=y
+ # CONFIG_FIRMWARE_EDID is not set
+ # CONFIG_FB_DDC is not set
++# CONFIG_FB_BOOT_VESA_SUPPORT is not set
+ CONFIG_FB_CFB_FILLRECT=y
+ CONFIG_FB_CFB_COPYAREA=y
+ CONFIG_FB_CFB_IMAGEBLIT=y
+@@ -741,8 +886,8 @@
+ # CONFIG_FB_SYS_FILLRECT is not set
+ # CONFIG_FB_SYS_COPYAREA is not set
+ # CONFIG_FB_SYS_IMAGEBLIT is not set
++# CONFIG_FB_FOREIGN_ENDIAN is not set
+ # CONFIG_FB_SYS_FOPS is not set
+-CONFIG_FB_DEFERRED_IO=y
+ # CONFIG_FB_SVGALIB is not set
+ # CONFIG_FB_MACMODES is not set
+ # CONFIG_FB_BACKLIGHT is not set
+@@ -755,10 +900,17 @@
+ # CONFIG_FB_S1D15605 is not set
+ # CONFIG_FB_S1D13XXX is not set
+ CONFIG_FB_ATMEL=y
+-# CONFIG_FB_INTSRAM is not set
++CONFIG_FB_INTSRAM=y
+ # CONFIG_FB_ATMEL_STN is not set
+ # CONFIG_FB_VIRTUAL is not set
+-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
++# CONFIG_FB_METRONOME is not set
++# CONFIG_FB_MB862XX is not set
++# CONFIG_FB_BROADSHEET is not set
++CONFIG_BACKLIGHT_LCD_SUPPORT=y
++# CONFIG_LCD_CLASS_DEVICE is not set
++CONFIG_BACKLIGHT_CLASS_DEVICE=y
++CONFIG_BACKLIGHT_ATMEL_LCDC=y
++# CONFIG_BACKLIGHT_GENERIC is not set
+ #
+ # Display device support
+@@ -772,11 +924,40 @@
+ CONFIG_DUMMY_CONSOLE=y
+ # CONFIG_FRAMEBUFFER_CONSOLE is not set
+ # CONFIG_LOGO is not set
+-
+-#
+-# Sound
+-#
+-# CONFIG_SOUND is not set
++CONFIG_SOUND=y
++CONFIG_SOUND_OSS_CORE=y
++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_PCM_OSS_PLUGINS=y
++# CONFIG_SND_SEQUENCER_OSS is not set
++# 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
++# CONFIG_SND_DRIVERS is not set
++# CONFIG_SND_ARM is not set
++
++#
++# Atmel devices (AVR32 and AT91)
++#
++# CONFIG_SND_ATMEL_AC97C is not set
++CONFIG_SND_SPI=y
++CONFIG_SND_AT73C213=y
++CONFIG_SND_AT73C213_TARGET_BITRATE=48000
++CONFIG_SND_USB=y
++CONFIG_SND_USB_AUDIO=m
++# CONFIG_SND_USB_CAIAQ is not set
++# CONFIG_SND_SOC is not set
++# CONFIG_SOUND_PRIME is not set
+ CONFIG_HID_SUPPORT=y
+ CONFIG_HID=y
+ # CONFIG_HID_DEBUG is not set
+@@ -786,63 +967,76 @@
+ # USB Input Devices
+ #
+ # CONFIG_USB_HID is not set
++# CONFIG_HID_PID is not set
+ #
+-# USB HID Boot Protocol drivers
++# Special HID 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
++# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
+ #
+ # Miscellaneous USB options
+ #
+ CONFIG_USB_DEVICEFS=y
+-CONFIG_USB_DEVICE_CLASS=y
++# CONFIG_USB_DEVICE_CLASS is not set
+ # CONFIG_USB_DYNAMIC_MINORS is not set
++# CONFIG_USB_SUSPEND is not set
+ # CONFIG_USB_OTG is not set
++# CONFIG_USB_MON is not set
++# CONFIG_USB_WUSB is not set
++# CONFIG_USB_WUSB_CBAF is not set
+ #
+ # USB Host Controller Drivers
+ #
++# CONFIG_USB_C67X00_HCD is not set
++# CONFIG_USB_OXU210HP_HCD is not set
+ # CONFIG_USB_ISP116X_HCD is not set
++# CONFIG_USB_ISP1760_HCD is not set
+ CONFIG_USB_OHCI_HCD=y
+ # CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+ # CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+ CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+ # CONFIG_USB_SL811_HCD is not set
+ # CONFIG_USB_R8A66597_HCD is not set
++# CONFIG_USB_HWA_HCD is not set
++# CONFIG_USB_MUSB_HDRC is not set
++# CONFIG_USB_GADGET_MUSB_HDRC is not set
+ #
+ # USB Device Class drivers
+ #
+ # CONFIG_USB_ACM is not set
+ # CONFIG_USB_PRINTER is not set
++# CONFIG_USB_WDM is not set
++# CONFIG_USB_TMC is not set
+ #
+-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
++# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
+ #
+ #
+-# may also be needed; see USB_STORAGE Help for more information
++# also be needed; see USB_STORAGE Help for more info
+ #
+ 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_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_STORAGE_CYPRESS_ATACB is not set
+ # CONFIG_USB_LIBUSUAL is not set
+ #
+@@ -850,15 +1044,10 @@
+ #
+ # 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
+ #
+@@ -867,7 +1056,7 @@
+ # 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_SEVSEG is not set
+ # CONFIG_USB_RIO500 is not set
+ # CONFIG_USB_LEGOTOWER is not set
+ # CONFIG_USB_LCD is not set
+@@ -875,7 +1064,6 @@
+ # 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
+@@ -883,56 +1071,90 @@
+ # 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_ISIGHTFW is not set
++# CONFIG_USB_VST is not set
+ CONFIG_USB_GADGET=y
+-# CONFIG_USB_GADGET_DEBUG is not set
+ # CONFIG_USB_GADGET_DEBUG_FILES is not set
++CONFIG_USB_GADGET_VBUS_DRAW=2
+ CONFIG_USB_GADGET_SELECTED=y
+-# CONFIG_USB_GADGET_AMD5536UDC is not set
++CONFIG_USB_GADGET_AT91=y
++CONFIG_USB_AT91=y
+ # 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_PXA25X is not set
++# CONFIG_USB_GADGET_PXA27X is not set
+ # CONFIG_USB_GADGET_S3C2410 is not set
+-CONFIG_USB_GADGET_AT91=y
+-CONFIG_USB_AT91=y
++# CONFIG_USB_GADGET_IMX is not set
++# CONFIG_USB_GADGET_M66592 is not set
++# CONFIG_USB_GADGET_AMD5536UDC is not set
++# CONFIG_USB_GADGET_FSL_QE is not set
++# CONFIG_USB_GADGET_CI13XXX is not set
++# CONFIG_USB_GADGET_NET2280 is not set
++# CONFIG_USB_GADGET_GOKU 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 is not set
+-CONFIG_USB_GADGETFS=m
++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=m
+ # CONFIG_USB_MIDI_GADGET is not set
++# CONFIG_USB_G_PRINTER is not set
++CONFIG_USB_CDC_COMPOSITE=m
++
++#
++# OTG and related infrastructure
++#
++# CONFIG_USB_GPIO_VBUS is not set
++# CONFIG_NOP_USB_XCEIV is not set
+ CONFIG_MMC=y
+ # CONFIG_MMC_DEBUG is not set
+ # CONFIG_MMC_UNSAFE_RESUME is not set
+ #
+-# MMC/SD Card Drivers
++# MMC/SD/SDIO Card Drivers
+ #
+ CONFIG_MMC_BLOCK=y
+ CONFIG_MMC_BLOCK_BOUNCE=y
+-# CONFIG_SDIO_UART is not set
++CONFIG_SDIO_UART=m
++# CONFIG_MMC_TEST is not set
+ #
+-# MMC/SD Host Controller Drivers
++# MMC/SD/SDIO Host Controller Drivers
+ #
+-CONFIG_MMC_AT91=y
++# CONFIG_MMC_SDHCI is not set
++CONFIG_MMC_AT91=m
++# CONFIG_MMC_ATMELMCI is not set
+ # CONFIG_MMC_SPI is not set
+-# CONFIG_NEW_LEDS is not set
++# CONFIG_MEMSTICK is not set
++# CONFIG_ACCESSIBILITY is not set
++CONFIG_NEW_LEDS=y
++CONFIG_LEDS_CLASS=y
++
++#
++# LED drivers
++#
++CONFIG_LEDS_GPIO=y
++CONFIG_LEDS_GPIO_PLATFORM=y
++# CONFIG_LEDS_DAC124S085 is not set
++
++#
++# LED Triggers
++#
++CONFIG_LEDS_TRIGGERS=y
++CONFIG_LEDS_TRIGGER_TIMER=y
++CONFIG_LEDS_TRIGGER_HEARTBEAT=y
++# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
++CONFIG_LEDS_TRIGGER_GPIO=y
++# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set
++
++#
++# iptables trigger is under Netfilter config (LED target)
++#
+ CONFIG_RTC_LIB=y
+ CONFIG_RTC_CLASS=y
+ CONFIG_RTC_HCTOSYS=y
+@@ -949,40 +1171,42 @@
+ # 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_M41T94 is not set
++# CONFIG_RTC_DRV_DS1305 is not set
++# CONFIG_RTC_DRV_DS1390 is not set
+ # CONFIG_RTC_DRV_MAX6902 is not set
++# CONFIG_RTC_DRV_R9701 is not set
++# CONFIG_RTC_DRV_RS5C348 is not set
++# CONFIG_RTC_DRV_DS3234 is not set
+ #
+ # Platform RTC drivers
+ #
+ # CONFIG_RTC_DRV_CMOS is not set
++# CONFIG_RTC_DRV_DS1286 is not set
++# CONFIG_RTC_DRV_DS1511 is not set
+ # CONFIG_RTC_DRV_DS1553 is not set
+-# CONFIG_RTC_DRV_STK17TA8 is not set
+ # CONFIG_RTC_DRV_DS1742 is not set
++# CONFIG_RTC_DRV_STK17TA8 is not set
+ # CONFIG_RTC_DRV_M48T86 is not set
++# CONFIG_RTC_DRV_M48T35 is not set
+ # CONFIG_RTC_DRV_M48T59 is not set
++# CONFIG_RTC_DRV_BQ4802 is not set
+ # CONFIG_RTC_DRV_V3020 is not set
+ #
+ # on-CPU RTC drivers
+ #
+ CONFIG_RTC_DRV_AT91SAM9=y
++CONFIG_RTC_DRV_AT91SAM9_RTT=0
++CONFIG_RTC_DRV_AT91SAM9_GPBR=0
++# CONFIG_DMADEVICES is not set
++# CONFIG_AUXDISPLAY is not set
++# CONFIG_REGULATOR is not set
++# CONFIG_UIO is not set
++# CONFIG_STAGING is not set
+ #
+ # File systems
+@@ -991,24 +1215,28 @@
+ # 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_EXT4_FS is not set
+ # CONFIG_REISERFS_FS is not set
+ # CONFIG_JFS_FS is not set
+ # CONFIG_FS_POSIX_ACL is not set
++CONFIG_FILE_LOCKING=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_BTRFS_FS is not set
++CONFIG_DNOTIFY=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 is not set
+ # CONFIG_FUSE_FS is not set
+ #
++# Caches
++#
++# CONFIG_FSCACHE is not set
++
++#
+ # CD-ROM/DVD Filesystems
+ #
+ # CONFIG_ISO9660_FS is not set
+@@ -1018,7 +1246,7 @@
+ # DOS/FAT/NT Filesystems
+ #
+ CONFIG_FAT_FS=y
+-# CONFIG_MSDOS_FS is not set
++CONFIG_MSDOS_FS=y
+ CONFIG_VFAT_FS=y
+ CONFIG_FAT_DEFAULT_CODEPAGE=437
+ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+@@ -1029,15 +1257,13 @@
+ #
+ CONFIG_PROC_FS=y
+ CONFIG_PROC_SYSCTL=y
++CONFIG_PROC_PAGE_MONITOR=y
+ CONFIG_SYSFS=y
+ CONFIG_TMPFS=y
+ # CONFIG_TMPFS_POSIX_ACL is not set
+ # CONFIG_HUGETLB_PAGE is not set
+ # CONFIG_CONFIGFS_FS is not set
+-
+-#
+-# Miscellaneous filesystems
+-#
++CONFIG_MISC_FILESYSTEMS=y
+ # CONFIG_ADFS_FS is not set
+ # CONFIG_AFFS_FS is not set
+ # CONFIG_HFS_FS is not set
+@@ -1045,16 +1271,42 @@
+ # 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_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=m
++CONFIG_SQUASHFS=m
++CONFIG_SQUASHFS_EMBEDDED=y
++CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
+ # CONFIG_VXFS_FS is not set
++# CONFIG_MINIX_FS is not set
++# CONFIG_OMFS_FS is not set
+ # CONFIG_HPFS_FS is not set
+ # CONFIG_QNX4FS_FS is not set
++# CONFIG_ROMFS_FS is not set
+ # CONFIG_SYSV_FS is not set
+ # CONFIG_UFS_FS is not set
++# CONFIG_NILFS2_FS is not set
+ CONFIG_NETWORK_FILESYSTEMS=y
+-# CONFIG_NFS_FS is not set
++CONFIG_NFS_FS=y
++CONFIG_NFS_V3=y
++# CONFIG_NFS_V3_ACL is not set
++# CONFIG_NFS_V4 is not set
+ # CONFIG_NFSD is not set
++CONFIG_LOCKD=y
++CONFIG_LOCKD_V4=y
++CONFIG_NFS_COMMON=y
++CONFIG_SUNRPC=y
++# CONFIG_RPCSEC_GSS_KRB5 is not set
++# CONFIG_RPCSEC_GSS_SPKM3 is not set
+ # CONFIG_SMB_FS is not set
+ # CONFIG_CIFS is not set
+ # CONFIG_NCP_FS is not set
+@@ -1102,14 +1354,11 @@
+ # 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_ISO8859_15=y
+ # CONFIG_NLS_KOI8_R is not set
+ # CONFIG_NLS_KOI8_U is not set
+-# CONFIG_NLS_UTF8 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
+@@ -1117,63 +1366,161 @@
+ # CONFIG_PRINTK_TIME is not set
+ CONFIG_ENABLE_WARN_DEPRECATED=y
+ CONFIG_ENABLE_MUST_CHECK=y
++CONFIG_FRAME_WARN=1024
+ # 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_KERNEL 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_DEBUG_MEMORY_INIT=y
++# CONFIG_RCU_CPU_STALL_DETECTOR is not set
++# CONFIG_LATENCYTOP is not set
++# CONFIG_SYSCTL_SYSCALL_CHECK is not set
++CONFIG_HAVE_FUNCTION_TRACER=y
++CONFIG_TRACING_SUPPORT=y
++
++#
++# Tracers
++#
++# CONFIG_FUNCTION_TRACER is not set
++# CONFIG_IRQSOFF_TRACER is not set
++# CONFIG_SCHED_TRACER is not set
++# CONFIG_CONTEXT_SWITCH_TRACER is not set
++# CONFIG_EVENT_TRACER is not set
++# CONFIG_BOOT_TRACER is not set
++# CONFIG_TRACE_BRANCH_PROFILING is not set
++# CONFIG_STACK_TRACER is not set
++# CONFIG_KMEMTRACE is not set
++# CONFIG_WORKQUEUE_TRACER is not set
++# CONFIG_BLK_DEV_IO_TRACE is not set
+ # CONFIG_SAMPLES is not set
++CONFIG_HAVE_ARCH_KGDB=y
++CONFIG_ARM_UNWIND=y
+ 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_SECURITYFS is not set
+ # CONFIG_SECURITY_FILE_CAPABILITIES is not set
+-# CONFIG_CRYPTO is not set
++CONFIG_CRYPTO=y
++
++#
++# Crypto core or helper
++#
++# CONFIG_CRYPTO_FIPS is not set
++CONFIG_CRYPTO_ALGAPI=y
++CONFIG_CRYPTO_ALGAPI2=y
++CONFIG_CRYPTO_AEAD2=y
++CONFIG_CRYPTO_BLKCIPHER=y
++CONFIG_CRYPTO_BLKCIPHER2=y
++CONFIG_CRYPTO_HASH2=y
++CONFIG_CRYPTO_RNG2=y
++CONFIG_CRYPTO_PCOMP=y
++CONFIG_CRYPTO_MANAGER=y
++CONFIG_CRYPTO_MANAGER2=y
++# CONFIG_CRYPTO_GF128MUL is not set
++# CONFIG_CRYPTO_NULL is not set
++CONFIG_CRYPTO_WORKQUEUE=y
++# CONFIG_CRYPTO_CRYPTD is not set
++# CONFIG_CRYPTO_AUTHENC is not set
++# CONFIG_CRYPTO_TEST is not set
++
++#
++# Authenticated Encryption with Associated Data
++#
++# CONFIG_CRYPTO_CCM is not set
++# CONFIG_CRYPTO_GCM is not set
++# CONFIG_CRYPTO_SEQIV is not set
++
++#
++# Block modes
++#
++# CONFIG_CRYPTO_CBC is not set
++# CONFIG_CRYPTO_CTR is not set
++# CONFIG_CRYPTO_CTS is not set
++CONFIG_CRYPTO_ECB=y
++# CONFIG_CRYPTO_LRW is not set
++# CONFIG_CRYPTO_PCBC is not set
++# CONFIG_CRYPTO_XTS is not set
++
++#
++# Hash modes
++#
++# CONFIG_CRYPTO_HMAC is not set
++# CONFIG_CRYPTO_XCBC is not set
++
++#
++# Digest
++#
++# CONFIG_CRYPTO_CRC32C is not set
++# CONFIG_CRYPTO_MD4 is not set
++# CONFIG_CRYPTO_MD5 is not set
++# CONFIG_CRYPTO_MICHAEL_MIC is not set
++# CONFIG_CRYPTO_RMD128 is not set
++# CONFIG_CRYPTO_RMD160 is not set
++# CONFIG_CRYPTO_RMD256 is not set
++# CONFIG_CRYPTO_RMD320 is not set
++# CONFIG_CRYPTO_SHA1 is not set
++# CONFIG_CRYPTO_SHA256 is not set
++# CONFIG_CRYPTO_SHA512 is not set
++# CONFIG_CRYPTO_TGR192 is not set
++# CONFIG_CRYPTO_WP512 is not set
++
++#
++# Ciphers
++#
++CONFIG_CRYPTO_AES=y
++# CONFIG_CRYPTO_ANUBIS is not set
++CONFIG_CRYPTO_ARC4=y
++# CONFIG_CRYPTO_BLOWFISH is not set
++# CONFIG_CRYPTO_CAMELLIA is not set
++# CONFIG_CRYPTO_CAST5 is not set
++# CONFIG_CRYPTO_CAST6 is not set
++# CONFIG_CRYPTO_DES is not set
++# CONFIG_CRYPTO_FCRYPT is not set
++# CONFIG_CRYPTO_KHAZAD is not set
++# CONFIG_CRYPTO_SALSA20 is not set
++# CONFIG_CRYPTO_SEED is not set
++# CONFIG_CRYPTO_SERPENT is not set
++# CONFIG_CRYPTO_TEA is not set
++# CONFIG_CRYPTO_TWOFISH is not set
++
++#
++# Compression
++#
++# CONFIG_CRYPTO_DEFLATE is not set
++# CONFIG_CRYPTO_ZLIB is not set
++# CONFIG_CRYPTO_LZO is not set
++
++#
++# Random Number Generation
++#
++# CONFIG_CRYPTO_ANSI_CPRNG is not set
++# CONFIG_CRYPTO_HW is not set
++# CONFIG_BINARY_PRINTF is not set
+ #
+ # Library routines
+ #
+ CONFIG_BITREVERSE=y
++CONFIG_GENERIC_FIND_LAST_BIT=y
+ # CONFIG_CRC_CCITT is not set
+ # CONFIG_CRC16 is not set
+-# CONFIG_CRC_ITU_T is not set
++# CONFIG_CRC_T10DIF is not set
++CONFIG_CRC_ITU_T=m
+ CONFIG_CRC32=y
+ # CONFIG_CRC7 is not set
+ # CONFIG_LIBCRC32C is not set
+ CONFIG_ZLIB_INFLATE=y
+-CONFIG_PLIST=y
++CONFIG_ZLIB_DEFLATE=y
++CONFIG_DECOMPRESS_GZIP=y
++CONFIG_DECOMPRESS_BZIP2=y
++CONFIG_DECOMPRESS_LZMA=y
+ CONFIG_HAS_IOMEM=y
+ CONFIG_HAS_IOPORT=y
+ CONFIG_HAS_DMA=y
++CONFIG_NLATTR=y
+Index: linux-2.6.30/arch/arm/configs/at91sam9260ek_defconfig
+===================================================================
+--- linux-2.6.30.orig/arch/arm/configs/at91sam9260ek_defconfig 2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/arch/arm/configs/at91sam9260ek_defconfig      2011-02-01 16:40:30.197007464 +0100
+@@ -1,17 +1,18 @@
+ #
+ # Automatically generated make config: don't edit
+-# Linux kernel version: 2.6.24-rc7
+-# Tue Jan  8 22:20:50 2008
++# Linux kernel version: 2.6.30
++# Tue Oct 13 12:38:49 2009
+ #
+ 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_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_HAVE_LATENCYTOP_SUPPORT=y
+ CONFIG_LOCKDEP_SUPPORT=y
+ CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+ CONFIG_HARDIRQS_SW_RESEND=y
+@@ -21,7 +22,7 @@
+ # CONFIG_ARCH_HAS_ILOG2_U64 is not set
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
+-CONFIG_ZONE_DMA=y
++CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
+ CONFIG_VECTORS_BASE=0xffff0000
+ CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+@@ -39,57 +40,82 @@
+ # 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
++
++#
++# RCU Subsystem
++#
++CONFIG_CLASSIC_RCU=y
++# CONFIG_TREE_RCU is not set
++# CONFIG_PREEMPT_RCU is not set
++# CONFIG_TREE_RCU_TRACE is not set
++# CONFIG_PREEMPT_RCU_TRACE is not set
+ # CONFIG_IKCONFIG is not set
+ CONFIG_LOG_BUF_SHIFT=14
++# CONFIG_GROUP_SCHED is not set
+ # 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_SYSFS_DEPRECATED_V2=y
+ # CONFIG_RELAY is not set
++CONFIG_NAMESPACES=y
++# CONFIG_UTS_NS is not set
++# CONFIG_IPC_NS is not set
++# CONFIG_USER_NS is not set
++# CONFIG_PID_NS is not set
++# CONFIG_NET_NS is not set
+ CONFIG_BLK_DEV_INITRD=y
+ CONFIG_INITRAMFS_SOURCE=""
++CONFIG_RD_GZIP=y
++CONFIG_RD_BZIP2=y
++CONFIG_RD_LZMA=y
+ CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+ CONFIG_SYSCTL=y
++CONFIG_ANON_INODES=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_STRIP_ASM_SYMS=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=y
+ CONFIG_SIGNALFD=y
++CONFIG_TIMERFD=y
+ CONFIG_EVENTFD=y
+ CONFIG_SHMEM=y
++CONFIG_AIO=y
+ CONFIG_VM_EVENT_COUNTERS=y
++CONFIG_COMPAT_BRK=y
+ CONFIG_SLAB=y
+ # CONFIG_SLUB is not set
+ # CONFIG_SLOB is not set
++# CONFIG_PROFILING is not set
++# CONFIG_MARKERS is not set
++CONFIG_HAVE_OPROFILE=y
++# CONFIG_KPROBES is not set
++CONFIG_HAVE_KPROBES=y
++CONFIG_HAVE_KRETPROBES=y
++CONFIG_HAVE_CLK=y
++# CONFIG_SLOW_WORK is not set
++CONFIG_HAVE_GENERIC_DMA_COHERENT=y
+ CONFIG_SLABINFO=y
+ CONFIG_RT_MUTEXES=y
+-# CONFIG_TINY_SHMEM is not set
+ CONFIG_BASE_SMALL=0
+ CONFIG_MODULES=y
++# CONFIG_MODULE_FORCE_LOAD is not set
+ CONFIG_MODULE_UNLOAD=y
+ # CONFIG_MODULE_FORCE_UNLOAD is not set
+ # CONFIG_MODVERSIONS 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
++# CONFIG_BLK_DEV_INTEGRITY is not set
+ #
+ # IO Schedulers
+@@ -103,6 +129,7 @@
+ # CONFIG_DEFAULT_CFQ is not set
+ # CONFIG_DEFAULT_NOOP is not set
+ CONFIG_DEFAULT_IOSCHED="anticipatory"
++CONFIG_FREEZER=y
+ #
+ # System Type
+@@ -112,11 +139,10 @@
+ # 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_GEMINI is not set
+ # CONFIG_ARCH_FOOTBRIDGE is not set
+ # CONFIG_ARCH_NETX is not set
+ # CONFIG_ARCH_H720X is not set
+@@ -128,26 +154,26 @@
+ # CONFIG_ARCH_IXP2000 is not set
+ # CONFIG_ARCH_IXP4XX is not set
+ # CONFIG_ARCH_L7200 is not set
++# CONFIG_ARCH_KIRKWOOD is not set
+ # CONFIG_ARCH_KS8695 is not set
+ # CONFIG_ARCH_NS9XXX is not set
++# CONFIG_ARCH_LOKI is not set
++# CONFIG_ARCH_MV78XX0 is not set
+ # CONFIG_ARCH_MXC is not set
++# CONFIG_ARCH_ORION5X is not set
+ # CONFIG_ARCH_PNX4008 is not set
+ # CONFIG_ARCH_PXA is not set
++# CONFIG_ARCH_MMP is not set
+ # CONFIG_ARCH_RPC is not set
+ # CONFIG_ARCH_SA1100 is not set
+ # CONFIG_ARCH_S3C2410 is not set
++# CONFIG_ARCH_S3C64XX is not set
+ # CONFIG_ARCH_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
+-#
++# CONFIG_ARCH_MSM is not set
++# CONFIG_ARCH_W90X900 is not set
+ #
+ # Atmel AT91 System-on-Chip
+@@ -155,8 +181,13 @@
+ # CONFIG_ARCH_AT91RM9200 is not set
+ CONFIG_ARCH_AT91SAM9260=y
+ # CONFIG_ARCH_AT91SAM9261 is not set
++# CONFIG_ARCH_AT91SAM9G10 is not set
+ # CONFIG_ARCH_AT91SAM9263 is not set
+ # CONFIG_ARCH_AT91SAM9RL is not set
++# CONFIG_ARCH_AT91SAM9G20 is not set
++# CONFIG_ARCH_AT91SAM9G45 is not set
++# CONFIG_ARCH_AT91CAP9 is not set
++# CONFIG_ARCH_AT572D940HF is not set
+ # CONFIG_ARCH_AT91X40 is not set
+ CONFIG_AT91_PMC_UNIT=y
+@@ -171,6 +202,10 @@
+ CONFIG_MACH_AT91SAM9260EK=y
+ # CONFIG_MACH_CAM60 is not set
+ # CONFIG_MACH_SAM9_L9260 is not set
++# CONFIG_MACH_AFEB9260 is not set
++# CONFIG_MACH_USB_A9260 is not set
++# CONFIG_MACH_QIL_A9260 is not set
++# CONFIG_MACH_SBC35_A9260 is not set
+ #
+ # AT91 Board Options
+@@ -182,8 +217,15 @@
+ # AT91 Feature Selections
+ #
+ CONFIG_AT91_PROGRAMMABLE_CLOCKS=y
+-# CONFIG_ATMEL_TCLIB is not set
++# CONFIG_AT91_SLOW_CLOCK is not set
+ CONFIG_AT91_TIMER_HZ=100
++CONFIG_AT91_EARLY_DBGU=y
++# CONFIG_AT91_EARLY_USART0 is not set
++# CONFIG_AT91_EARLY_USART1 is not set
++# CONFIG_AT91_EARLY_USART2 is not set
++# CONFIG_AT91_EARLY_USART3 is not set
++# CONFIG_AT91_EARLY_USART4 is not set
++# CONFIG_AT91_EARLY_USART5 is not set
+ #
+ # Processor Type
+@@ -192,6 +234,7 @@
+ CONFIG_CPU_ARM926T=y
+ CONFIG_CPU_32v5=y
+ CONFIG_CPU_ABRT_EV5TJ=y
++CONFIG_CPU_PABRT_NOIFAR=y
+ CONFIG_CPU_CACHE_VIVT=y
+ CONFIG_CPU_COPY_V4WB=y
+ CONFIG_CPU_TLB_V4WBI=y
+@@ -201,7 +244,7 @@
+ #
+ # Processor Features
+ #
+-# CONFIG_ARM_THUMB is not set
++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
+@@ -218,25 +261,37 @@
+ #
+ # 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_VMSPLIT_3G=y
++# CONFIG_VMSPLIT_2G is not set
++# CONFIG_VMSPLIT_1G is not set
++CONFIG_PAGE_OFFSET=0xC0000000
+ # CONFIG_PREEMPT is not set
+ CONFIG_HZ=100
+-# CONFIG_AEABI is not set
+-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
++CONFIG_AEABI=y
++CONFIG_OABI_COMPAT=y
++# CONFIG_ARCH_HAS_HOLES_MEMORYMODEL is not set
++# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
++# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
++# CONFIG_HIGHMEM is not set
+ CONFIG_SELECT_MEMORY_MODEL=y
+ CONFIG_FLATMEM_MANUAL=y
+ # CONFIG_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_PAGEFLAGS_EXTENDED=y
+ CONFIG_SPLIT_PTLOCK_CPUS=4096
+-# CONFIG_RESOURCES_64BIT is not set
+-CONFIG_ZONE_DMA_FLAG=1
+-CONFIG_BOUNCE=y
++# CONFIG_PHYS_ADDR_T_64BIT is not set
++CONFIG_ZONE_DMA_FLAG=0
+ CONFIG_VIRT_TO_BUS=y
+-# CONFIG_LEDS is not set
++CONFIG_UNEVICTABLE_LRU=y
++CONFIG_HAVE_MLOCK=y
++CONFIG_HAVE_MLOCKED_PAGE_BIT=y
++CONFIG_LEDS=y
++CONFIG_LEDS_CPU=y
+ CONFIG_ALIGNMENT_TRAP=y
+ #
+@@ -249,6 +304,11 @@
+ # CONFIG_KEXEC is not set
+ #
++# CPU Power Management
++#
++# CONFIG_CPU_IDLE is not set
++
++#
+ # Floating point emulation
+ #
+@@ -264,19 +324,21 @@
+ # Userspace binary formats
+ #
+ CONFIG_BINFMT_ELF=y
++# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
++CONFIG_HAVE_AOUT=y
+ # CONFIG_BINFMT_AOUT is not set
+ # CONFIG_BINFMT_MISC is not set
+-# CONFIG_ARTHUR is not set
+ #
+ # Power management options
+ #
+-# CONFIG_PM is not set
+-CONFIG_SUSPEND_UP_POSSIBLE=y
+-
+-#
+-# Networking
+-#
++CONFIG_PM=y
++# CONFIG_PM_DEBUG is not set
++CONFIG_PM_SLEEP=y
++CONFIG_SUSPEND=y
++CONFIG_SUSPEND_FREEZER=y
++# CONFIG_APM_EMULATION is not set
++CONFIG_ARCH_SUSPEND_POSSIBLE=y
+ CONFIG_NET=y
+ #
+@@ -287,15 +349,13 @@
+ CONFIG_UNIX=y
+ # CONFIG_NET_KEY is not set
+ CONFIG_INET=y
+-# CONFIG_IP_MULTICAST is not set
++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=y
+-# CONFIG_IP_PNP_RARP is not set
++# 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 is not set
+ # CONFIG_INET_AH is not set
+@@ -307,15 +367,12 @@
+ # 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_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
+@@ -323,6 +380,7 @@
+ # CONFIG_TIPC is not set
+ # CONFIG_ATM is not set
+ # CONFIG_BRIDGE is not set
++# CONFIG_NET_DSA is not set
+ # CONFIG_VLAN_8021Q is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_LLC2 is not set
+@@ -332,24 +390,40 @@
+ # CONFIG_LAPB is not set
+ # CONFIG_ECONET is not set
+ # CONFIG_WAN_ROUTER is not set
++# CONFIG_PHONET is not set
+ # CONFIG_NET_SCHED is not set
++# CONFIG_DCB is not set
+ #
+ # Network testing
+ #
+ # CONFIG_NET_PKTGEN is not set
+ # CONFIG_HAMRADIO is not set
++# CONFIG_CAN is not set
+ # CONFIG_IRDA is not set
+ # CONFIG_BT is not set
+ # CONFIG_AF_RXRPC is not set
+-
+-#
+-# Wireless
+-#
+-# CONFIG_CFG80211 is not set
+-# CONFIG_WIRELESS_EXT is not set
+-# CONFIG_MAC80211 is not set
+-# CONFIG_IEEE80211 is not set
++CONFIG_WIRELESS=y
++CONFIG_CFG80211=y
++# CONFIG_CFG80211_REG_DEBUG is not set
++# CONFIG_WIRELESS_OLD_REGULATORY is not set
++CONFIG_WIRELESS_EXT=y
++CONFIG_WIRELESS_EXT_SYSFS=y
++CONFIG_LIB80211=y
++# CONFIG_LIB80211_DEBUG is not set
++CONFIG_MAC80211=y
++
++#
++# Rate control algorithm selection
++#
++CONFIG_MAC80211_RC_MINSTREL=y
++# CONFIG_MAC80211_RC_DEFAULT_PID is not set
++CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
++CONFIG_MAC80211_RC_DEFAULT="minstrel"
++# CONFIG_MAC80211_MESH is not set
++# CONFIG_MAC80211_LEDS is not set
++# CONFIG_MAC80211_DEBUG_MENU is not set
++# CONFIG_WIMAX is not set
+ # CONFIG_RFKILL is not set
+ # CONFIG_NET_9P is not set
+@@ -363,27 +437,130 @@
+ 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_FW_LOADER=y
++CONFIG_FIRMWARE_IN_KERNEL=y
++CONFIG_EXTRA_FIRMWARE=""
+ # CONFIG_SYS_HYPERVISOR is not set
+ # CONFIG_CONNECTOR is not set
+-# 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_TESTS is not set
++# CONFIG_MTD_REDBOOT_PARTS is not set
++CONFIG_MTD_CMDLINE_PARTS=y
++# CONFIG_MTD_AFS_PARTS is not set
++# CONFIG_MTD_AR7_PARTS is not set
++
++#
++# User Modules And Translation Layers
++#
++CONFIG_MTD_CHAR=y
++CONFIG_MTD_BLKDEVS=y
++CONFIG_MTD_BLOCK=y
++# CONFIG_FTL is not set
++# CONFIG_NFTL is not set
++# CONFIG_INFTL is not set
++# CONFIG_RFD_FTL is not set
++# CONFIG_SSFDC is not set
++# CONFIG_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=y
++# CONFIG_MTD_DATAFLASH_WRITE_VERIFY is not set
++# CONFIG_MTD_DATAFLASH_OTP 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_GPIO is not set
++CONFIG_MTD_NAND_IDS=y
++# CONFIG_MTD_NAND_DISKONCHIP is not set
++CONFIG_MTD_NAND_ATMEL=y
++CONFIG_MTD_NAND_ATMEL_ECC_SOFT=y
++# CONFIG_MTD_NAND_ATMEL_ECC_HW is not set
++# CONFIG_MTD_NAND_ATMEL_ECC_NONE is not set
++# CONFIG_MTD_NAND_NANDSIM is not set
++# CONFIG_MTD_NAND_PLATFORM is not set
++# CONFIG_MTD_ALAUDA is not set
++# CONFIG_MTD_ONENAND is not set
++
++#
++# LPDDR flash memory drivers
++#
++# CONFIG_MTD_LPDDR is not set
++
++#
++# 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_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_COUNT=4
+ CONFIG_BLK_DEV_RAM_SIZE=8192
+-CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
++# CONFIG_BLK_DEV_XIP 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_ATMEL_TCLIB=y
++CONFIG_ATMEL_TCB_CLKSRC=y
++CONFIG_ATMEL_TCB_CLKSRC_BLOCK=0
+ CONFIG_ATMEL_SSC=y
++# CONFIG_ENCLOSURE_SERVICES is not set
++# CONFIG_C2PORT is not set
++
++#
++# EEPROM support
++#
++# CONFIG_EEPROM_AT25 is not set
++CONFIG_EEPROM_93CX6=m
++CONFIG_HAVE_IDE=y
++# CONFIG_IDE is not set
+ #
+ # SCSI device support
+@@ -422,13 +599,13 @@
+ # 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 is not set
++# CONFIG_SCSI_DH is not set
++# CONFIG_SCSI_OSD_INITIATOR is not set
+ # CONFIG_ATA is not set
+ # CONFIG_MD is not set
+ CONFIG_NETDEVICES=y
+-# CONFIG_NETDEVICES_MULTIQUEUE is not set
++# CONFIG_COMPAT_NET_DEV_OPS is not set
+ # CONFIG_DUMMY is not set
+ # CONFIG_BONDING is not set
+ # CONFIG_MACVLAN is not set
+@@ -441,7 +618,7 @@
+ # MII PHY device drivers
+ #
+ # CONFIG_MARVELL_PHY is not set
+-# CONFIG_DAVICOM_PHY is not set
++CONFIG_DAVICOM_PHY=y
+ # CONFIG_QSEMI_PHY is not set
+ # CONFIG_LXT_PHY is not set
+ # CONFIG_CICADA_PHY is not set
+@@ -449,27 +626,72 @@
+ # CONFIG_SMSC_PHY is not set
+ # CONFIG_BROADCOM_PHY is not set
+ # CONFIG_ICPLUS_PHY is not set
++# CONFIG_REALTEK_PHY is not set
++# CONFIG_NATIONAL_PHY is not set
++# CONFIG_STE10XP is not set
++# CONFIG_LSI_ET1011C_PHY is not set
+ # CONFIG_FIXED_PHY is not set
+ # CONFIG_MDIO_BITBANG is not set
+ CONFIG_NET_ETHERNET=y
+ CONFIG_MII=y
+ CONFIG_MACB=y
++CONFIG_MACB_TX_SRAM=y
+ # CONFIG_AX88796 is not set
+ # CONFIG_SMC91X is not set
+ # CONFIG_DM9000 is not set
++# CONFIG_ENC28J60 is not set
++# CONFIG_ETHOC is not set
++# CONFIG_SMC911X is not set
++# CONFIG_SMSC911X is not set
++# CONFIG_DNET is not set
+ # CONFIG_IBM_NEW_EMAC_ZMII is not set
+ # CONFIG_IBM_NEW_EMAC_RGMII is not set
+ # CONFIG_IBM_NEW_EMAC_TAH is not set
+ # CONFIG_IBM_NEW_EMAC_EMAC4 is not set
++# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
++# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
++# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
+ # CONFIG_B44 is not set
+-CONFIG_NETDEV_1000=y
+-CONFIG_NETDEV_10000=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_WLAN_80211=y
++CONFIG_LIBERTAS=m
++CONFIG_LIBERTAS_USB=m
++CONFIG_LIBERTAS_SDIO=m
++# CONFIG_LIBERTAS_SPI is not set
++# CONFIG_LIBERTAS_DEBUG is not set
++# CONFIG_LIBERTAS_THINFIRM is not set
++# CONFIG_AT76C50X_USB is not set
++CONFIG_USB_ZD1201=m
++# CONFIG_USB_NET_RNDIS_WLAN is not set
++CONFIG_RTL8187=m
++# CONFIG_MAC80211_HWSIM is not set
++# CONFIG_P54_COMMON is not set
++CONFIG_AR9170_USB=m
++# CONFIG_HOSTAP is not set
++# CONFIG_B43 is not set
++# CONFIG_B43LEGACY is not set
++CONFIG_ZD1211RW=m
++# CONFIG_ZD1211RW_DEBUG is not set
++CONFIG_RT2X00=m
++CONFIG_RT2500USB=m
++CONFIG_RT73USB=m
++CONFIG_RT2X00_LIB_USB=m
++CONFIG_RT2X00_LIB=m
++CONFIG_RT2X00_LIB_FIRMWARE=y
++CONFIG_RT2X00_LIB_CRYPTO=y
++CONFIG_RT2X00_LIB_RFKILL=y
++CONFIG_RT2X00_LIB_LEDS=y
++# CONFIG_RT2X00_DEBUG is not set
++
++#
++# Enable WiMAX (Networking options) to see the WiMAX drivers
++#
+ #
+ # USB Network Adapters
+@@ -482,7 +704,6 @@
+ # 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
+@@ -493,23 +714,30 @@
+ #
+ CONFIG_INPUT=y
+ # CONFIG_INPUT_FF_MEMLESS is not set
+-# CONFIG_INPUT_POLLDEV is not set
++CONFIG_INPUT_POLLDEV=m
+ #
+ # 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_MOUSEDEV_SCREEN_X=320
++CONFIG_INPUT_MOUSEDEV_SCREEN_Y=240
+ # CONFIG_INPUT_JOYDEV is not set
+-# CONFIG_INPUT_EVDEV is not set
++CONFIG_INPUT_EVDEV=y
+ # CONFIG_INPUT_EVBUG is not set
+ #
+ # Input Device Drivers
+ #
+-# CONFIG_INPUT_KEYBOARD is not set
++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_INPUT_MOUSE is not set
+ # CONFIG_INPUT_JOYSTICK is not set
+ # CONFIG_INPUT_TABLET is not set
+@@ -519,16 +747,20 @@
+ #
+ # Hardware I/O ports
+ #
+-# CONFIG_SERIO is not set
++CONFIG_SERIO=y
++CONFIG_SERIO_SERPORT=y
++# CONFIG_SERIO_RAW is not set
+ # CONFIG_GAMEPORT is not set
+ #
+ # Character devices
+ #
+ CONFIG_VT=y
++CONFIG_CONSOLE_TRANSLATIONS=y
+ CONFIG_VT_CONSOLE=y
+ CONFIG_HW_CONSOLE=y
+ # CONFIG_VT_HW_CONSOLE_BINDING is not set
++CONFIG_DEVKMEM=y
+ # CONFIG_SERIAL_NONSTANDARD is not set
+ #
+@@ -541,96 +773,98 @@
+ #
+ CONFIG_SERIAL_ATMEL=y
+ CONFIG_SERIAL_ATMEL_CONSOLE=y
++CONFIG_SERIAL_ATMEL_PDC=y
+ # CONFIG_SERIAL_ATMEL_TTYAT is not set
++# CONFIG_SERIAL_MAX3100 is not set
+ CONFIG_SERIAL_CORE=y
+ CONFIG_SERIAL_CORE_CONSOLE=y
+ CONFIG_UNIX98_PTYS=y
++# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
+ CONFIG_LEGACY_PTYS=y
+-CONFIG_LEGACY_PTY_COUNT=256
++CONFIG_LEGACY_PTY_COUNT=4
+ # CONFIG_IPMI_HANDLER is not set
+-# CONFIG_HW_RANDOM is not set
+-# CONFIG_NVRAM is not set
++CONFIG_HW_RANDOM=y
++# CONFIG_HW_RANDOM_TIMERIOMEM is not set
+ # CONFIG_R3964 is not set
+ # CONFIG_RAW_DRIVER is not set
+ # CONFIG_TCG_TPM is not set
+-CONFIG_I2C=y
+-CONFIG_I2C_BOARDINFO=y
+-CONFIG_I2C_CHARDEV=y
++# CONFIG_I2C is not set
++CONFIG_SPI=y
++CONFIG_SPI_MASTER=y
+ #
+-# I2C Algorithms
++# SPI Master Controller Drivers
+ #
+-CONFIG_I2C_ALGOBIT=y
+-# CONFIG_I2C_ALGOPCF is not set
+-# CONFIG_I2C_ALGOPCA is not set
++CONFIG_SPI_ATMEL=y
++# CONFIG_SPI_BITBANG is not set
++# CONFIG_SPI_GPIO is not set
+ #
+-# I2C Hardware Bus support
++# SPI Protocol Masters
+ #
+-CONFIG_I2C_GPIO=y
+-# 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
+-# CONFIG_I2C_PCA is not set
++CONFIG_SPI_SPIDEV=y
++# CONFIG_SPI_TLE62X0 is not set
++CONFIG_ARCH_REQUIRE_GPIOLIB=y
++CONFIG_GPIOLIB=y
++# CONFIG_GPIO_SYSFS is not set
+ #
+-# Miscellaneous I2C Chip support
++# Memory mapped GPIO expanders:
+ #
+-# CONFIG_SENSORS_DS1337 is not set
+-# CONFIG_SENSORS_DS1374 is not set
+-# CONFIG_DS1682 is not set
+-# CONFIG_EEPROM_LEGACY 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
++# I2C GPIO expanders:
+ #
+-# 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
++# PCI GPIO expanders:
+ #
+-# CONFIG_SOFT_WATCHDOG is not set
+-CONFIG_AT91SAM9X_WATCHDOG=y
+ #
+-# USB-based Watchdog Cards
++# SPI GPIO expanders:
+ #
+-# CONFIG_USBPCWATCHDOG is not set
++# CONFIG_GPIO_MAX7301 is not set
++# CONFIG_GPIO_MCP23S08 is not set
++# CONFIG_W1 is not set
++# CONFIG_POWER_SUPPLY is not set
++# CONFIG_HWMON is not set
++# CONFIG_THERMAL is not set
++# CONFIG_THERMAL_HWMON is not set
++# CONFIG_WATCHDOG is not set
++CONFIG_SSB_POSSIBLE=y
+ #
+ # Sonics Silicon Backplane
+ #
+-CONFIG_SSB_POSSIBLE=y
+ # CONFIG_SSB is not set
+ #
+ # Multifunction device drivers
+ #
++# CONFIG_MFD_CORE is not set
+ # CONFIG_MFD_SM501 is not set
++# CONFIG_MFD_ASIC3 is not set
++# CONFIG_HTC_EGPIO is not set
++# CONFIG_HTC_PASIC3 is not set
++# CONFIG_MFD_TMIO is not set
++# CONFIG_MFD_T7L66XB is not set
++# CONFIG_MFD_TC6387XB is not set
++# CONFIG_MFD_TC6393XB is not set
+ #
+ # Multimedia devices
+ #
++
++#
++# Multimedia core support
++#
+ # CONFIG_VIDEO_DEV is not set
+ # CONFIG_DVB_CORE is not set
++# CONFIG_VIDEO_MEDIA is not set
++
++#
++# Multimedia drivers
++#
+ # CONFIG_DAB is not set
+ #
+@@ -651,11 +885,40 @@
+ #
+ # CONFIG_VGA_CONSOLE is not set
+ CONFIG_DUMMY_CONSOLE=y
+-
+-#
+-# Sound
+-#
+-# CONFIG_SOUND is not set
++CONFIG_SOUND=y
++CONFIG_SOUND_OSS_CORE=y
++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_PCM_OSS_PLUGINS=y
++# CONFIG_SND_SEQUENCER_OSS is not set
++# 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
++# CONFIG_SND_DRIVERS is not set
++# CONFIG_SND_ARM is not set
++
++#
++# Atmel devices (AVR32 and AT91)
++#
++# CONFIG_SND_ATMEL_AC97C is not set
++CONFIG_SND_SPI=y
++CONFIG_SND_AT73C213=y
++CONFIG_SND_AT73C213_TARGET_BITRATE=48000
++CONFIG_SND_USB=y
++CONFIG_SND_USB_AUDIO=m
++# CONFIG_SND_USB_CAIAQ is not set
++# CONFIG_SND_SOC is not set
++# CONFIG_SOUND_PRIME is not set
+ CONFIG_HID_SUPPORT=y
+ CONFIG_HID=y
+ # CONFIG_HID_DEBUG is not set
+@@ -665,63 +928,76 @@
+ # USB Input Devices
+ #
+ # CONFIG_USB_HID is not set
++# CONFIG_HID_PID is not set
+ #
+-# USB HID Boot Protocol drivers
++# Special HID 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
++# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
+ #
+ # Miscellaneous USB options
+ #
+ CONFIG_USB_DEVICEFS=y
+-CONFIG_USB_DEVICE_CLASS=y
++# CONFIG_USB_DEVICE_CLASS is not set
+ # CONFIG_USB_DYNAMIC_MINORS is not set
++# CONFIG_USB_SUSPEND is not set
+ # CONFIG_USB_OTG is not set
++# CONFIG_USB_MON is not set
++# CONFIG_USB_WUSB is not set
++# CONFIG_USB_WUSB_CBAF is not set
+ #
+ # USB Host Controller Drivers
+ #
++# CONFIG_USB_C67X00_HCD is not set
++# CONFIG_USB_OXU210HP_HCD is not set
+ # CONFIG_USB_ISP116X_HCD is not set
++# CONFIG_USB_ISP1760_HCD is not set
+ CONFIG_USB_OHCI_HCD=y
+ # CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+ # CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+ CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+ # CONFIG_USB_SL811_HCD is not set
+ # CONFIG_USB_R8A66597_HCD is not set
++# CONFIG_USB_HWA_HCD is not set
++# CONFIG_USB_MUSB_HDRC is not set
++# CONFIG_USB_GADGET_MUSB_HDRC is not set
+ #
+ # USB Device Class drivers
+ #
+ # CONFIG_USB_ACM is not set
+ # CONFIG_USB_PRINTER is not set
++# CONFIG_USB_WDM is not set
++# CONFIG_USB_TMC is not set
+ #
+-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
++# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
+ #
+ #
+-# may also be needed; see USB_STORAGE Help for more information
++# also be needed; see USB_STORAGE Help for more info
+ #
+ 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_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_STORAGE_CYPRESS_ATACB is not set
+ # CONFIG_USB_LIBUSUAL is not set
+ #
+@@ -729,15 +1005,10 @@
+ #
+ # 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
+ #
+@@ -746,7 +1017,7 @@
+ # 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_SEVSEG is not set
+ # CONFIG_USB_RIO500 is not set
+ # CONFIG_USB_LEGOTOWER is not set
+ # CONFIG_USB_LCD is not set
+@@ -754,7 +1025,6 @@
+ # 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
+@@ -762,41 +1032,90 @@
+ # 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_ISIGHTFW is not set
++# CONFIG_USB_VST is not set
+ CONFIG_USB_GADGET=y
+-# CONFIG_USB_GADGET_DEBUG is not set
+ # CONFIG_USB_GADGET_DEBUG_FILES is not set
++CONFIG_USB_GADGET_VBUS_DRAW=2
+ CONFIG_USB_GADGET_SELECTED=y
+-# CONFIG_USB_GADGET_AMD5536UDC is not set
++CONFIG_USB_GADGET_AT91=y
++CONFIG_USB_AT91=y
+ # 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_PXA25X is not set
++# CONFIG_USB_GADGET_PXA27X is not set
+ # CONFIG_USB_GADGET_S3C2410 is not set
+-CONFIG_USB_GADGET_AT91=y
+-CONFIG_USB_AT91=y
++# CONFIG_USB_GADGET_IMX is not set
++# CONFIG_USB_GADGET_M66592 is not set
++# CONFIG_USB_GADGET_AMD5536UDC is not set
++# CONFIG_USB_GADGET_FSL_QE is not set
++# CONFIG_USB_GADGET_CI13XXX is not set
++# CONFIG_USB_GADGET_NET2280 is not set
++# CONFIG_USB_GADGET_GOKU 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 is not set
+-CONFIG_USB_GADGETFS=m
++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=m
+ # CONFIG_USB_MIDI_GADGET is not set
+-# CONFIG_MMC is not set
+-# CONFIG_NEW_LEDS is not set
++# CONFIG_USB_G_PRINTER is not set
++CONFIG_USB_CDC_COMPOSITE=m
++
++#
++# OTG and related infrastructure
++#
++# CONFIG_USB_GPIO_VBUS is not set
++# CONFIG_NOP_USB_XCEIV is not set
++CONFIG_MMC=y
++# CONFIG_MMC_DEBUG is not set
++# CONFIG_MMC_UNSAFE_RESUME is not set
++
++#
++# MMC/SD/SDIO Card Drivers
++#
++CONFIG_MMC_BLOCK=y
++CONFIG_MMC_BLOCK_BOUNCE=y
++CONFIG_SDIO_UART=m
++# CONFIG_MMC_TEST is not set
++
++#
++# MMC/SD/SDIO Host Controller Drivers
++#
++# CONFIG_MMC_SDHCI is not set
++CONFIG_MMC_AT91=y
++# CONFIG_MMC_ATMELMCI is not set
++# CONFIG_MMC_SPI is not set
++# CONFIG_MEMSTICK is not set
++# CONFIG_ACCESSIBILITY is not set
++CONFIG_NEW_LEDS=y
++CONFIG_LEDS_CLASS=y
++
++#
++# LED drivers
++#
++CONFIG_LEDS_GPIO=y
++CONFIG_LEDS_GPIO_PLATFORM=y
++# CONFIG_LEDS_DAC124S085 is not set
++
++#
++# LED Triggers
++#
++CONFIG_LEDS_TRIGGERS=y
++CONFIG_LEDS_TRIGGER_TIMER=y
++CONFIG_LEDS_TRIGGER_HEARTBEAT=y
++# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
++CONFIG_LEDS_TRIGGER_GPIO=y
++# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set
++
++#
++# iptables trigger is under Netfilter config (LED target)
++#
+ CONFIG_RTC_LIB=y
+ CONFIG_RTC_CLASS=y
+ CONFIG_RTC_HCTOSYS=y
+@@ -813,38 +1132,42 @@
+ # 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_M41T94 is not set
++# CONFIG_RTC_DRV_DS1305 is not set
++# CONFIG_RTC_DRV_DS1390 is not set
++# CONFIG_RTC_DRV_MAX6902 is not set
++# CONFIG_RTC_DRV_R9701 is not set
++# CONFIG_RTC_DRV_RS5C348 is not set
++# CONFIG_RTC_DRV_DS3234 is not set
+ #
+ # Platform RTC drivers
+ #
+ # CONFIG_RTC_DRV_CMOS is not set
++# CONFIG_RTC_DRV_DS1286 is not set
++# CONFIG_RTC_DRV_DS1511 is not set
+ # CONFIG_RTC_DRV_DS1553 is not set
+-# CONFIG_RTC_DRV_STK17TA8 is not set
+ # CONFIG_RTC_DRV_DS1742 is not set
++# CONFIG_RTC_DRV_STK17TA8 is not set
+ # CONFIG_RTC_DRV_M48T86 is not set
++# CONFIG_RTC_DRV_M48T35 is not set
+ # CONFIG_RTC_DRV_M48T59 is not set
++# CONFIG_RTC_DRV_BQ4802 is not set
+ # CONFIG_RTC_DRV_V3020 is not set
+ #
+ # on-CPU RTC drivers
+ #
+ CONFIG_RTC_DRV_AT91SAM9=y
++CONFIG_RTC_DRV_AT91SAM9_RTT=0
++CONFIG_RTC_DRV_AT91SAM9_GPBR=0
++# CONFIG_DMADEVICES is not set
++# CONFIG_AUXDISPLAY is not set
++# CONFIG_REGULATOR is not set
++# CONFIG_UIO is not set
++# CONFIG_STAGING is not set
+ #
+ # File systems
+@@ -853,24 +1176,28 @@
+ # 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_EXT4_FS is not set
+ # CONFIG_REISERFS_FS is not set
+ # CONFIG_JFS_FS is not set
+ # CONFIG_FS_POSIX_ACL is not set
++CONFIG_FILE_LOCKING=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_BTRFS_FS is not set
++CONFIG_DNOTIFY=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 is not set
+ # CONFIG_FUSE_FS is not set
+ #
++# Caches
++#
++# CONFIG_FSCACHE is not set
++
++#
+ # CD-ROM/DVD Filesystems
+ #
+ # CONFIG_ISO9660_FS is not set
+@@ -880,7 +1207,7 @@
+ # DOS/FAT/NT Filesystems
+ #
+ CONFIG_FAT_FS=y
+-# CONFIG_MSDOS_FS is not set
++CONFIG_MSDOS_FS=y
+ CONFIG_VFAT_FS=y
+ CONFIG_FAT_DEFAULT_CODEPAGE=437
+ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+@@ -891,15 +1218,13 @@
+ #
+ CONFIG_PROC_FS=y
+ CONFIG_PROC_SYSCTL=y
++CONFIG_PROC_PAGE_MONITOR=y
+ CONFIG_SYSFS=y
+ CONFIG_TMPFS=y
+ # CONFIG_TMPFS_POSIX_ACL is not set
+ # CONFIG_HUGETLB_PAGE is not set
+ # CONFIG_CONFIGFS_FS is not set
+-
+-#
+-# Miscellaneous filesystems
+-#
++CONFIG_MISC_FILESYSTEMS=y
+ # CONFIG_ADFS_FS is not set
+ # CONFIG_AFFS_FS is not set
+ # CONFIG_HFS_FS is not set
+@@ -907,15 +1232,42 @@
+ # CONFIG_BEFS_FS is not set
+ # CONFIG_BFS_FS is not set
+ # CONFIG_EFS_FS is not set
+-CONFIG_CRAMFS=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=m
++CONFIG_SQUASHFS=m
++CONFIG_SQUASHFS_EMBEDDED=y
++CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
+ # CONFIG_VXFS_FS is not set
++# CONFIG_MINIX_FS is not set
++# CONFIG_OMFS_FS is not set
+ # CONFIG_HPFS_FS is not set
+ # CONFIG_QNX4FS_FS is not set
++# CONFIG_ROMFS_FS is not set
+ # CONFIG_SYSV_FS is not set
+ # CONFIG_UFS_FS is not set
++# CONFIG_NILFS2_FS is not set
+ CONFIG_NETWORK_FILESYSTEMS=y
+-# CONFIG_NFS_FS is not set
++CONFIG_NFS_FS=y
++CONFIG_NFS_V3=y
++# CONFIG_NFS_V3_ACL is not set
++# CONFIG_NFS_V4 is not set
+ # CONFIG_NFSD is not set
++CONFIG_LOCKD=y
++CONFIG_LOCKD_V4=y
++CONFIG_NFS_COMMON=y
++CONFIG_SUNRPC=y
++# CONFIG_RPCSEC_GSS_KRB5 is not set
++# CONFIG_RPCSEC_GSS_SPKM3 is not set
+ # CONFIG_SMB_FS is not set
+ # CONFIG_CIFS is not set
+ # CONFIG_NCP_FS is not set
+@@ -963,14 +1315,11 @@
+ # 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_ISO8859_15=y
+ # CONFIG_NLS_KOI8_R is not set
+ # CONFIG_NLS_KOI8_U is not set
+-# CONFIG_NLS_UTF8 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
+@@ -978,63 +1327,161 @@
+ # CONFIG_PRINTK_TIME is not set
+ CONFIG_ENABLE_WARN_DEPRECATED=y
+ CONFIG_ENABLE_MUST_CHECK=y
++CONFIG_FRAME_WARN=1024
+ # 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_KERNEL 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_DEBUG_MEMORY_INIT=y
++# CONFIG_RCU_CPU_STALL_DETECTOR is not set
++# CONFIG_LATENCYTOP is not set
++# CONFIG_SYSCTL_SYSCALL_CHECK is not set
++CONFIG_HAVE_FUNCTION_TRACER=y
++CONFIG_TRACING_SUPPORT=y
++
++#
++# Tracers
++#
++# CONFIG_FUNCTION_TRACER is not set
++# CONFIG_IRQSOFF_TRACER is not set
++# CONFIG_SCHED_TRACER is not set
++# CONFIG_CONTEXT_SWITCH_TRACER is not set
++# CONFIG_EVENT_TRACER is not set
++# CONFIG_BOOT_TRACER is not set
++# CONFIG_TRACE_BRANCH_PROFILING is not set
++# CONFIG_STACK_TRACER is not set
++# CONFIG_KMEMTRACE is not set
++# CONFIG_WORKQUEUE_TRACER is not set
++# CONFIG_BLK_DEV_IO_TRACE is not set
+ # CONFIG_SAMPLES is not set
++CONFIG_HAVE_ARCH_KGDB=y
++CONFIG_ARM_UNWIND=y
+ 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_SECURITYFS is not set
+ # CONFIG_SECURITY_FILE_CAPABILITIES is not set
+-# CONFIG_CRYPTO is not set
++CONFIG_CRYPTO=y
++
++#
++# Crypto core or helper
++#
++# CONFIG_CRYPTO_FIPS is not set
++CONFIG_CRYPTO_ALGAPI=y
++CONFIG_CRYPTO_ALGAPI2=y
++CONFIG_CRYPTO_AEAD2=y
++CONFIG_CRYPTO_BLKCIPHER=y
++CONFIG_CRYPTO_BLKCIPHER2=y
++CONFIG_CRYPTO_HASH2=y
++CONFIG_CRYPTO_RNG2=y
++CONFIG_CRYPTO_PCOMP=y
++CONFIG_CRYPTO_MANAGER=y
++CONFIG_CRYPTO_MANAGER2=y
++# CONFIG_CRYPTO_GF128MUL is not set
++# CONFIG_CRYPTO_NULL is not set
++CONFIG_CRYPTO_WORKQUEUE=y
++# CONFIG_CRYPTO_CRYPTD is not set
++# CONFIG_CRYPTO_AUTHENC is not set
++# CONFIG_CRYPTO_TEST is not set
++
++#
++# Authenticated Encryption with Associated Data
++#
++# CONFIG_CRYPTO_CCM is not set
++# CONFIG_CRYPTO_GCM is not set
++# CONFIG_CRYPTO_SEQIV is not set
++
++#
++# Block modes
++#
++# CONFIG_CRYPTO_CBC is not set
++# CONFIG_CRYPTO_CTR is not set
++# CONFIG_CRYPTO_CTS is not set
++CONFIG_CRYPTO_ECB=y
++# CONFIG_CRYPTO_LRW is not set
++# CONFIG_CRYPTO_PCBC is not set
++# CONFIG_CRYPTO_XTS is not set
++
++#
++# Hash modes
++#
++# CONFIG_CRYPTO_HMAC is not set
++# CONFIG_CRYPTO_XCBC is not set
++
++#
++# Digest
++#
++# CONFIG_CRYPTO_CRC32C is not set
++# CONFIG_CRYPTO_MD4 is not set
++# CONFIG_CRYPTO_MD5 is not set
++# CONFIG_CRYPTO_MICHAEL_MIC is not set
++# CONFIG_CRYPTO_RMD128 is not set
++# CONFIG_CRYPTO_RMD160 is not set
++# CONFIG_CRYPTO_RMD256 is not set
++# CONFIG_CRYPTO_RMD320 is not set
++# CONFIG_CRYPTO_SHA1 is not set
++# CONFIG_CRYPTO_SHA256 is not set
++# CONFIG_CRYPTO_SHA512 is not set
++# CONFIG_CRYPTO_TGR192 is not set
++# CONFIG_CRYPTO_WP512 is not set
++
++#
++# Ciphers
++#
++CONFIG_CRYPTO_AES=y
++# CONFIG_CRYPTO_ANUBIS is not set
++CONFIG_CRYPTO_ARC4=y
++# CONFIG_CRYPTO_BLOWFISH is not set
++# CONFIG_CRYPTO_CAMELLIA is not set
++# CONFIG_CRYPTO_CAST5 is not set
++# CONFIG_CRYPTO_CAST6 is not set
++# CONFIG_CRYPTO_DES is not set
++# CONFIG_CRYPTO_FCRYPT is not set
++# CONFIG_CRYPTO_KHAZAD is not set
++# CONFIG_CRYPTO_SALSA20 is not set
++# CONFIG_CRYPTO_SEED is not set
++# CONFIG_CRYPTO_SERPENT is not set
++# CONFIG_CRYPTO_TEA is not set
++# CONFIG_CRYPTO_TWOFISH is not set
++
++#
++# Compression
++#
++# CONFIG_CRYPTO_DEFLATE is not set
++# CONFIG_CRYPTO_ZLIB is not set
++# CONFIG_CRYPTO_LZO is not set
++
++#
++# Random Number Generation
++#
++# CONFIG_CRYPTO_ANSI_CPRNG is not set
++# CONFIG_CRYPTO_HW is not set
++# CONFIG_BINARY_PRINTF is not set
+ #
+ # Library routines
+ #
+ CONFIG_BITREVERSE=y
++CONFIG_GENERIC_FIND_LAST_BIT=y
+ # CONFIG_CRC_CCITT is not set
+ # CONFIG_CRC16 is not set
+-# CONFIG_CRC_ITU_T is not set
++# CONFIG_CRC_T10DIF is not set
++CONFIG_CRC_ITU_T=m
+ CONFIG_CRC32=y
+ # CONFIG_CRC7 is not set
+ # CONFIG_LIBCRC32C is not set
+ CONFIG_ZLIB_INFLATE=y
+-CONFIG_PLIST=y
++CONFIG_ZLIB_DEFLATE=y
++CONFIG_DECOMPRESS_GZIP=y
++CONFIG_DECOMPRESS_BZIP2=y
++CONFIG_DECOMPRESS_LZMA=y
+ CONFIG_HAS_IOMEM=y
+ CONFIG_HAS_IOPORT=y
+ CONFIG_HAS_DMA=y
++CONFIG_NLATTR=y
+Index: linux-2.6.30/arch/arm/configs/at91sam9rlek_defconfig
+===================================================================
+--- linux-2.6.30.orig/arch/arm/configs/at91sam9rlek_defconfig  2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/arch/arm/configs/at91sam9rlek_defconfig       2011-02-01 16:40:30.200115764 +0100
+@@ -1,17 +1,18 @@
+ #
+ # Automatically generated make config: don't edit
+-# Linux kernel version: 2.6.24-rc7
+-# Tue Jan  8 22:24:14 2008
++# Linux kernel version: 2.6.30
++# Tue Oct 13 12:57:29 2009
+ #
+ 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_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_HAVE_LATENCYTOP_SUPPORT=y
+ CONFIG_LOCKDEP_SUPPORT=y
+ CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+ CONFIG_HARDIRQS_SW_RESEND=y
+@@ -21,7 +22,7 @@
+ # CONFIG_ARCH_HAS_ILOG2_U64 is not set
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
+-CONFIG_ZONE_DMA=y
++CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
+ CONFIG_VECTORS_BASE=0xffff0000
+ CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+@@ -39,57 +40,82 @@
+ # 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
++
++#
++# RCU Subsystem
++#
++CONFIG_CLASSIC_RCU=y
++# CONFIG_TREE_RCU is not set
++# CONFIG_PREEMPT_RCU is not set
++# CONFIG_TREE_RCU_TRACE is not set
++# CONFIG_PREEMPT_RCU_TRACE is not set
+ # CONFIG_IKCONFIG is not set
+ CONFIG_LOG_BUF_SHIFT=14
++# CONFIG_GROUP_SCHED is not set
+ # 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_SYSFS_DEPRECATED_V2=y
+ # CONFIG_RELAY is not set
++CONFIG_NAMESPACES=y
++# CONFIG_UTS_NS is not set
++# CONFIG_IPC_NS is not set
++# CONFIG_USER_NS is not set
++# CONFIG_PID_NS is not set
++# CONFIG_NET_NS is not set
+ CONFIG_BLK_DEV_INITRD=y
+ CONFIG_INITRAMFS_SOURCE=""
++CONFIG_RD_GZIP=y
++CONFIG_RD_BZIP2=y
++CONFIG_RD_LZMA=y
+ CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+ CONFIG_SYSCTL=y
++CONFIG_ANON_INODES=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_STRIP_ASM_SYMS=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=y
+ CONFIG_SIGNALFD=y
++CONFIG_TIMERFD=y
+ CONFIG_EVENTFD=y
+ CONFIG_SHMEM=y
++CONFIG_AIO=y
+ CONFIG_VM_EVENT_COUNTERS=y
++CONFIG_COMPAT_BRK=y
+ CONFIG_SLAB=y
+ # CONFIG_SLUB is not set
+ # CONFIG_SLOB is not set
++# CONFIG_PROFILING is not set
++# CONFIG_MARKERS is not set
++CONFIG_HAVE_OPROFILE=y
++# CONFIG_KPROBES is not set
++CONFIG_HAVE_KPROBES=y
++CONFIG_HAVE_KRETPROBES=y
++CONFIG_HAVE_CLK=y
++# CONFIG_SLOW_WORK is not set
++CONFIG_HAVE_GENERIC_DMA_COHERENT=y
+ CONFIG_SLABINFO=y
+ CONFIG_RT_MUTEXES=y
+-# CONFIG_TINY_SHMEM is not set
+ CONFIG_BASE_SMALL=0
+ CONFIG_MODULES=y
++# CONFIG_MODULE_FORCE_LOAD is not set
+ CONFIG_MODULE_UNLOAD=y
+ # CONFIG_MODULE_FORCE_UNLOAD is not set
+ # CONFIG_MODVERSIONS 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
++# CONFIG_BLK_DEV_INTEGRITY is not set
+ #
+ # IO Schedulers
+@@ -103,6 +129,7 @@
+ # CONFIG_DEFAULT_CFQ is not set
+ # CONFIG_DEFAULT_NOOP is not set
+ CONFIG_DEFAULT_IOSCHED="anticipatory"
++CONFIG_FREEZER=y
+ #
+ # System Type
+@@ -112,11 +139,10 @@
+ # 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_GEMINI is not set
+ # CONFIG_ARCH_FOOTBRIDGE is not set
+ # CONFIG_ARCH_NETX is not set
+ # CONFIG_ARCH_H720X is not set
+@@ -128,26 +154,26 @@
+ # CONFIG_ARCH_IXP2000 is not set
+ # CONFIG_ARCH_IXP4XX is not set
+ # CONFIG_ARCH_L7200 is not set
++# CONFIG_ARCH_KIRKWOOD is not set
+ # CONFIG_ARCH_KS8695 is not set
+ # CONFIG_ARCH_NS9XXX is not set
++# CONFIG_ARCH_LOKI is not set
++# CONFIG_ARCH_MV78XX0 is not set
+ # CONFIG_ARCH_MXC is not set
++# CONFIG_ARCH_ORION5X is not set
+ # CONFIG_ARCH_PNX4008 is not set
+ # CONFIG_ARCH_PXA is not set
++# CONFIG_ARCH_MMP is not set
+ # CONFIG_ARCH_RPC is not set
+ # CONFIG_ARCH_SA1100 is not set
+ # CONFIG_ARCH_S3C2410 is not set
++# CONFIG_ARCH_S3C64XX is not set
+ # CONFIG_ARCH_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
+-#
++# CONFIG_ARCH_MSM is not set
++# CONFIG_ARCH_W90X900 is not set
+ #
+ # Atmel AT91 System-on-Chip
+@@ -155,8 +181,13 @@
+ # CONFIG_ARCH_AT91RM9200 is not set
+ # CONFIG_ARCH_AT91SAM9260 is not set
+ # CONFIG_ARCH_AT91SAM9261 is not set
++# CONFIG_ARCH_AT91SAM9G10 is not set
+ # CONFIG_ARCH_AT91SAM9263 is not set
+ CONFIG_ARCH_AT91SAM9RL=y
++# CONFIG_ARCH_AT91SAM9G20 is not set
++# CONFIG_ARCH_AT91SAM9G45 is not set
++# CONFIG_ARCH_AT91CAP9 is not set
++# CONFIG_ARCH_AT572D940HF is not set
+ # CONFIG_ARCH_AT91X40 is not set
+ CONFIG_AT91_PMC_UNIT=y
+@@ -173,8 +204,15 @@
+ # AT91 Feature Selections
+ #
+ CONFIG_AT91_PROGRAMMABLE_CLOCKS=y
+-# CONFIG_ATMEL_TCLIB is not set
++# CONFIG_AT91_SLOW_CLOCK is not set
+ CONFIG_AT91_TIMER_HZ=100
++CONFIG_AT91_EARLY_DBGU=y
++# CONFIG_AT91_EARLY_USART0 is not set
++# CONFIG_AT91_EARLY_USART1 is not set
++# CONFIG_AT91_EARLY_USART2 is not set
++# CONFIG_AT91_EARLY_USART3 is not set
++# CONFIG_AT91_EARLY_USART4 is not set
++# CONFIG_AT91_EARLY_USART5 is not set
+ #
+ # Processor Type
+@@ -183,6 +221,7 @@
+ CONFIG_CPU_ARM926T=y
+ CONFIG_CPU_32v5=y
+ CONFIG_CPU_ABRT_EV5TJ=y
++CONFIG_CPU_PABRT_NOIFAR=y
+ CONFIG_CPU_CACHE_VIVT=y
+ CONFIG_CPU_COPY_V4WB=y
+ CONFIG_CPU_TLB_V4WBI=y
+@@ -192,7 +231,7 @@
+ #
+ # Processor Features
+ #
+-# CONFIG_ARM_THUMB is not set
++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
+@@ -209,25 +248,37 @@
+ #
+ # 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_VMSPLIT_3G=y
++# CONFIG_VMSPLIT_2G is not set
++# CONFIG_VMSPLIT_1G is not set
++CONFIG_PAGE_OFFSET=0xC0000000
+ # CONFIG_PREEMPT is not set
+ CONFIG_HZ=100
+-# CONFIG_AEABI is not set
+-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
++CONFIG_AEABI=y
++CONFIG_OABI_COMPAT=y
++# CONFIG_ARCH_HAS_HOLES_MEMORYMODEL is not set
++# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
++# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
++# CONFIG_HIGHMEM is not set
+ CONFIG_SELECT_MEMORY_MODEL=y
+ CONFIG_FLATMEM_MANUAL=y
+ # CONFIG_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_PAGEFLAGS_EXTENDED=y
+ CONFIG_SPLIT_PTLOCK_CPUS=4096
+-# CONFIG_RESOURCES_64BIT is not set
+-CONFIG_ZONE_DMA_FLAG=1
+-CONFIG_BOUNCE=y
++# CONFIG_PHYS_ADDR_T_64BIT is not set
++CONFIG_ZONE_DMA_FLAG=0
+ CONFIG_VIRT_TO_BUS=y
+-# CONFIG_LEDS is not set
++CONFIG_UNEVICTABLE_LRU=y
++CONFIG_HAVE_MLOCK=y
++CONFIG_HAVE_MLOCKED_PAGE_BIT=y
++CONFIG_LEDS=y
++CONFIG_LEDS_CPU=y
+ CONFIG_ALIGNMENT_TRAP=y
+ #
+@@ -235,11 +286,16 @@
+ #
+ CONFIG_ZBOOT_ROM_TEXT=0x0
+ CONFIG_ZBOOT_ROM_BSS=0x0
+-CONFIG_CMDLINE="mem=64M console=ttyS0,115200 initrd=0x21100000,17105363 root=/dev/ram0 rw"
++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
+ #
++# CPU Power Management
++#
++# CONFIG_CPU_IDLE is not set
++
++#
+ # Floating point emulation
+ #
+@@ -255,32 +311,62 @@
+ # Userspace binary formats
+ #
+ CONFIG_BINFMT_ELF=y
++# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
++CONFIG_HAVE_AOUT=y
+ # CONFIG_BINFMT_AOUT is not set
+ # CONFIG_BINFMT_MISC is not set
+-# CONFIG_ARTHUR is not set
+ #
+ # Power management options
+ #
+-# CONFIG_PM is not set
+-CONFIG_SUSPEND_UP_POSSIBLE=y
+-
+-#
+-# Networking
+-#
++CONFIG_PM=y
++# CONFIG_PM_DEBUG is not set
++CONFIG_PM_SLEEP=y
++CONFIG_SUSPEND=y
++CONFIG_SUSPEND_FREEZER=y
++# CONFIG_APM_EMULATION is not set
++CONFIG_ARCH_SUSPEND_POSSIBLE=y
+ CONFIG_NET=y
+ #
+ # Networking options
+ #
+-# CONFIG_PACKET is not set
++CONFIG_PACKET=y
++# CONFIG_PACKET_MMAP is not set
+ CONFIG_UNIX=y
+ # CONFIG_NET_KEY is not set
+-# CONFIG_INET 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_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_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_NET_DSA is not set
+ # CONFIG_VLAN_8021Q is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_LLC2 is not set
+@@ -288,24 +374,42 @@
+ # CONFIG_ATALK is not set
+ # CONFIG_X25 is not set
+ # CONFIG_LAPB is not set
++# CONFIG_ECONET is not set
+ # CONFIG_WAN_ROUTER is not set
++# CONFIG_PHONET is not set
+ # CONFIG_NET_SCHED is not set
++# CONFIG_DCB is not set
+ #
+ # Network testing
+ #
+ # CONFIG_NET_PKTGEN is not set
+ # CONFIG_HAMRADIO is not set
++# CONFIG_CAN is not set
+ # CONFIG_IRDA is not set
+ # CONFIG_BT is not set
+-
+-#
+-# Wireless
+-#
+-# CONFIG_CFG80211 is not set
+-# CONFIG_WIRELESS_EXT is not set
+-# CONFIG_MAC80211 is not set
+-# CONFIG_IEEE80211 is not set
++# CONFIG_AF_RXRPC is not set
++CONFIG_WIRELESS=y
++CONFIG_CFG80211=y
++# CONFIG_CFG80211_REG_DEBUG is not set
++# CONFIG_WIRELESS_OLD_REGULATORY is not set
++CONFIG_WIRELESS_EXT=y
++CONFIG_WIRELESS_EXT_SYSFS=y
++CONFIG_LIB80211=y
++# CONFIG_LIB80211_DEBUG is not set
++CONFIG_MAC80211=y
++
++#
++# Rate control algorithm selection
++#
++CONFIG_MAC80211_RC_MINSTREL=y
++# CONFIG_MAC80211_RC_DEFAULT_PID is not set
++CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
++CONFIG_MAC80211_RC_DEFAULT="minstrel"
++# CONFIG_MAC80211_MESH is not set
++# CONFIG_MAC80211_LEDS is not set
++# CONFIG_MAC80211_DEBUG_MENU is not set
++# CONFIG_WIMAX is not set
+ # CONFIG_RFKILL is not set
+ # CONFIG_NET_9P is not set
+@@ -319,18 +423,20 @@
+ 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_FW_LOADER=y
++CONFIG_FIRMWARE_IN_KERNEL=y
++CONFIG_EXTRA_FIRMWARE=""
+ # CONFIG_SYS_HYPERVISOR is not set
+ # CONFIG_CONNECTOR is not set
+ CONFIG_MTD=y
+ # CONFIG_MTD_DEBUG is not set
+-CONFIG_MTD_CONCAT=y
++# CONFIG_MTD_CONCAT is not set
+ CONFIG_MTD_PARTITIONS=y
++# CONFIG_MTD_TESTS is not set
+ # CONFIG_MTD_REDBOOT_PARTS is not set
+ CONFIG_MTD_CMDLINE_PARTS=y
+ # CONFIG_MTD_AFS_PARTS is not set
++# CONFIG_MTD_AR7_PARTS is not set
+ #
+ # User Modules And Translation Layers
+@@ -374,6 +480,8 @@
+ # Self-contained MTD device drivers
+ #
+ CONFIG_MTD_DATAFLASH=y
++# CONFIG_MTD_DATAFLASH_WRITE_VERIFY is not set
++# CONFIG_MTD_DATAFLASH_OTP is not set
+ # CONFIG_MTD_M25P80 is not set
+ # CONFIG_MTD_SLRAM is not set
+ # CONFIG_MTD_PHRAM is not set
+@@ -390,14 +498,23 @@
+ # 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_GPIO is not set
+ CONFIG_MTD_NAND_IDS=y
+ # CONFIG_MTD_NAND_DISKONCHIP is not set
+ CONFIG_MTD_NAND_ATMEL=y
++CONFIG_MTD_NAND_ATMEL_ECC_SOFT=y
++# CONFIG_MTD_NAND_ATMEL_ECC_HW is not set
++# CONFIG_MTD_NAND_ATMEL_ECC_NONE is not set
+ # CONFIG_MTD_NAND_NANDSIM is not set
+ # CONFIG_MTD_NAND_PLATFORM is not set
+ # CONFIG_MTD_ONENAND is not set
+ #
++# LPDDR flash memory drivers
++#
++# CONFIG_MTD_LPDDR is not set
++
++#
+ # UBI - Unsorted block images
+ #
+ # CONFIG_MTD_UBI is not set
+@@ -409,13 +526,26 @@
+ # CONFIG_BLK_DEV_NBD is not set
+ CONFIG_BLK_DEV_RAM=y
+ CONFIG_BLK_DEV_RAM_COUNT=4
+-CONFIG_BLK_DEV_RAM_SIZE=24576
+-CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
++CONFIG_BLK_DEV_RAM_SIZE=8192
++# CONFIG_BLK_DEV_XIP is not set
+ # CONFIG_CDROM_PKTCDVD is not set
+ # CONFIG_ATA_OVER_ETH is not set
+ CONFIG_MISC_DEVICES=y
++CONFIG_ATMEL_PWM=y
++CONFIG_ATMEL_TCLIB=y
++CONFIG_ATMEL_TCB_CLKSRC=y
++CONFIG_ATMEL_TCB_CLKSRC_BLOCK=0
++# CONFIG_ATMEL_SSC is not set
++# CONFIG_ENCLOSURE_SERVICES is not set
++# CONFIG_C2PORT is not set
++
++#
++# EEPROM support
++#
++# CONFIG_EEPROM_AT25 is not set
+ # CONFIG_EEPROM_93CX6 is not set
+-CONFIG_ATMEL_SSC=y
++CONFIG_HAVE_IDE=y
++# CONFIG_IDE is not set
+ #
+ # SCSI device support
+@@ -454,11 +584,49 @@
+ # 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_SCSI_DEBUG is not set
++# CONFIG_SCSI_LOWLEVEL is not set
++# CONFIG_SCSI_DH is not set
++# CONFIG_SCSI_OSD_INITIATOR is not set
+ # CONFIG_ATA is not set
+ # CONFIG_MD is not set
+-# CONFIG_NETDEVICES is not set
++CONFIG_NETDEVICES=y
++# CONFIG_COMPAT_NET_DEV_OPS 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_WLAN_PRE80211 is not set
++CONFIG_WLAN_80211=y
++CONFIG_LIBERTAS=m
++CONFIG_LIBERTAS_SDIO=m
++# CONFIG_LIBERTAS_SPI is not set
++# CONFIG_LIBERTAS_DEBUG is not set
++# CONFIG_LIBERTAS_THINFIRM is not set
++# CONFIG_MAC80211_HWSIM 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
++
++#
++# Enable WiMAX (Networking options) to see the WiMAX drivers
++#
++# CONFIG_WAN is not set
++# CONFIG_PPP is not set
++# CONFIG_SLIP is not set
++# CONFIG_NETCONSOLE is not set
++# CONFIG_NETPOLL is not set
++# CONFIG_NET_POLL_CONTROLLER is not set
+ # CONFIG_ISDN is not set
+ #
+@@ -473,8 +641,8 @@
+ #
+ CONFIG_INPUT_MOUSEDEV=y
+ # CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+-CONFIG_INPUT_MOUSEDEV_SCREEN_X=320
+-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=240
++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
+@@ -482,23 +650,36 @@
+ #
+ # Input Device Drivers
+ #
+-# CONFIG_INPUT_KEYBOARD is not set
++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_INPUT_MOUSE is not set
+ # CONFIG_INPUT_JOYSTICK is not set
+ # CONFIG_INPUT_TABLET is not set
+ CONFIG_INPUT_TOUCHSCREEN=y
+ # CONFIG_TOUCHSCREEN_ADS7846 is not set
++# CONFIG_TOUCHSCREEN_AD7877 is not set
++# CONFIG_TOUCHSCREEN_AD7879_SPI is not set
++# CONFIG_TOUCHSCREEN_AD7879 is not set
+ # CONFIG_TOUCHSCREEN_FUJITSU is not set
+ # CONFIG_TOUCHSCREEN_GUNZE is not set
+ # CONFIG_TOUCHSCREEN_ELO is not set
++# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
+ # CONFIG_TOUCHSCREEN_MTOUCH is not set
++# CONFIG_TOUCHSCREEN_INEXIO 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_ATMEL_TSADCC=y
+-# CONFIG_TOUCHSCREEN_UCB1400 is not set
++# CONFIG_TOUCHSCREEN_WM97XX is not set
+ # CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
++# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
+ # CONFIG_INPUT_MISC is not set
+ #
+@@ -511,9 +692,11 @@
+ # Character devices
+ #
+ CONFIG_VT=y
++CONFIG_CONSOLE_TRANSLATIONS=y
+ CONFIG_VT_CONSOLE=y
+ CONFIG_HW_CONSOLE=y
+ # CONFIG_VT_HW_CONSOLE_BINDING is not set
++CONFIG_DEVKMEM=y
+ # CONFIG_SERIAL_NONSTANDARD is not set
+ #
+@@ -526,103 +709,99 @@
+ #
+ CONFIG_SERIAL_ATMEL=y
+ CONFIG_SERIAL_ATMEL_CONSOLE=y
++CONFIG_SERIAL_ATMEL_PDC=y
+ # CONFIG_SERIAL_ATMEL_TTYAT is not set
++# CONFIG_SERIAL_MAX3100 is not set
+ CONFIG_SERIAL_CORE=y
+ CONFIG_SERIAL_CORE_CONSOLE=y
+ CONFIG_UNIX98_PTYS=y
++# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
+ CONFIG_LEGACY_PTYS=y
+-CONFIG_LEGACY_PTY_COUNT=256
++CONFIG_LEGACY_PTY_COUNT=4
+ # CONFIG_IPMI_HANDLER is not set
+-# CONFIG_HW_RANDOM is not set
+-# CONFIG_NVRAM is not set
++CONFIG_HW_RANDOM=y
++# CONFIG_HW_RANDOM_TIMERIOMEM is not set
+ # CONFIG_R3964 is not set
+ # CONFIG_RAW_DRIVER is not set
+ # CONFIG_TCG_TPM is not set
+-CONFIG_I2C=y
+-CONFIG_I2C_BOARDINFO=y
+-CONFIG_I2C_CHARDEV=y
++# CONFIG_I2C is not set
++CONFIG_SPI=y
++CONFIG_SPI_MASTER=y
+ #
+-# I2C Algorithms
++# SPI Master Controller Drivers
+ #
+-CONFIG_I2C_ALGOBIT=y
+-# CONFIG_I2C_ALGOPCF is not set
+-# CONFIG_I2C_ALGOPCA is not set
++CONFIG_SPI_ATMEL=y
++# CONFIG_SPI_BITBANG is not set
++# CONFIG_SPI_GPIO is not set
+ #
+-# I2C Hardware Bus support
++# SPI Protocol Masters
+ #
+-CONFIG_I2C_GPIO=y
+-# 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 is not set
++CONFIG_SPI_SPIDEV=y
++# CONFIG_SPI_TLE62X0 is not set
++CONFIG_ARCH_REQUIRE_GPIOLIB=y
++CONFIG_GPIOLIB=y
++# CONFIG_GPIO_SYSFS is not set
+ #
+-# Miscellaneous I2C Chip support
++# Memory mapped GPIO expanders:
+ #
+-# CONFIG_SENSORS_DS1337 is not set
+-# CONFIG_SENSORS_DS1374 is not set
+-# CONFIG_DS1682 is not set
+-# CONFIG_EEPROM_LEGACY 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
++# I2C GPIO expanders:
+ #
+-CONFIG_SPI=y
+-# CONFIG_SPI_DEBUG is not set
+-CONFIG_SPI_MASTER=y
+ #
+-# SPI Master Controller Drivers
++# PCI GPIO expanders:
+ #
+-CONFIG_SPI_ATMEL=y
+-# CONFIG_SPI_BITBANG is not set
+ #
+-# SPI Protocol Masters
++# SPI GPIO expanders:
+ #
+-# CONFIG_EEPROM_AT25 is not set
+-# CONFIG_SPI_SPIDEV is not set
+-# CONFIG_SPI_TLE62X0 is not set
++# CONFIG_GPIO_MAX7301 is not set
++# CONFIG_GPIO_MCP23S08 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_AT91SAM9X_WATCHDOG=y
++# CONFIG_THERMAL is not set
++# CONFIG_THERMAL_HWMON is not set
++# CONFIG_WATCHDOG is not set
++CONFIG_SSB_POSSIBLE=y
+ #
+ # Sonics Silicon Backplane
+ #
+-CONFIG_SSB_POSSIBLE=y
+ # CONFIG_SSB is not set
+ #
+ # Multifunction device drivers
+ #
++# CONFIG_MFD_CORE is not set
+ # CONFIG_MFD_SM501 is not set
++# CONFIG_MFD_ASIC3 is not set
++# CONFIG_HTC_EGPIO is not set
++# CONFIG_HTC_PASIC3 is not set
++# CONFIG_UCB1400_CORE is not set
++# CONFIG_MFD_TMIO is not set
++# CONFIG_MFD_T7L66XB is not set
++# CONFIG_MFD_TC6387XB is not set
++# CONFIG_MFD_TC6393XB is not set
+ #
+ # Multimedia devices
+ #
++
++#
++# Multimedia core support
++#
+ # CONFIG_VIDEO_DEV is not set
++# CONFIG_DVB_CORE is not set
++# CONFIG_VIDEO_MEDIA is not set
++
++#
++# Multimedia drivers
++#
+ # CONFIG_DAB is not set
+ #
+@@ -633,6 +812,7 @@
+ CONFIG_FB=y
+ # CONFIG_FIRMWARE_EDID is not set
+ # CONFIG_FB_DDC is not set
++# CONFIG_FB_BOOT_VESA_SUPPORT is not set
+ CONFIG_FB_CFB_FILLRECT=y
+ CONFIG_FB_CFB_COPYAREA=y
+ CONFIG_FB_CFB_IMAGEBLIT=y
+@@ -640,8 +820,8 @@
+ # CONFIG_FB_SYS_FILLRECT is not set
+ # CONFIG_FB_SYS_COPYAREA is not set
+ # CONFIG_FB_SYS_IMAGEBLIT is not set
++# CONFIG_FB_FOREIGN_ENDIAN is not set
+ # CONFIG_FB_SYS_FOPS is not set
+-CONFIG_FB_DEFERRED_IO=y
+ # CONFIG_FB_SVGALIB is not set
+ # CONFIG_FB_MACMODES is not set
+ # CONFIG_FB_BACKLIGHT is not set
+@@ -655,7 +835,15 @@
+ # CONFIG_FB_S1D13XXX is not set
+ CONFIG_FB_ATMEL=y
+ # CONFIG_FB_VIRTUAL is not set
+-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
++# CONFIG_FB_METRONOME is not set
++# CONFIG_FB_MB862XX is not set
++# CONFIG_FB_BROADSHEET is not set
++CONFIG_BACKLIGHT_LCD_SUPPORT=y
++# CONFIG_LCD_CLASS_DEVICE is not set
++CONFIG_BACKLIGHT_CLASS_DEVICE=y
++CONFIG_BACKLIGHT_ATMEL_LCDC=y
++# CONFIG_BACKLIGHT_ATMEL_PWM is not set
++# CONFIG_BACKLIGHT_GENERIC is not set
+ #
+ # Display device support
+@@ -669,46 +857,139 @@
+ CONFIG_DUMMY_CONSOLE=y
+ # CONFIG_FRAMEBUFFER_CONSOLE is not set
+ # CONFIG_LOGO is not set
+-
+-#
+-# Sound
+-#
+-# CONFIG_SOUND is not set
++CONFIG_SOUND=y
++CONFIG_SOUND_OSS_CORE=y
++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 is not set
++# 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
++CONFIG_SND_VMASTER=y
++CONFIG_SND_AC97_CODEC=y
++# CONFIG_SND_DRIVERS is not set
++# CONFIG_SND_ARM is not set
++
++#
++# Atmel devices (AVR32 and AT91)
++#
++CONFIG_SND_ATMEL_AC97C=y
++# CONFIG_SND_SPI is not set
++# CONFIG_SND_SOC is not set
++# 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
++# CONFIG_HID_PID is not set
++
++#
++# Special HID drivers
++#
+ 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
++# CONFIG_USB_MUSB_HDRC is not set
++# CONFIG_USB_GADGET_MUSB_HDRC is not set
+ #
+-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
++# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
+ #
++CONFIG_USB_GADGET=y
++# CONFIG_USB_GADGET_DEBUG_FILES is not set
++CONFIG_USB_GADGET_VBUS_DRAW=2
++CONFIG_USB_GADGET_SELECTED=y
++# CONFIG_USB_GADGET_AT91 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_LH7A40X is not set
++# CONFIG_USB_GADGET_OMAP is not set
++# CONFIG_USB_GADGET_PXA25X is not set
++# CONFIG_USB_GADGET_PXA27X is not set
++# CONFIG_USB_GADGET_S3C2410 is not set
++# CONFIG_USB_GADGET_IMX is not set
++# CONFIG_USB_GADGET_M66592 is not set
++# CONFIG_USB_GADGET_AMD5536UDC is not set
++# CONFIG_USB_GADGET_FSL_QE is not set
++# CONFIG_USB_GADGET_CI13XXX is not set
++# CONFIG_USB_GADGET_NET2280 is not set
++# CONFIG_USB_GADGET_GOKU 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=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=m
++# CONFIG_USB_MIDI_GADGET is not set
++# CONFIG_USB_G_PRINTER is not set
++CONFIG_USB_CDC_COMPOSITE=m
+ #
+-# USB Gadget Support
++# OTG and related infrastructure
+ #
+-# CONFIG_USB_GADGET is not set
++# CONFIG_USB_GPIO_VBUS is not set
++# CONFIG_NOP_USB_XCEIV is not set
+ CONFIG_MMC=y
+ # CONFIG_MMC_DEBUG is not set
+ # CONFIG_MMC_UNSAFE_RESUME is not set
+ #
+-# MMC/SD Card Drivers
++# MMC/SD/SDIO Card Drivers
+ #
+ CONFIG_MMC_BLOCK=y
+ CONFIG_MMC_BLOCK_BOUNCE=y
+-# CONFIG_SDIO_UART is not set
++CONFIG_SDIO_UART=m
++# CONFIG_MMC_TEST is not set
+ #
+-# MMC/SD Host Controller Drivers
++# MMC/SD/SDIO Host Controller Drivers
+ #
++# CONFIG_MMC_SDHCI is not set
+ CONFIG_MMC_AT91=y
++# CONFIG_MMC_ATMELMCI is not set
+ # CONFIG_MMC_SPI is not set
+-# CONFIG_NEW_LEDS is not set
++# CONFIG_MEMSTICK is not set
++# CONFIG_ACCESSIBILITY is not set
++CONFIG_NEW_LEDS=y
++CONFIG_LEDS_CLASS=y
++
++#
++# LED drivers
++#
++CONFIG_LEDS_ATMEL_PWM=y
++CONFIG_LEDS_GPIO=y
++CONFIG_LEDS_GPIO_PLATFORM=y
++# CONFIG_LEDS_DAC124S085 is not set
++
++#
++# LED Triggers
++#
++CONFIG_LEDS_TRIGGERS=y
++CONFIG_LEDS_TRIGGER_TIMER=y
++CONFIG_LEDS_TRIGGER_HEARTBEAT=y
++# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
++CONFIG_LEDS_TRIGGER_GPIO=y
++# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set
++
++#
++# iptables trigger is under Netfilter config (LED target)
++#
+ CONFIG_RTC_LIB=y
+ CONFIG_RTC_CLASS=y
+ CONFIG_RTC_HCTOSYS=y
+@@ -725,40 +1006,56 @@
+ # 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_M41T94 is not set
++# CONFIG_RTC_DRV_DS1305 is not set
++# CONFIG_RTC_DRV_DS1390 is not set
+ # CONFIG_RTC_DRV_MAX6902 is not set
++# CONFIG_RTC_DRV_R9701 is not set
++# CONFIG_RTC_DRV_RS5C348 is not set
++# CONFIG_RTC_DRV_DS3234 is not set
+ #
+ # Platform RTC drivers
+ #
+ # CONFIG_RTC_DRV_CMOS is not set
++# CONFIG_RTC_DRV_DS1286 is not set
++# CONFIG_RTC_DRV_DS1511 is not set
+ # CONFIG_RTC_DRV_DS1553 is not set
+-# CONFIG_RTC_DRV_STK17TA8 is not set
+ # CONFIG_RTC_DRV_DS1742 is not set
++# CONFIG_RTC_DRV_STK17TA8 is not set
+ # CONFIG_RTC_DRV_M48T86 is not set
++# CONFIG_RTC_DRV_M48T35 is not set
+ # CONFIG_RTC_DRV_M48T59 is not set
++# CONFIG_RTC_DRV_BQ4802 is not set
+ # CONFIG_RTC_DRV_V3020 is not set
+ #
+ # on-CPU RTC drivers
+ #
++# CONFIG_RTC_DRV_AT91RM9200 is not set
+ CONFIG_RTC_DRV_AT91SAM9=y
++CONFIG_RTC_DRV_AT91SAM9_RTT=0
++CONFIG_RTC_DRV_AT91SAM9_GPBR=0
++CONFIG_DMADEVICES=y
++
++#
++# DMA Devices
++#
++CONFIG_AT_HDMAC=m
++CONFIG_DMA_ENGINE=y
++
++#
++# DMA Clients
++#
++# CONFIG_NET_DMA is not set
++# CONFIG_ASYNC_TX_DMA is not set
++CONFIG_DMATEST=m
++# CONFIG_AUXDISPLAY is not set
++# CONFIG_REGULATOR is not set
++# CONFIG_UIO is not set
++# CONFIG_STAGING is not set
+ #
+ # File systems
+@@ -767,24 +1064,28 @@
+ # 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_EXT4_FS is not set
+ # CONFIG_REISERFS_FS is not set
+ # CONFIG_JFS_FS is not set
+ # CONFIG_FS_POSIX_ACL is not set
++CONFIG_FILE_LOCKING=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_BTRFS_FS is not set
++CONFIG_DNOTIFY=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 is not set
+ # CONFIG_FUSE_FS is not set
+ #
++# Caches
++#
++# CONFIG_FSCACHE is not set
++
++#
+ # CD-ROM/DVD Filesystems
+ #
+ # CONFIG_ISO9660_FS is not set
+@@ -805,15 +1106,13 @@
+ #
+ CONFIG_PROC_FS=y
+ CONFIG_PROC_SYSCTL=y
++CONFIG_PROC_PAGE_MONITOR=y
+ CONFIG_SYSFS=y
+ CONFIG_TMPFS=y
+ # CONFIG_TMPFS_POSIX_ACL is not set
+ # CONFIG_HUGETLB_PAGE is not set
+ # CONFIG_CONFIGFS_FS is not set
+-
+-#
+-# Miscellaneous filesystems
+-#
++CONFIG_MISC_FILESYSTEMS=y
+ # CONFIG_ADFS_FS is not set
+ # CONFIG_AFFS_FS is not set
+ # CONFIG_HFS_FS is not set
+@@ -821,14 +1120,47 @@
+ # 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_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=m
++CONFIG_SQUASHFS=m
++CONFIG_SQUASHFS_EMBEDDED=y
++CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
+ # CONFIG_VXFS_FS is not set
++# CONFIG_MINIX_FS is not set
++# CONFIG_OMFS_FS is not set
+ # CONFIG_HPFS_FS is not set
+ # CONFIG_QNX4FS_FS is not set
++# CONFIG_ROMFS_FS is not set
+ # CONFIG_SYSV_FS is not set
+ # CONFIG_UFS_FS is not set
++# CONFIG_NILFS2_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_NFSD is not set
++CONFIG_LOCKD=y
++CONFIG_LOCKD_V4=y
++CONFIG_NFS_COMMON=y
++CONFIG_SUNRPC=y
++# CONFIG_RPCSEC_GSS_KRB5 is not set
++# CONFIG_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
+@@ -875,9 +1207,7 @@
+ # CONFIG_NLS_KOI8_R is not set
+ # CONFIG_NLS_KOI8_U is not set
+ CONFIG_NLS_UTF8=y
+-CONFIG_INSTRUMENTATION=y
+-# CONFIG_PROFILING is not set
+-# CONFIG_MARKERS is not set
++# CONFIG_DLM is not set
+ #
+ # Kernel hacking
+@@ -885,63 +1215,161 @@
+ # CONFIG_PRINTK_TIME is not set
+ CONFIG_ENABLE_WARN_DEPRECATED=y
+ CONFIG_ENABLE_MUST_CHECK=y
++CONFIG_FRAME_WARN=1024
+ # 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_KERNEL 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_DEBUG_MEMORY_INIT=y
++# CONFIG_RCU_CPU_STALL_DETECTOR is not set
++# CONFIG_LATENCYTOP is not set
++# CONFIG_SYSCTL_SYSCALL_CHECK is not set
++CONFIG_HAVE_FUNCTION_TRACER=y
++CONFIG_TRACING_SUPPORT=y
++
++#
++# Tracers
++#
++# CONFIG_FUNCTION_TRACER is not set
++# CONFIG_IRQSOFF_TRACER is not set
++# CONFIG_SCHED_TRACER is not set
++# CONFIG_CONTEXT_SWITCH_TRACER is not set
++# CONFIG_EVENT_TRACER is not set
++# CONFIG_BOOT_TRACER is not set
++# CONFIG_TRACE_BRANCH_PROFILING is not set
++# CONFIG_STACK_TRACER is not set
++# CONFIG_KMEMTRACE is not set
++# CONFIG_WORKQUEUE_TRACER is not set
++# CONFIG_BLK_DEV_IO_TRACE is not set
+ # CONFIG_SAMPLES is not set
++CONFIG_HAVE_ARCH_KGDB=y
++CONFIG_ARM_UNWIND=y
+ 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_SECURITYFS is not set
+ # CONFIG_SECURITY_FILE_CAPABILITIES is not set
+-# CONFIG_CRYPTO is not set
++CONFIG_CRYPTO=y
++
++#
++# Crypto core or helper
++#
++# CONFIG_CRYPTO_FIPS is not set
++CONFIG_CRYPTO_ALGAPI=y
++CONFIG_CRYPTO_ALGAPI2=y
++CONFIG_CRYPTO_AEAD2=y
++CONFIG_CRYPTO_BLKCIPHER=y
++CONFIG_CRYPTO_BLKCIPHER2=y
++CONFIG_CRYPTO_HASH2=y
++CONFIG_CRYPTO_RNG2=y
++CONFIG_CRYPTO_PCOMP=y
++CONFIG_CRYPTO_MANAGER=y
++CONFIG_CRYPTO_MANAGER2=y
++# CONFIG_CRYPTO_GF128MUL is not set
++# CONFIG_CRYPTO_NULL is not set
++CONFIG_CRYPTO_WORKQUEUE=y
++# CONFIG_CRYPTO_CRYPTD is not set
++# CONFIG_CRYPTO_AUTHENC is not set
++# CONFIG_CRYPTO_TEST is not set
++
++#
++# Authenticated Encryption with Associated Data
++#
++# CONFIG_CRYPTO_CCM is not set
++# CONFIG_CRYPTO_GCM is not set
++# CONFIG_CRYPTO_SEQIV is not set
++
++#
++# Block modes
++#
++# CONFIG_CRYPTO_CBC is not set
++# CONFIG_CRYPTO_CTR is not set
++# CONFIG_CRYPTO_CTS is not set
++CONFIG_CRYPTO_ECB=y
++# CONFIG_CRYPTO_LRW is not set
++# CONFIG_CRYPTO_PCBC is not set
++# CONFIG_CRYPTO_XTS is not set
++
++#
++# Hash modes
++#
++# CONFIG_CRYPTO_HMAC is not set
++# CONFIG_CRYPTO_XCBC is not set
++
++#
++# Digest
++#
++# CONFIG_CRYPTO_CRC32C is not set
++# CONFIG_CRYPTO_MD4 is not set
++# CONFIG_CRYPTO_MD5 is not set
++# CONFIG_CRYPTO_MICHAEL_MIC is not set
++# CONFIG_CRYPTO_RMD128 is not set
++# CONFIG_CRYPTO_RMD160 is not set
++# CONFIG_CRYPTO_RMD256 is not set
++# CONFIG_CRYPTO_RMD320 is not set
++# CONFIG_CRYPTO_SHA1 is not set
++# CONFIG_CRYPTO_SHA256 is not set
++# CONFIG_CRYPTO_SHA512 is not set
++# CONFIG_CRYPTO_TGR192 is not set
++# CONFIG_CRYPTO_WP512 is not set
++
++#
++# Ciphers
++#
++CONFIG_CRYPTO_AES=y
++# CONFIG_CRYPTO_ANUBIS is not set
++CONFIG_CRYPTO_ARC4=y
++# CONFIG_CRYPTO_BLOWFISH is not set
++# CONFIG_CRYPTO_CAMELLIA is not set
++# CONFIG_CRYPTO_CAST5 is not set
++# CONFIG_CRYPTO_CAST6 is not set
++# CONFIG_CRYPTO_DES is not set
++# CONFIG_CRYPTO_FCRYPT is not set
++# CONFIG_CRYPTO_KHAZAD is not set
++# CONFIG_CRYPTO_SALSA20 is not set
++# CONFIG_CRYPTO_SEED is not set
++# CONFIG_CRYPTO_SERPENT is not set
++# CONFIG_CRYPTO_TEA is not set
++# CONFIG_CRYPTO_TWOFISH is not set
++
++#
++# Compression
++#
++# CONFIG_CRYPTO_DEFLATE is not set
++# CONFIG_CRYPTO_ZLIB is not set
++# CONFIG_CRYPTO_LZO is not set
++
++#
++# Random Number Generation
++#
++# CONFIG_CRYPTO_ANSI_CPRNG is not set
++# CONFIG_CRYPTO_HW is not set
++# CONFIG_BINARY_PRINTF is not set
+ #
+ # Library routines
+ #
+ CONFIG_BITREVERSE=y
++CONFIG_GENERIC_FIND_LAST_BIT=y
+ # CONFIG_CRC_CCITT is not set
+ # CONFIG_CRC16 is not set
++# CONFIG_CRC_T10DIF is not set
+ # CONFIG_CRC_ITU_T is not set
+ CONFIG_CRC32=y
+ # CONFIG_CRC7 is not set
+ # CONFIG_LIBCRC32C is not set
+ CONFIG_ZLIB_INFLATE=y
+-CONFIG_PLIST=y
++CONFIG_ZLIB_DEFLATE=y
++CONFIG_DECOMPRESS_GZIP=y
++CONFIG_DECOMPRESS_BZIP2=y
++CONFIG_DECOMPRESS_LZMA=y
+ CONFIG_HAS_IOMEM=y
+ CONFIG_HAS_IOPORT=y
+ CONFIG_HAS_DMA=y
++CONFIG_NLATTR=y
+Index: linux-2.6.30/include/sound/ac97_codec.h
+===================================================================
+--- linux-2.6.30.orig/include/sound/ac97_codec.h       2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/include/sound/ac97_codec.h    2011-02-01 16:40:30.177046291 +0100
+@@ -32,6 +32,9 @@
+ #include "control.h"
+ #include "info.h"
++/* maximum number of devices on the AC97 bus */
++#define       AC97_BUS_MAX_DEVICES    4
++
+ /*
+  *  AC'97 codec registers
+  */
+@@ -642,4 +645,10 @@
+ /* ad hoc AC97 device driver access */
+ extern struct bus_type ac97_bus_type;
++/* AC97 platform_data adding function */
++static inline void snd_ac97_dev_add_pdata(struct snd_ac97 *ac97, void *data)
++{
++      ac97->dev.platform_data = data;
++}
++
+ #endif /* __SOUND_AC97_CODEC_H */
+Index: linux-2.6.30/include/sound/soc-dai.h
+===================================================================
+--- linux-2.6.30.orig/include/sound/soc-dai.h  2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/include/sound/soc-dai.h       2011-02-01 16:40:30.177046291 +0100
+@@ -27,9 +27,10 @@
+ #define SND_SOC_DAIFMT_I2S            0 /* I2S mode */
+ #define SND_SOC_DAIFMT_RIGHT_J                1 /* Right Justified mode */
+ #define SND_SOC_DAIFMT_LEFT_J         2 /* Left Justified mode */
+-#define SND_SOC_DAIFMT_DSP_A          3 /* L data msb after FRM LRC */
+-#define SND_SOC_DAIFMT_DSP_B          4 /* L data msb during FRM LRC */
++#define SND_SOC_DAIFMT_DSP_A          3 /* L data MSB after FRM LRC */
++#define SND_SOC_DAIFMT_DSP_B          4 /* L data MSB during FRM LRC */
+ #define SND_SOC_DAIFMT_AC97           5 /* AC97 */
++#define SND_SOC_DAIFMT_PDM            6 /* Pulse density modulation */
+ /* left and right justified also known as MSB and LSB respectively */
+ #define SND_SOC_DAIFMT_MSB            SND_SOC_DAIFMT_LEFT_J
+@@ -38,52 +39,34 @@
+ /*
+  * DAI Clock gating.
+  *
+- * DAI bit clocks can be be gated (disabled) when not the DAI is not
++ * DAI bit clocks can be be gated (disabled) when the DAI is not
+  * sending or receiving PCM data in a frame. This can be used to save power.
+  */
+ #define SND_SOC_DAIFMT_CONT           (0 << 4) /* continuous clock */
+ #define SND_SOC_DAIFMT_GATED          (1 << 4) /* clock is gated */
+ /*
+- * DAI Left/Right Clocks.
+- *
+- * Specifies whether the DAI can support different samples for similtanious
+- * playback and capture. This usually requires a seperate physical frame
+- * clock for playback and capture.
+- */
+-#define SND_SOC_DAIFMT_SYNC           (0 << 5) /* Tx FRM = Rx FRM */
+-#define SND_SOC_DAIFMT_ASYNC          (1 << 5) /* Tx FRM ~ Rx FRM */
+-
+-/*
+- * TDM
+- *
+- * Time Division Multiplexing. Allows PCM data to be multplexed with other
+- * data on the DAI.
+- */
+-#define SND_SOC_DAIFMT_TDM            (1 << 6)
+-
+-/*
+  * DAI hardware signal inversions.
+  *
+  * Specifies whether the DAI can also support inverted clocks for the specified
+  * format.
+  */
+ #define SND_SOC_DAIFMT_NB_NF          (0 << 8) /* normal bit clock + frame */
+-#define SND_SOC_DAIFMT_NB_IF          (1 << 8) /* normal bclk + inv frm */
+-#define SND_SOC_DAIFMT_IB_NF          (2 << 8) /* invert bclk + nor frm */
+-#define SND_SOC_DAIFMT_IB_IF          (3 << 8) /* invert bclk + frm */
++#define SND_SOC_DAIFMT_NB_IF          (1 << 8) /* normal BCLK + inv FRM */
++#define SND_SOC_DAIFMT_IB_NF          (2 << 8) /* invert BCLK + nor FRM */
++#define SND_SOC_DAIFMT_IB_IF          (3 << 8) /* 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
++ * i.e. if the codec is clk and FRM master then the interface is
+  * clk and frame slave.
+  */
+-#define SND_SOC_DAIFMT_CBM_CFM                (0 << 12) /* codec clk & frm master */
+-#define SND_SOC_DAIFMT_CBS_CFM                (1 << 12) /* codec clk slave & frm master */
++#define SND_SOC_DAIFMT_CBM_CFM                (0 << 12) /* codec clk & FRM master */
++#define SND_SOC_DAIFMT_CBS_CFM                (1 << 12) /* codec clk slave & FRM master */
+ #define SND_SOC_DAIFMT_CBM_CFS                (2 << 12) /* codec clk master & frame slave */
+-#define SND_SOC_DAIFMT_CBS_CFS                (3 << 12) /* codec clk & frm slave */
++#define SND_SOC_DAIFMT_CBS_CFS                (3 << 12) /* codec clk & FRM slave */
+ #define SND_SOC_DAIFMT_FORMAT_MASK    0x000f
+ #define SND_SOC_DAIFMT_CLOCK_MASK     0x00f0
+@@ -96,6 +79,16 @@
+ #define SND_SOC_CLOCK_IN              0
+ #define SND_SOC_CLOCK_OUT             1
++#define SND_SOC_STD_AC97_FMTS (SNDRV_PCM_FMTBIT_S8 |\
++                             SNDRV_PCM_FMTBIT_S16_LE |\
++                             SNDRV_PCM_FMTBIT_S16_BE |\
++                             SNDRV_PCM_FMTBIT_S20_3LE |\
++                             SNDRV_PCM_FMTBIT_S20_3BE |\
++                             SNDRV_PCM_FMTBIT_S24_3LE |\
++                             SNDRV_PCM_FMTBIT_S24_3BE |\
++                               SNDRV_PCM_FMTBIT_S32_LE |\
++                               SNDRV_PCM_FMTBIT_S32_BE)
++
+ struct snd_soc_dai_ops;
+ struct snd_soc_dai;
+ struct snd_ac97_bus_ops;
+@@ -114,13 +107,17 @@
+       int div_id, int div);
+ int snd_soc_dai_set_pll(struct snd_soc_dai *dai,
+-      int pll_id, unsigned int freq_in, unsigned int freq_out);
++      int pll_id, int source, unsigned int freq_in, unsigned int freq_out);
+ /* Digital Audio interface formatting */
+ int snd_soc_dai_set_fmt(struct snd_soc_dai *dai, unsigned int fmt);
+ int snd_soc_dai_set_tdm_slot(struct snd_soc_dai *dai,
+-      unsigned int mask, int slots);
++      unsigned int tx_mask, unsigned int rx_mask, int slots, int slot_width);
++
++int snd_soc_dai_set_channel_map(struct snd_soc_dai *dai,
++      unsigned int tx_num, unsigned int *tx_slot,
++      unsigned int rx_num, unsigned int *rx_slot);
+ int snd_soc_dai_set_tristate(struct snd_soc_dai *dai, int tristate);
+@@ -130,12 +127,12 @@
+ /*
+  * Digital Audio Interface.
+  *
+- * Describes the Digital Audio Interface in terms of it's ALSA, DAI and AC97
+- * operations an capabilities. Codec and platfom drivers will register a this
++ * Describes the Digital Audio Interface in terms of its ALSA, DAI and AC97
++ * operations and capabilities. Codec and platform drivers will register this
+  * structure for every DAI they have.
+  *
+  * This structure covers the clocking, formating and ALSA operations for each
+- * interface a
++ * interface.
+  */
+ struct snd_soc_dai_ops {
+       /*
+@@ -144,8 +141,8 @@
+        */
+       int (*set_sysclk)(struct snd_soc_dai *dai,
+               int clk_id, unsigned int freq, int dir);
+-      int (*set_pll)(struct snd_soc_dai *dai,
+-              int pll_id, unsigned int freq_in, unsigned int freq_out);
++      int (*set_pll)(struct snd_soc_dai *dai, int pll_id, int source,
++              unsigned int freq_in, unsigned int freq_out);
+       int (*set_clkdiv)(struct snd_soc_dai *dai, int div_id, int div);
+       /*
+@@ -154,7 +151,11 @@
+        */
+       int (*set_fmt)(struct snd_soc_dai *dai, unsigned int fmt);
+       int (*set_tdm_slot)(struct snd_soc_dai *dai,
+-              unsigned int mask, int slots);
++              unsigned int tx_mask, unsigned int rx_mask,
++              int slots, int slot_width);
++      int (*set_channel_map)(struct snd_soc_dai *dai,
++              unsigned int tx_num, unsigned int *tx_slot,
++              unsigned int rx_num, unsigned int *rx_slot);
+       int (*set_tristate)(struct snd_soc_dai *dai, int tristate);
+       /*
+@@ -193,6 +194,7 @@
+       int ac97_control;
+       struct device *dev;
++      void *ac97_pdata;       /* platform_data for the ac97 codec */
+       /* DAI callbacks */
+       int (*probe)(struct platform_device *pdev,
+@@ -208,6 +210,7 @@
+       /* DAI capabilities */
+       struct snd_soc_pcm_stream capture;
+       struct snd_soc_pcm_stream playback;
++      unsigned int symmetric_rates:1;
+       /* DAI runtime info */
+       struct snd_pcm_runtime *runtime;
+@@ -219,11 +222,8 @@
+       /* DAI private data */
+       void *private_data;
+-      /* parent codec/platform */
+-      union {
+-              struct snd_soc_codec *codec;
+-              struct snd_soc_platform *platform;
+-      };
++      /* parent platform */
++      struct snd_soc_platform *platform;
+       struct list_head list;
+ };
+Index: linux-2.6.30/include/sound/soc-dapm.h
+===================================================================
+--- linux-2.6.30.orig/include/sound/soc-dapm.h 2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/include/sound/soc-dapm.h      2011-02-01 16:40:30.177046291 +0100
+@@ -137,19 +137,39 @@
+       .event_flags = SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD}
+ /* stream domain */
++#define SND_SOC_DAPM_AIF_IN(wname, stname, wslot, wreg, wshift, winvert) \
++{     .id = snd_soc_dapm_aif_in, .name = wname, .sname = stname, \
++      .reg = wreg, .shift = wshift, .invert = winvert }
++#define SND_SOC_DAPM_AIF_OUT(wname, stname, wslot, wreg, wshift, winvert) \
++{     .id = snd_soc_dapm_aif_out, .name = wname, .sname = stname, \
++      .reg = wreg, .shift = wshift, .invert = winvert }
+ #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_DAC_E(wname, stname, wreg, wshift, winvert, \
++                         wevent, wflags)                              \
++{     .id = snd_soc_dapm_dac, .name = wname, .sname = stname, .reg = wreg, \
++      .shift = wshift, .invert = winvert, \
++      .event = wevent, .event_flags = wflags}
+ #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}
++#define SND_SOC_DAPM_ADC_E(wname, stname, wreg, wshift, winvert, \
++                         wevent, wflags)                              \
++{     .id = snd_soc_dapm_adc, .name = wname, .sname = stname, .reg = wreg, \
++      .shift = wshift, .invert = winvert, \
++      .event = wevent, .event_flags = wflags}
+-/* generic register modifier widget */
++/* generic widgets */
+ #define SND_SOC_DAPM_REG(wid, wname, wreg, wshift, wmask, won_val, woff_val) \
+ {     .id = wid, .name = wname, .kcontrols = NULL, .num_kcontrols = 0, \
+       .reg = -((wreg) + 1), .shift = wshift, .mask = wmask, \
+       .on_val = won_val, .off_val = woff_val, .event = dapm_reg_event, \
+       .event_flags = SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD}
++#define SND_SOC_DAPM_SUPPLY(wname, wreg, wshift, winvert, wevent, wflags) \
++{     .id = snd_soc_dapm_supply, .name = wname, .reg = wreg,  \
++      .shift = wshift, .invert = winvert, .event = wevent, \
++      .event_flags = wflags}
+ /* dapm kcontrol types */
+ #define SOC_DAPM_SINGLE(xname, reg, shift, max, invert) \
+@@ -186,6 +206,12 @@
+       .get = snd_soc_dapm_get_enum_double, \
+       .put = snd_soc_dapm_put_enum_double, \
+       .private_value = (unsigned long)&xenum }
++#define SOC_DAPM_ENUM_VIRT(xname, xenum)                  \
++{     .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \
++      .info = snd_soc_info_enum_double, \
++      .get = snd_soc_dapm_get_enum_virt, \
++      .put = snd_soc_dapm_put_enum_virt, \
++      .private_value = (unsigned long)&xenum }
+ #define SOC_DAPM_VALUE_ENUM(xname, xenum) \
+ {     .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \
+       .info = snd_soc_info_enum_double, \
+@@ -240,6 +266,10 @@
+       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_get_enum_virt(struct snd_kcontrol *kcontrol,
++      struct snd_ctl_elem_value *ucontrol);
++int snd_soc_dapm_put_enum_virt(struct snd_kcontrol *kcontrol,
++      struct snd_ctl_elem_value *ucontrol);
+ int snd_soc_dapm_get_value_enum_double(struct snd_kcontrol *kcontrol,
+       struct snd_ctl_elem_value *ucontrol);
+ int snd_soc_dapm_put_value_enum_double(struct snd_kcontrol *kcontrol,
+@@ -265,11 +295,11 @@
+ /* dapm events */
+ int snd_soc_dapm_stream_event(struct snd_soc_codec *codec, char *stream,
+       int event);
+-int snd_soc_dapm_set_bias_level(struct snd_soc_device *socdev,
+-      enum snd_soc_bias_level level);
++void snd_soc_dapm_shutdown(struct snd_soc_device *socdev);
+ /* dapm sys fs - used by the core */
+ int snd_soc_dapm_sys_add(struct device *dev);
++void snd_soc_dapm_debugfs_init(struct snd_soc_codec *codec);
+ /* dapm audio pin control and status */
+ int snd_soc_dapm_enable_pin(struct snd_soc_codec *codec, const char *pin);
+@@ -298,6 +328,9 @@
+       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 */
++      snd_soc_dapm_supply,            /* power/clock supply */
++      snd_soc_dapm_aif_in,            /* audio interface input */
++      snd_soc_dapm_aif_out,           /* audio interface output */
+ };
+ /*
+@@ -310,6 +343,10 @@
+       const char *sink;
+       const char *control;
+       const char *source;
++
++      /* Note: currently only supported for links where source is a supply */
++      int (*connected)(struct snd_soc_dapm_widget *source,
++                       struct snd_soc_dapm_widget *sink);
+ };
+ /* dapm audio path between two widgets */
+@@ -326,6 +363,9 @@
+       u32 connect:1;  /* source and sink widgets are connected */
+       u32 walked:1;   /* path has been walked */
++      int (*connected)(struct snd_soc_dapm_widget *source,
++                       struct snd_soc_dapm_widget *sink);
++
+       struct list_head list_source;
+       struct list_head list_sink;
+       struct list_head list;
+@@ -357,6 +397,8 @@
+       unsigned char suspend:1;                /* was active before suspend */
+       unsigned char pmdown:1;                 /* waiting for timeout */
++      int (*power_check)(struct snd_soc_dapm_widget *w);
++
+       /* external events */
+       unsigned short event_flags;             /* flags to specify event types */
+       int (*event)(struct snd_soc_dapm_widget*, struct snd_kcontrol *, int);
+@@ -368,6 +410,9 @@
+       /* widget input and outputs */
+       struct list_head sources;
+       struct list_head sinks;
++
++      /* used during DAPM updates */
++      struct list_head power_list;
+ };
+ #endif
+Index: linux-2.6.30/include/sound/soc.h
+===================================================================
+--- linux-2.6.30.orig/include/sound/soc.h      2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/include/sound/soc.h   2011-02-01 16:40:30.177046291 +0100
+@@ -118,6 +118,14 @@
+       .info = snd_soc_info_volsw, \
+       .get = xhandler_get, .put = xhandler_put, \
+       .private_value = SOC_SINGLE_VALUE(xreg, xshift, xmax, xinvert) }
++#define SOC_DOUBLE_EXT(xname, xreg, shift_left, shift_right, xmax, xinvert,\
++       xhandler_get, xhandler_put) \
++{     .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname),\
++      .info = snd_soc_info_volsw, \
++      .get = xhandler_get, .put = xhandler_put, \
++      .private_value = (unsigned long)&(struct soc_mixer_control) \
++              {.reg = xreg, .shift = shift_left, .rshift = shift_right, \
++               .max = xmax, .invert = xinvert} }
+ #define SOC_SINGLE_EXT_TLV(xname, xreg, xshift, xmax, xinvert,\
+        xhandler_get, xhandler_put, tlv_array) \
+ {     .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \
+@@ -127,6 +135,28 @@
+       .info = snd_soc_info_volsw, \
+       .get = xhandler_get, .put = xhandler_put, \
+       .private_value = SOC_SINGLE_VALUE(xreg, xshift, xmax, xinvert) }
++#define SOC_DOUBLE_EXT_TLV(xname, xreg, shift_left, shift_right, xmax, xinvert,\
++       xhandler_get, xhandler_put, tlv_array) \
++{     .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname), \
++      .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ | \
++               SNDRV_CTL_ELEM_ACCESS_READWRITE, \
++      .tlv.p = (tlv_array), \
++      .info = snd_soc_info_volsw, \
++      .get = xhandler_get, .put = xhandler_put, \
++      .private_value = (unsigned long)&(struct soc_mixer_control) \
++              {.reg = xreg, .shift = shift_left, .rshift = shift_right, \
++              .max = xmax, .invert = xinvert} }
++#define SOC_DOUBLE_R_EXT_TLV(xname, reg_left, reg_right, xshift, xmax, xinvert,\
++       xhandler_get, xhandler_put, tlv_array) \
++{     .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname), \
++      .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ | \
++               SNDRV_CTL_ELEM_ACCESS_READWRITE, \
++      .tlv.p = (tlv_array), \
++      .info = snd_soc_info_volsw_2r, \
++      .get = xhandler_get, .put = xhandler_put, \
++      .private_value = (unsigned long)&(struct soc_mixer_control) \
++              {.reg = reg_left, .rreg = reg_right, .shift = xshift, \
++              .max = xmax, .invert = 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, \
+@@ -175,14 +205,28 @@
+ #endif
+ 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;
++enum snd_soc_control_type {
++      SND_SOC_CUSTOM,
++      SND_SOC_I2C,
++      SND_SOC_SPI,
++};
++
+ int snd_soc_register_platform(struct snd_soc_platform *platform);
+ void snd_soc_unregister_platform(struct snd_soc_platform *platform);
+ int snd_soc_register_codec(struct snd_soc_codec *codec);
+ void snd_soc_unregister_codec(struct snd_soc_codec *codec);
++int snd_soc_codec_volatile_register(struct snd_soc_codec *codec, int reg);
++int snd_soc_codec_set_cache_io(struct snd_soc_codec *codec,
++                             int addr_bits, int data_bits,
++                             enum snd_soc_control_type control);
++
++#ifdef CONFIG_PM
++int snd_soc_suspend_device(struct device *dev);
++int snd_soc_resume_device(struct device *dev);
++#endif
+ /* pcm <-> DAI connect */
+ void snd_soc_free_pcms(struct snd_soc_device *socdev);
+@@ -206,15 +250,11 @@
+                       struct snd_soc_jack_gpio *gpios);
+ #endif
+-/* 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);
++                              unsigned int mask, unsigned int value);
+ int snd_soc_test_bits(struct snd_soc_codec *codec, unsigned short reg,
+-                              unsigned short mask, unsigned short value);
++                              unsigned int mask, unsigned int value);
+ int snd_soc_new_ac97_codec(struct snd_soc_codec *codec,
+       struct snd_ac97_bus_ops *ops, int num);
+@@ -331,6 +371,7 @@
+       struct module *owner;
+       struct mutex mutex;
+       struct device *dev;
++      struct snd_soc_device *socdev;
+       struct list_head list;
+@@ -351,8 +392,10 @@
+       int (*write)(struct snd_soc_codec *, unsigned int, unsigned int);
+       int (*display_register)(struct snd_soc_codec *, char *,
+                               size_t, unsigned int);
++      int (*volatile_register)(unsigned int);
++      int (*readable_register)(unsigned int);
+       hw_write_t hw_write;
+-      hw_read_t hw_read;
++      unsigned int (*hw_read)(struct snd_soc_codec *, unsigned int);
+       void *reg_cache;
+       short reg_cache_size;
+       short reg_cache_step;
+@@ -370,8 +413,10 @@
+       unsigned int num_dai;
+ #ifdef CONFIG_DEBUG_FS
++      struct dentry *debugfs_codec_root;
+       struct dentry *debugfs_reg;
+       struct dentry *debugfs_pop_time;
++      struct dentry *debugfs_dapm;
+ #endif
+ };
+@@ -417,6 +462,12 @@
+       /* codec/machine specific init - e.g. add machine controls */
+       int (*init)(struct snd_soc_codec *codec);
++      /* Symmetry requirements */
++      unsigned int symmetric_rates:1;
++
++      /* Symmetry data - only valid if symmetry is being enforced */
++      unsigned int rate;
++
+       /* DAI pcm */
+       struct snd_pcm *pcm;
+ };
+@@ -490,6 +541,19 @@
+       void *dapm;
+ };
++/* codec IO */
++static inline unsigned int snd_soc_read(struct snd_soc_codec *codec,
++                                      unsigned int reg)
++{
++      return codec->read(codec, reg);
++}
++
++static inline unsigned int snd_soc_write(struct snd_soc_codec *codec,
++                                       unsigned int reg, unsigned int val)
++{
++      return codec->write(codec, reg, val);
++}
++
+ #include <sound/soc-dai.h>
+ #endif
+Index: linux-2.6.30/sound/soc/Makefile
+===================================================================
+--- linux-2.6.30.orig/sound/soc/Makefile       2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/sound/soc/Makefile    2011-02-01 16:40:30.177046291 +0100
+@@ -1,4 +1,4 @@
+-snd-soc-core-objs := soc-core.o soc-dapm.o soc-jack.o
++snd-soc-core-objs := soc-core.o soc-dapm.o soc-jack.o soc-cache.o
+ obj-$(CONFIG_SND_SOC) += snd-soc-core.o
+ obj-$(CONFIG_SND_SOC) += codecs/
+Index: linux-2.6.30/sound/soc/atmel/Kconfig
+===================================================================
+--- linux-2.6.30.orig/sound/soc/atmel/Kconfig  2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/sound/soc/atmel/Kconfig       2011-02-01 16:40:30.177046291 +0100
+@@ -41,3 +41,11 @@
+           and FRAME signals on the PlayPaq.  Unless you want to play
+           with the AT32 as the SSC master, you probably want to say N here,
+           as this will give you better sound quality.
++
++config SND_AT91_SOC_AFEB9260
++      tristate "SoC Audio support for AFEB9260 board"
++      depends on ARCH_AT91 && MACH_AFEB9260 && SND_ATMEL_SOC
++      select SND_ATMEL_SOC_SSC
++      select SND_SOC_TLV320AIC23
++      help
++        Say Y here to support sound on AFEB9260 board.
+Index: linux-2.6.30/sound/soc/atmel/Makefile
+===================================================================
+--- linux-2.6.30.orig/sound/soc/atmel/Makefile 2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/sound/soc/atmel/Makefile      2011-02-01 16:40:30.177046291 +0100
+@@ -13,3 +13,4 @@
+ obj-$(CONFIG_SND_AT91_SOC_SAM9G20_WM8731) += snd-soc-sam9g20-wm8731.o
+ obj-$(CONFIG_SND_AT32_SOC_PLAYPAQ) += snd-soc-playpaq.o
++obj-$(CONFIG_SND_AT91_SOC_AFEB9260) += snd-soc-afeb9260.o
+Index: linux-2.6.30/sound/soc/atmel/atmel_ssc_dai.c
+===================================================================
+--- linux-2.6.30.orig/sound/soc/atmel/atmel_ssc_dai.c  2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/sound/soc/atmel/atmel_ssc_dai.c       2011-02-01 16:40:30.177046291 +0100
+@@ -427,7 +427,7 @@
+                       | SSC_BF(RCMR_STTDLY, START_DELAY)
+                       | SSC_BF(RCMR_START, SSC_START_FALLING_RF)
+                       | SSC_BF(RCMR_CKI, SSC_CKI_RISING)
+-                      | SSC_BF(RCMR_CKO, SSC_CKO_NONE)
++                      | SSC_BF(RCMR_CKO, SSC_CKO_CONTINUOUS)
+                       | SSC_BF(RCMR_CKS, SSC_CKS_DIV);
+               rfmr =    SSC_BF(RFMR_FSEDGE, SSC_FSEDGE_POSITIVE)
+Index: linux-2.6.30/sound/soc/atmel/playpaq_wm8510.c
+===================================================================
+--- linux-2.6.30.orig/sound/soc/atmel/playpaq_wm8510.c 2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/sound/soc/atmel/playpaq_wm8510.c      2011-02-01 16:40:30.177046291 +0100
+@@ -117,7 +117,7 @@
+        * Find actual rate, compare to requested rate
+        */
+       actual_rate = (cd.ssc_rate / (cd.cmr_div * 2)) / (2 * (cd.period + 1));
+-      pr_debug("playpaq_wm8510: Request rate = %d, actual rate = %d\n",
++      pr_debug("playpaq_wm8510: Request rate = %u, actual rate = %u\n",
+                rate, actual_rate);
+@@ -268,7 +268,7 @@
+ #endif /* CONFIG_SND_AT32_SOC_PLAYPAQ_SLAVE */
+-      ret = snd_soc_dai_set_pll(codec_dai, 0,
++      ret = snd_soc_dai_set_pll(codec_dai, 0, 0,
+                                        clk_get_rate(CODEC_CLK), pll_out);
+       if (ret < 0) {
+               pr_warning("playpaq_wm8510: Failed to set CODEC DAI PLL (%d)\n",
+Index: linux-2.6.30/sound/soc/atmel/sam9g20_wm8731.c
+===================================================================
+--- linux-2.6.30.orig/sound/soc/atmel/sam9g20_wm8731.c 2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/sound/soc/atmel/sam9g20_wm8731.c      2011-02-01 16:40:30.193007582 +0100
+@@ -56,133 +56,32 @@
+ #define MCLK_RATE 12000000
++/*
++ * As shipped the board does not have inputs.  However, it is relatively
++ * straightforward to modify the board to hook them up so support is left
++ * in the driver.
++ */
++#undef ENABLE_MIC_INPUT
++#define ENABLE_MIC_INPUT 1
+ static struct clk *mclk;
+-static int at91sam9g20ek_startup(struct snd_pcm_substream *substream)
+-{
+-      struct snd_soc_pcm_runtime *rtd = snd_pcm_substream_chip(substream);
+-      struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
+-      int ret;
+-
+-      ret = snd_soc_dai_set_sysclk(codec_dai, WM8731_SYSCLK,
+-              MCLK_RATE, SND_SOC_CLOCK_IN);
+-      if (ret < 0) {
+-              clk_disable(mclk);
+-              return ret;
+-      }
+-
+-      return 0;
+-}
+-
+-static void at91sam9g20ek_shutdown(struct snd_pcm_substream *substream)
+-{
+-      struct snd_soc_pcm_runtime *rtd = snd_pcm_substream_chip(substream);
+-
+-      dev_dbg(rtd->socdev->dev, "shutdown");
+-}
+-
+ static int at91sam9g20ek_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_dai *codec_dai = rtd->dai->codec_dai;
+       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+-      struct atmel_ssc_info *ssc_p = cpu_dai->private_data;
+-      struct ssc_device *ssc = ssc_p->ssc;
+       int ret;
+-      unsigned int rate;
+-      int cmr_div, period;
+-
+-      if (ssc == NULL) {
+-              printk(KERN_INFO "at91sam9g20ek_hw_params: ssc is NULL!\n");
+-              return -EINVAL;
+-      }
+-
+       /* set codec DAI configuration */
+       ret = snd_soc_dai_set_fmt(codec_dai, SND_SOC_DAIFMT_I2S |
+-              SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS);
++              SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBM_CFM);
+       if (ret < 0)
+               return ret;
+       /* set cpu DAI configuration */
+       ret = snd_soc_dai_set_fmt(cpu_dai, SND_SOC_DAIFMT_I2S |
+-              SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS);
+-      if (ret < 0)
+-              return ret;
+-
+-      /*
+-       * The SSC clock dividers depend on the sample rate.  The CMR.DIV
+-       * field divides the system master clock MCK to drive the SSC TK
+-       * signal which provides the codec BCLK.  The TCMR.PERIOD and
+-       * RCMR.PERIOD fields further divide the BCLK signal to drive
+-       * the SSC TF and RF signals which provide the codec DACLRC and
+-       * ADCLRC clocks.
+-       *
+-       * The dividers were determined through trial and error, where a
+-       * CMR.DIV value is chosen such that the resulting BCLK value is
+-       * divisible, or almost divisible, by (2 * sample rate), and then
+-       * the TCMR.PERIOD or RCMR.PERIOD is BCLK / (2 * sample rate) - 1.
+-       */
+-      rate = params_rate(params);
+-
+-      switch (rate) {
+-      case 8000:
+-              cmr_div = 55;   /* BCLK = 133MHz/(2*55) = 1.209MHz */
+-              period = 74;    /* LRC = BCLK/(2*(74+1)) ~= 8060,6Hz */
+-              break;
+-      case 11025:
+-              cmr_div = 67;   /* BCLK = 133MHz/(2*60) = 1.108MHz */
+-              period = 45;    /* LRC = BCLK/(2*(49+1)) = 11083,3Hz */
+-              break;
+-      case 16000:
+-              cmr_div = 63;   /* BCLK = 133MHz/(2*63) = 1.055MHz */
+-              period = 32;    /* LRC = BCLK/(2*(32+1)) = 15993,2Hz */
+-              break;
+-      case 22050:
+-              cmr_div = 52;   /* BCLK = 133MHz/(2*52) = 1.278MHz */
+-              period = 28;    /* LRC = BCLK/(2*(28+1)) = 22049Hz */
+-              break;
+-      case 32000:
+-              cmr_div = 66;   /* BCLK = 133MHz/(2*66) = 1.007MHz */
+-              period = 15;    /* LRC = BCLK/(2*(15+1)) = 31486,742Hz */
+-              break;
+-      case 44100:
+-              cmr_div = 29;   /* BCLK = 133MHz/(2*29) = 2.293MHz */
+-              period = 25;    /* LRC = BCLK/(2*(25+1)) = 44098Hz */
+-              break;
+-      case 48000:
+-              cmr_div = 33;   /* BCLK = 133MHz/(2*33) = 2.015MHz */
+-              period = 20;    /* LRC = BCLK/(2*(20+1)) = 47979,79Hz */
+-              break;
+-      case 88200:
+-              cmr_div = 29;   /* BCLK = 133MHz/(2*29) = 2.293MHz */
+-              period = 12;    /* LRC = BCLK/(2*(12+1)) = 88196Hz */
+-              break;
+-      case 96000:
+-              cmr_div = 23;   /* BCLK = 133MHz/(2*23) = 2.891MHz */
+-              period = 14;    /* LRC = BCLK/(2*(14+1)) = 96376Hz */
+-              break;
+-      default:
+-              printk(KERN_WARNING "unsupported rate %d"
+-                              " on at91sam9g20ek board\n", rate);
+-              return -EINVAL;
+-      }
+-
+-      /* set the MCK divider for BCLK */
+-      ret = snd_soc_dai_set_clkdiv(cpu_dai, ATMEL_SSC_CMR_DIV, cmr_div);
+-      if (ret < 0)
+-              return ret;
+-
+-      if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
+-              /* set the BCLK divider for DACLRC */
+-              ret = snd_soc_dai_set_clkdiv(cpu_dai,
+-                                              ATMEL_SSC_TCMR_PERIOD, period);
+-      } else {
+-              /* set the BCLK divider for ADCLRC */
+-              ret = snd_soc_dai_set_clkdiv(cpu_dai,
+-                                              ATMEL_SSC_RCMR_PERIOD, period);
+-      }
++              SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBM_CFM);
+       if (ret < 0)
+               return ret;
+@@ -190,9 +89,7 @@
+ }
+ static struct snd_soc_ops at91sam9g20ek_ops = {
+-      .startup = at91sam9g20ek_startup,
+       .hw_params = at91sam9g20ek_hw_params,
+-      .shutdown = at91sam9g20ek_shutdown,
+ };
+ static int at91sam9g20ek_set_bias_level(struct snd_soc_card *card,
+@@ -241,10 +138,20 @@
+  */
+ static int at91sam9g20ek_wm8731_init(struct snd_soc_codec *codec)
+ {
++      struct snd_soc_dai *codec_dai = &codec->dai[0];
++      int ret;
++
+       printk(KERN_DEBUG
+                       "at91sam9g20ek_wm8731 "
+                       ": at91sam9g20ek_wm8731_init() called\n");
++      ret = snd_soc_dai_set_sysclk(codec_dai, WM8731_SYSCLK,
++              MCLK_RATE, SND_SOC_CLOCK_IN);
++      if (ret < 0) {
++              printk(KERN_ERR "Failed to set WM8731 SYSCLK: %d\n", ret);
++              return ret;
++      }
++
+       /* Add specific widgets */
+       snd_soc_dapm_new_controls(codec, at91sam9g20ek_dapm_widgets,
+                                 ARRAY_SIZE(at91sam9g20ek_dapm_widgets));
+@@ -255,8 +162,13 @@
+       snd_soc_dapm_nc_pin(codec, "RLINEIN");
+       snd_soc_dapm_nc_pin(codec, "LLINEIN");
+-      /* always connected */
++#ifdef ENABLE_MIC_INPUT
+       snd_soc_dapm_enable_pin(codec, "Int Mic");
++#else
++      snd_soc_dapm_nc_pin(codec, "Int Mic");
++#endif
++
++      /* always connected */
+       snd_soc_dapm_enable_pin(codec, "Ext Spk");
+       snd_soc_dapm_sync(codec);
+@@ -281,38 +193,6 @@
+       .set_bias_level = at91sam9g20ek_set_bias_level,
+ };
+-/*
+- * FIXME: This is a temporary bodge to avoid cross-tree merge issues.
+- * New drivers should register the wm8731 I2C device in the machine
+- * setup code (under arch/arm for ARM systems).
+- */
+-static int wm8731_i2c_register(void)
+-{
+-      struct i2c_board_info info;
+-      struct i2c_adapter *adapter;
+-      struct i2c_client *client;
+-
+-      memset(&info, 0, sizeof(struct i2c_board_info));
+-      info.addr = 0x1b;
+-      strlcpy(info.type, "wm8731", I2C_NAME_SIZE);
+-
+-      adapter = i2c_get_adapter(0);
+-      if (!adapter) {
+-              printk(KERN_ERR "can't get i2c adapter 0\n");
+-              return -ENODEV;
+-      }
+-
+-      client = i2c_new_device(adapter, &info);
+-      i2c_put_adapter(adapter);
+-      if (!client) {
+-              printk(KERN_ERR "can't add i2c device at 0x%x\n",
+-                      (unsigned int)info.addr);
+-              return -ENODEV;
+-      }
+-
+-      return 0;
+-}
+-
+ static struct snd_soc_device at91sam9g20ek_snd_devdata = {
+       .card = &snd_soc_at91sam9g20ek,
+       .codec_dev = &soc_codec_dev_wm8731,
+@@ -327,7 +207,7 @@
+       struct clk *pllb;
+       int ret;
+-      if (!machine_is_at91sam9g20ek())
++      if (!(machine_is_at91sam9g20ek() || machine_is_at91sam9g20ek_2mmc()))
+               return -ENODEV;
+       /*
+@@ -367,10 +247,6 @@
+       }
+       ssc_p->ssc = ssc;
+-      ret = wm8731_i2c_register();
+-      if (ret != 0)
+-              goto err_ssc;
+-
+       at91sam9g20ek_snd_device = platform_device_alloc("soc-audio", -1);
+       if (!at91sam9g20ek_snd_device) {
+               printk(KERN_ERR "ASoC: Platform device allocation failed\n");
+Index: linux-2.6.30/sound/soc/codecs/Kconfig
+===================================================================
+--- linux-2.6.30.orig/sound/soc/codecs/Kconfig 2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/sound/soc/codecs/Kconfig      2011-02-01 16:40:30.181004049 +0100
+@@ -12,13 +12,20 @@
+       tristate "Build all ASoC CODEC drivers"
+       select SND_SOC_L3
+       select SND_SOC_AC97_CODEC if SND_SOC_AC97_BUS
++      select SND_SOC_AD1836 if SPI_MASTER
++      select SND_SOC_AD1938 if SPI_MASTER
+       select SND_SOC_AD1980 if SND_SOC_AC97_BUS
+       select SND_SOC_AD73311 if I2C
+       select SND_SOC_AK4104 if SPI_MASTER
+       select SND_SOC_AK4535 if I2C
++      select SND_SOC_AK4642 if I2C
++      select SND_SOC_AK4671 if I2C
+       select SND_SOC_CS4270 if I2C
++      select SND_SOC_MAX9877 if I2C
+       select SND_SOC_PCM3008
++      select SND_SOC_SPDIF
+       select SND_SOC_SSM2602 if I2C
++      select SND_SOC_STAC9766 if SND_SOC_AC97_BUS
+       select SND_SOC_TLV320AIC23 if I2C
+       select SND_SOC_TLV320AIC26 if SPI_MASTER
+       select SND_SOC_TLV320AIC3X if I2C
+@@ -28,15 +35,25 @@
+       select SND_SOC_WM8350 if MFD_WM8350
+       select SND_SOC_WM8400 if MFD_WM8400
+       select SND_SOC_WM8510 if SND_SOC_I2C_AND_SPI
++      select SND_SOC_WM8523 if I2C
+       select SND_SOC_WM8580 if I2C
++      select SND_SOC_WM8711 if SND_SOC_I2C_AND_SPI
+       select SND_SOC_WM8728 if SND_SOC_I2C_AND_SPI
+       select SND_SOC_WM8731 if SND_SOC_I2C_AND_SPI
+       select SND_SOC_WM8750 if SND_SOC_I2C_AND_SPI
+       select SND_SOC_WM8753 if SND_SOC_I2C_AND_SPI
++      select SND_SOC_WM8776 if SND_SOC_I2C_AND_SPI
+       select SND_SOC_WM8900 if I2C
+       select SND_SOC_WM8903 if I2C
++      select SND_SOC_WM8940 if I2C
++      select SND_SOC_WM8960 if I2C
++      select SND_SOC_WM8961 if I2C
+       select SND_SOC_WM8971 if I2C
++      select SND_SOC_WM8974 if I2C
++      select SND_SOC_WM8988 if SND_SOC_I2C_AND_SPI
+       select SND_SOC_WM8990 if I2C
++      select SND_SOC_WM8993 if I2C
++      select SND_SOC_WM9081 if I2C
+       select SND_SOC_WM9705 if SND_SOC_AC97_BUS
+       select SND_SOC_WM9712 if SND_SOC_AC97_BUS
+       select SND_SOC_WM9713 if SND_SOC_AC97_BUS
+@@ -51,11 +68,21 @@
+           If unsure select "N".
++config SND_SOC_WM_HUBS
++      tristate
++      default y if SND_SOC_WM8993=y
++      default m if SND_SOC_WM8993=m
+ config SND_SOC_AC97_CODEC
+       tristate
+       select SND_AC97_CODEC
++config SND_SOC_AD1836
++      tristate
++
++config SND_SOC_AD1938
++      tristate
++
+ config SND_SOC_AD1980
+       tristate
+@@ -68,6 +95,12 @@
+ config SND_SOC_AK4535
+       tristate
++config SND_SOC_AK4642
++      tristate
++
++config SND_SOC_AK4671
++      tristate
++
+ # Cirrus Logic CS4270 Codec
+ config SND_SOC_CS4270
+       tristate
+@@ -80,15 +113,24 @@
+       bool
+       depends on SND_SOC_CS4270
++config SND_SOC_CX20442
++      tristate
++
+ config SND_SOC_L3
+        tristate
+ config SND_SOC_PCM3008
+        tristate
++config SND_SOC_SPDIF
++      tristate
++
+ config SND_SOC_SSM2602
+       tristate
++config SND_SOC_STAC9766
++      tristate
++
+ config SND_SOC_TLV320AIC23
+       tristate
+@@ -117,9 +159,15 @@
+ config SND_SOC_WM8510
+       tristate
++config SND_SOC_WM8523
++      tristate
++
+ config SND_SOC_WM8580
+       tristate
++config SND_SOC_WM8711
++      tristate
++
+ config SND_SOC_WM8728
+       tristate
+@@ -132,18 +180,42 @@
+ config SND_SOC_WM8753
+       tristate
++config SND_SOC_WM8776
++      tristate
++
+ config SND_SOC_WM8900
+       tristate
+ config SND_SOC_WM8903
+       tristate
++config SND_SOC_WM8940
++        tristate
++
++config SND_SOC_WM8960
++      tristate
++
++config SND_SOC_WM8961
++      tristate
++
+ config SND_SOC_WM8971
+       tristate
++config SND_SOC_WM8974
++      tristate
++
++config SND_SOC_WM8988
++      tristate
++
+ config SND_SOC_WM8990
+       tristate
++config SND_SOC_WM8993
++      tristate
++
++config SND_SOC_WM9081
++      tristate
++
+ config SND_SOC_WM9705
+       tristate
+@@ -152,3 +224,7 @@
+ config SND_SOC_WM9713
+       tristate
++
++# Amp
++config SND_SOC_MAX9877
++      tristate
+Index: linux-2.6.30/sound/soc/codecs/Makefile
+===================================================================
+--- linux-2.6.30.orig/sound/soc/codecs/Makefile        2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/sound/soc/codecs/Makefile     2011-02-01 16:40:30.181004049 +0100
+@@ -1,12 +1,19 @@
+ snd-soc-ac97-objs := ac97.o
++snd-soc-ad1836-objs := ad1836.o
++snd-soc-ad1938-objs := ad1938.o
+ snd-soc-ad1980-objs := ad1980.o
+ snd-soc-ad73311-objs := ad73311.o
+ snd-soc-ak4104-objs := ak4104.o
+ snd-soc-ak4535-objs := ak4535.o
++snd-soc-ak4642-objs := ak4642.o
++snd-soc-ak4671-objs := ak4671.o
+ snd-soc-cs4270-objs := cs4270.o
++snd-soc-cx20442-objs := cx20442.o
+ snd-soc-l3-objs := l3.o
+ snd-soc-pcm3008-objs := pcm3008.o
++snd-soc-spdif-objs := spdif_transciever.o
+ snd-soc-ssm2602-objs := ssm2602.o
++snd-soc-stac9766-objs := stac9766.o
+ snd-soc-tlv320aic23-objs := tlv320aic23.o
+ snd-soc-tlv320aic26-objs := tlv320aic26.o
+ snd-soc-tlv320aic3x-objs := tlv320aic3x.o
+@@ -16,28 +23,49 @@
+ snd-soc-wm8350-objs := wm8350.o
+ snd-soc-wm8400-objs := wm8400.o
+ snd-soc-wm8510-objs := wm8510.o
++snd-soc-wm8523-objs := wm8523.o
+ snd-soc-wm8580-objs := wm8580.o
++snd-soc-wm8711-objs := wm8711.o
+ snd-soc-wm8728-objs := wm8728.o
+ snd-soc-wm8731-objs := wm8731.o
+ snd-soc-wm8750-objs := wm8750.o
+ snd-soc-wm8753-objs := wm8753.o
++snd-soc-wm8776-objs := wm8776.o
+ snd-soc-wm8900-objs := wm8900.o
+ snd-soc-wm8903-objs := wm8903.o
++snd-soc-wm8940-objs := wm8940.o
++snd-soc-wm8960-objs := wm8960.o
++snd-soc-wm8961-objs := wm8961.o
+ snd-soc-wm8971-objs := wm8971.o
++snd-soc-wm8974-objs := wm8974.o
++snd-soc-wm8988-objs := wm8988.o
+ snd-soc-wm8990-objs := wm8990.o
++snd-soc-wm8993-objs := wm8993.o
++snd-soc-wm9081-objs := wm9081.o
+ snd-soc-wm9705-objs := wm9705.o
+ snd-soc-wm9712-objs := wm9712.o
+ snd-soc-wm9713-objs := wm9713.o
++snd-soc-wm-hubs-objs := wm_hubs.o
++
++# Amp
++snd-soc-max9877-objs := max9877.o
+ obj-$(CONFIG_SND_SOC_AC97_CODEC)      += snd-soc-ac97.o
++obj-$(CONFIG_SND_SOC_AD1836)  += snd-soc-ad1836.o
++obj-$(CONFIG_SND_SOC_AD1938)  += snd-soc-ad1938.o
+ obj-$(CONFIG_SND_SOC_AD1980)  += snd-soc-ad1980.o
+ obj-$(CONFIG_SND_SOC_AD73311) += snd-soc-ad73311.o
+ obj-$(CONFIG_SND_SOC_AK4104)  += snd-soc-ak4104.o
+ obj-$(CONFIG_SND_SOC_AK4535)  += snd-soc-ak4535.o
++obj-$(CONFIG_SND_SOC_AK4642)  += snd-soc-ak4642.o
++obj-$(CONFIG_SND_SOC_AK4671)  += snd-soc-ak4671.o
+ obj-$(CONFIG_SND_SOC_CS4270)  += snd-soc-cs4270.o
++obj-$(CONFIG_SND_SOC_CX20442) += snd-soc-cx20442.o
+ obj-$(CONFIG_SND_SOC_L3)      += snd-soc-l3.o
+ obj-$(CONFIG_SND_SOC_PCM3008) += snd-soc-pcm3008.o
++obj-$(CONFIG_SND_SOC_SPDIF)   += snd-soc-spdif.o
+ obj-$(CONFIG_SND_SOC_SSM2602) += snd-soc-ssm2602.o
++obj-$(CONFIG_SND_SOC_STAC9766)        += snd-soc-stac9766.o
+ obj-$(CONFIG_SND_SOC_TLV320AIC23)     += snd-soc-tlv320aic23.o
+ obj-$(CONFIG_SND_SOC_TLV320AIC26)     += snd-soc-tlv320aic26.o
+ obj-$(CONFIG_SND_SOC_TLV320AIC3X)     += snd-soc-tlv320aic3x.o
+@@ -47,15 +75,29 @@
+ obj-$(CONFIG_SND_SOC_WM8350)  += snd-soc-wm8350.o
+ obj-$(CONFIG_SND_SOC_WM8400)  += snd-soc-wm8400.o
+ obj-$(CONFIG_SND_SOC_WM8510)  += snd-soc-wm8510.o
++obj-$(CONFIG_SND_SOC_WM8523)  += snd-soc-wm8523.o
+ obj-$(CONFIG_SND_SOC_WM8580)  += snd-soc-wm8580.o
++obj-$(CONFIG_SND_SOC_WM8711)  += snd-soc-wm8711.o
+ obj-$(CONFIG_SND_SOC_WM8728)  += snd-soc-wm8728.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_WM8776)  += snd-soc-wm8776.o
+ obj-$(CONFIG_SND_SOC_WM8900)  += snd-soc-wm8900.o
+ obj-$(CONFIG_SND_SOC_WM8903)  += snd-soc-wm8903.o
+ obj-$(CONFIG_SND_SOC_WM8971)  += snd-soc-wm8971.o
++obj-$(CONFIG_SND_SOC_WM8974)  += snd-soc-wm8974.o
++obj-$(CONFIG_SND_SOC_WM8940)  += snd-soc-wm8940.o
++obj-$(CONFIG_SND_SOC_WM8960)  += snd-soc-wm8960.o
++obj-$(CONFIG_SND_SOC_WM8961)  += snd-soc-wm8961.o
++obj-$(CONFIG_SND_SOC_WM8988)  += snd-soc-wm8988.o
+ obj-$(CONFIG_SND_SOC_WM8990)  += snd-soc-wm8990.o
++obj-$(CONFIG_SND_SOC_WM8993)  += snd-soc-wm8993.o
++obj-$(CONFIG_SND_SOC_WM9081)  += snd-soc-wm9081.o
+ obj-$(CONFIG_SND_SOC_WM9705)  += snd-soc-wm9705.o
+ obj-$(CONFIG_SND_SOC_WM9712)  += snd-soc-wm9712.o
+ obj-$(CONFIG_SND_SOC_WM9713)  += snd-soc-wm9713.o
++obj-$(CONFIG_SND_SOC_WM_HUBS) += snd-soc-wm-hubs.o
++
++# Amp
++obj-$(CONFIG_SND_SOC_MAX9877) += snd-soc-max9877.o
+Index: linux-2.6.30/sound/soc/codecs/ac97.c
+===================================================================
+--- linux-2.6.30.orig/sound/soc/codecs/ac97.c  2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/sound/soc/codecs/ac97.c       2011-02-01 16:40:30.181004049 +0100
+@@ -53,13 +53,13 @@
+               .channels_min = 1,
+               .channels_max = 2,
+               .rates = STD_AC97_RATES,
+-              .formats = SNDRV_PCM_FMTBIT_S16_LE,},
++              .formats = SND_SOC_STD_AC97_FMTS,},
+       .capture = {
+               .stream_name = "AC97 Capture",
+               .channels_min = 1,
+               .channels_max = 2,
+               .rates = STD_AC97_RATES,
+-              .formats = SNDRV_PCM_FMTBIT_S16_LE,},
++              .formats = SND_SOC_STD_AC97_FMTS,},
+       .ops = &ac97_dai_ops,
+ };
+ EXPORT_SYMBOL_GPL(ac97_dai);
+Index: linux-2.6.30/sound/soc/codecs/ad1980.c
+===================================================================
+--- linux-2.6.30.orig/sound/soc/codecs/ad1980.c        2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/sound/soc/codecs/ad1980.c     2011-02-01 16:40:30.181004049 +0100
+@@ -137,13 +137,13 @@
+               .channels_min = 2,
+               .channels_max = 6,
+               .rates = SNDRV_PCM_RATE_48000,
+-              .formats = SNDRV_PCM_FMTBIT_S16_LE, },
++              .formats = SND_SOC_STD_AC97_FMTS, },
+       .capture = {
+               .stream_name = "Capture",
+               .channels_min = 2,
+               .channels_max = 2,
+               .rates = SNDRV_PCM_RATE_48000,
+-              .formats = SNDRV_PCM_FMTBIT_S16_LE, },
++              .formats = SND_SOC_STD_AC97_FMTS, },
+ };
+ EXPORT_SYMBOL_GPL(ad1980_dai);
+Index: linux-2.6.30/sound/soc/codecs/ak4535.c
+===================================================================
+--- linux-2.6.30.orig/sound/soc/codecs/ak4535.c        2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/sound/soc/codecs/ak4535.c     2011-02-01 16:40:30.181004049 +0100
+@@ -59,21 +59,6 @@
+       return cache[reg];
+ }
+-static inline unsigned int ak4535_read(struct snd_soc_codec *codec,
+-      unsigned int reg)
+-{
+-      u8 data;
+-      data = reg;
+-
+-      if (codec->hw_write(codec->control_data, &data, 1) != 1)
+-              return -EIO;
+-
+-      if (codec->hw_read(codec->control_data, &data, 1) != 1)
+-              return -EIO;
+-
+-      return data;
+-};
+-
+ /*
+  * write ak4535 register cache
+  */
+@@ -635,7 +620,6 @@
+ #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
+       if (setup->i2c_address) {
+               codec->hw_write = (hw_write_t)i2c_master_send;
+-              codec->hw_read = (hw_read_t)i2c_master_recv;
+               ret = ak4535_add_i2c_device(pdev, setup);
+       }
+ #endif
+Index: linux-2.6.30/sound/soc/codecs/cs4270.c
+===================================================================
+--- linux-2.6.30.orig/sound/soc/codecs/cs4270.c        2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/sound/soc/codecs/cs4270.c     2011-02-01 16:40:30.181004049 +0100
+@@ -18,7 +18,7 @@
+  * - The machine driver's 'startup' function must call
+  *   cs4270_set_dai_sysclk() with the value of MCLK.
+  * - Only I2S and left-justified modes are supported
+- * - Power management is not supported
++ * - Power management is supported
+  */
+ #include <linux/module.h>
+@@ -27,6 +27,7 @@
+ #include <sound/soc.h>
+ #include <sound/initval.h>
+ #include <linux/i2c.h>
++#include <linux/delay.h>
+ #include "cs4270.h"
+@@ -56,6 +57,7 @@
+ #define CS4270_FIRSTREG       0x01
+ #define CS4270_LASTREG        0x08
+ #define CS4270_NUMREGS        (CS4270_LASTREG - CS4270_FIRSTREG + 1)
++#define CS4270_I2C_INCR       0x80
+ /* Bit masks for the CS4270 registers */
+ #define CS4270_CHIPID_ID      0xF0
+@@ -64,6 +66,8 @@
+ #define CS4270_PWRCTL_PDN_ADC 0x20
+ #define CS4270_PWRCTL_PDN_DAC 0x02
+ #define CS4270_PWRCTL_PDN     0x01
++#define CS4270_PWRCTL_PDN_ALL \
++      (CS4270_PWRCTL_PDN_ADC | CS4270_PWRCTL_PDN_DAC | CS4270_PWRCTL_PDN)
+ #define CS4270_MODE_SPEED_MASK        0x30
+ #define CS4270_MODE_1X                0x00
+ #define CS4270_MODE_2X                0x10
+@@ -109,6 +113,7 @@
+       unsigned int mclk; /* Input frequency of the MCLK pin */
+       unsigned int mode; /* The mode (I2S or left-justified) */
+       unsigned int slave_mode;
++      unsigned int manual_mute;
+ };
+ /**
+@@ -295,7 +300,7 @@
+       s32 length;
+       length = i2c_smbus_read_i2c_block_data(i2c_client,
+-              CS4270_FIRSTREG | 0x80, CS4270_NUMREGS, cache);
++              CS4270_FIRSTREG | CS4270_I2C_INCR, CS4270_NUMREGS, cache);
+       if (length != CS4270_NUMREGS) {
+               dev_err(codec->dev, "i2c read failure, addr=0x%x\n",
+@@ -453,7 +458,7 @@
+ }
+ /**
+- * cs4270_mute - enable/disable the CS4270 external mute
++ * cs4270_dai_mute - enable/disable the CS4270 external mute
+  * @dai: the SOC DAI
+  * @mute: 0 = disable mute, 1 = enable mute
+  *
+@@ -462,21 +467,52 @@
+  * board does not have the MUTEA or MUTEB pins connected to such circuitry,
+  * then this function will do nothing.
+  */
+-static int cs4270_mute(struct snd_soc_dai *dai, int mute)
++static int cs4270_dai_mute(struct snd_soc_dai *dai, int mute)
+ {
+       struct snd_soc_codec *codec = dai->codec;
++      struct cs4270_private *cs4270 = codec->private_data;
+       int reg6;
+       reg6 = snd_soc_read(codec, CS4270_MUTE);
+       if (mute)
+               reg6 |= CS4270_MUTE_DAC_A | CS4270_MUTE_DAC_B;
+-      else
++      else {
+               reg6 &= ~(CS4270_MUTE_DAC_A | CS4270_MUTE_DAC_B);
++              reg6 |= cs4270->manual_mute;
++      }
+       return snd_soc_write(codec, CS4270_MUTE, reg6);
+ }
++/**
++ * cs4270_soc_put_mute - put callback for the 'Master Playback switch'
++ *                     alsa control.
++ * @kcontrol: mixer control
++ * @ucontrol: control element information
++ *
++ * This function basically passes the arguments on to the generic
++ * snd_soc_put_volsw() function and saves the mute information in
++ * our private data structure. This is because we want to prevent
++ * cs4270_dai_mute() neglecting the user's decision to manually
++ * mute the codec's output.
++ *
++ * Returns 0 for success.
++ */
++static int cs4270_soc_put_mute(struct snd_kcontrol *kcontrol,
++                              struct snd_ctl_elem_value *ucontrol)
++{
++      struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
++      struct cs4270_private *cs4270 = codec->private_data;
++      int left = !ucontrol->value.integer.value[0];
++      int right = !ucontrol->value.integer.value[1];
++
++      cs4270->manual_mute = (left ? CS4270_MUTE_DAC_A : 0) |
++                            (right ? CS4270_MUTE_DAC_B : 0);
++
++      return snd_soc_put_volsw(kcontrol, ucontrol);
++}
++
+ /* A list of non-DAPM controls that the CS4270 supports */
+ static const struct snd_kcontrol_new cs4270_snd_controls[] = {
+       SOC_DOUBLE_R("Master Playback Volume",
+@@ -486,7 +522,9 @@
+       SOC_SINGLE("Zero Cross Switch", CS4270_TRANS, 5, 1, 0),
+       SOC_SINGLE("Popguard Switch", CS4270_MODE, 0, 1, 1),
+       SOC_SINGLE("Auto-Mute Switch", CS4270_MUTE, 5, 1, 0),
+-      SOC_DOUBLE("Master Capture Switch", CS4270_MUTE, 3, 4, 1, 0)
++      SOC_DOUBLE("Master Capture Switch", CS4270_MUTE, 3, 4, 1, 1),
++      SOC_DOUBLE_EXT("Master Playback Switch", CS4270_MUTE, 0, 1, 1, 1,
++              snd_soc_get_volsw, cs4270_soc_put_mute),
+ };
+ /*
+@@ -506,7 +544,7 @@
+       .hw_params      = cs4270_hw_params,
+       .set_sysclk     = cs4270_set_dai_sysclk,
+       .set_fmt        = cs4270_set_dai_fmt,
+-      .digital_mute   = cs4270_mute,
++      .digital_mute   = cs4270_dai_mute,
+ };
+ struct snd_soc_dai cs4270_dai = {
+@@ -753,6 +791,74 @@
+ };
+ MODULE_DEVICE_TABLE(i2c, cs4270_id);
++#ifdef CONFIG_PM
++
++/* This suspend/resume implementation can handle both - a simple standby
++ * where the codec remains powered, and a full suspend, where the voltage
++ * domain the codec is connected to is teared down and/or any other hardware
++ * reset condition is asserted.
++ *
++ * The codec's own power saving features are enabled in the suspend callback,
++ * and all registers are written back to the hardware when resuming.
++ */
++
++static int cs4270_i2c_suspend(struct i2c_client *client, pm_message_t mesg)
++{
++      struct cs4270_private *cs4270 = i2c_get_clientdata(client);
++      struct snd_soc_codec *codec = &cs4270->codec;
++
++      return snd_soc_suspend_device(codec->dev);
++}
++
++static int cs4270_i2c_resume(struct i2c_client *client)
++{
++      struct cs4270_private *cs4270 = i2c_get_clientdata(client);
++      struct snd_soc_codec *codec = &cs4270->codec;
++
++      return snd_soc_resume_device(codec->dev);
++}
++
++static int cs4270_soc_suspend(struct platform_device *pdev, pm_message_t mesg)
++{
++      struct snd_soc_codec *codec = cs4270_codec;
++      int reg = snd_soc_read(codec, CS4270_PWRCTL) | CS4270_PWRCTL_PDN_ALL;
++
++      return snd_soc_write(codec, CS4270_PWRCTL, reg);
++}
++
++static int cs4270_soc_resume(struct platform_device *pdev)
++{
++      struct snd_soc_codec *codec = cs4270_codec;
++      struct i2c_client *i2c_client = codec->control_data;
++      int reg;
++
++      /* In case the device was put to hard reset during sleep, we need to
++       * wait 500ns here before any I2C communication. */
++      ndelay(500);
++
++      /* first restore the entire register cache ... */
++      for (reg = CS4270_FIRSTREG; reg <= CS4270_LASTREG; reg++) {
++              u8 val = snd_soc_read(codec, reg);
++
++              if (i2c_smbus_write_byte_data(i2c_client, reg, val)) {
++                      dev_err(codec->dev, "i2c write failed\n");
++                      return -EIO;
++              }
++      }
++
++      /* ... then disable the power-down bits */
++      reg = snd_soc_read(codec, CS4270_PWRCTL);
++      reg &= ~CS4270_PWRCTL_PDN_ALL;
++
++      return snd_soc_write(codec, CS4270_PWRCTL, reg);
++}
++#else
++#define cs4270_i2c_suspend    NULL
++#define cs4270_i2c_resume     NULL
++#define cs4270_soc_suspend    NULL
++#define cs4270_soc_resume     NULL
++#endif /* CONFIG_PM */
++
+ /*
+  * cs4270_i2c_driver - I2C device identification
+  *
+@@ -767,6 +873,8 @@
+       .id_table = cs4270_id,
+       .probe = cs4270_i2c_probe,
+       .remove = cs4270_i2c_remove,
++      .suspend = cs4270_i2c_suspend,
++      .resume = cs4270_i2c_resume,
+ };
+ /*
+@@ -777,7 +885,9 @@
+  */
+ struct snd_soc_codec_device soc_codec_device_cs4270 = {
+       .probe =        cs4270_probe,
+-      .remove =       cs4270_remove
++      .remove =       cs4270_remove,
++      .suspend =      cs4270_soc_suspend,
++      .resume =       cs4270_soc_resume,
+ };
+ EXPORT_SYMBOL_GPL(soc_codec_device_cs4270);
+Index: linux-2.6.30/sound/soc/codecs/ssm2602.c
+===================================================================
+--- linux-2.6.30.orig/sound/soc/codecs/ssm2602.c       2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/sound/soc/codecs/ssm2602.c    2011-02-01 16:40:30.181004049 +0100
+@@ -336,15 +336,17 @@
+                       master_runtime->sample_bits,
+                       master_runtime->rate);
+-              snd_pcm_hw_constraint_minmax(substream->runtime,
+-                                           SNDRV_PCM_HW_PARAM_RATE,
+-                                           master_runtime->rate,
+-                                           master_runtime->rate);
+-
+-              snd_pcm_hw_constraint_minmax(substream->runtime,
+-                                           SNDRV_PCM_HW_PARAM_SAMPLE_BITS,
+-                                           master_runtime->sample_bits,
+-                                           master_runtime->sample_bits);
++              if (master_runtime->rate != 0)
++                      snd_pcm_hw_constraint_minmax(substream->runtime,
++                                                   SNDRV_PCM_HW_PARAM_RATE,
++                                                   master_runtime->rate,
++                                                   master_runtime->rate);
++
++              if (master_runtime->sample_bits != 0)
++                      snd_pcm_hw_constraint_minmax(substream->runtime,
++                                                   SNDRV_PCM_HW_PARAM_SAMPLE_BITS,
++                                                   master_runtime->sample_bits,
++                                                   master_runtime->sample_bits);
+               ssm2602->slave_substream = substream;
+       } else
+@@ -372,6 +374,7 @@
+       struct snd_soc_device *socdev = rtd->socdev;
+       struct snd_soc_codec *codec = socdev->card->codec;
+       struct ssm2602_priv *ssm2602 = codec->private_data;
++
+       /* deactivate */
+       if (!codec->active)
+               ssm2602_write(codec, SSM2602_ACTIVE, 0);
+@@ -497,11 +500,9 @@
+       return 0;
+ }
+-#define SSM2602_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 SSM2602_RATES (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_32000 |\
++              SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000 |\
++              SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000)
+ #define SSM2602_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE |\
+               SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
+Index: linux-2.6.30/sound/soc/codecs/tlv320aic23.c
+===================================================================
+--- linux-2.6.30.orig/sound/soc/codecs/tlv320aic23.c   2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/sound/soc/codecs/tlv320aic23.c        2011-02-01 16:40:30.181004049 +0100
+@@ -86,7 +86,7 @@
+        */
+       if ((reg < 0 || reg > 9) && (reg != 15)) {
+-              printk(KERN_WARNING "%s Invalid register R%d\n", __func__, reg);
++              printk(KERN_WARNING "%s Invalid register R%u\n", __func__, reg);
+               return -1;
+       }
+@@ -98,7 +98,7 @@
+       if (codec->hw_write(codec->control_data, data, 2) == 2)
+               return 0;
+-      printk(KERN_ERR "%s cannot write %03x to register R%d\n", __func__,
++      printk(KERN_ERR "%s cannot write %03x to register R%u\n", __func__,
+              value, reg);
+       return -EIO;
+@@ -273,14 +273,14 @@
+  * Every divisor is a factor of 11*12
+  */
+ #define SR_MULT (11*12)
+-#define A(x) (x) ? (SR_MULT/x) : 0
++#define A(x) (SR_MULT/x)
+ static const unsigned char sr_adc_mult_table[] = {
+-      A(2), A(2), A(12), A(12),  A(0), A(0), A(3), A(1),
+-      A(2), A(2), A(11), A(11),  A(0), A(0), A(0), A(1)
++      A(2), A(2), A(12), A(12),  0, 0, A(3), A(1),
++      A(2), A(2), A(11), A(11),  0, 0, 0, A(1)
+ };
+ static const unsigned char sr_dac_mult_table[] = {
+-      A(2), A(12), A(2), A(12),  A(0), A(0), A(3), A(1),
+-      A(2), A(11), A(2), A(11),  A(0), A(0), A(0), A(1)
++      A(2), A(12), A(2), A(12),  0, 0, A(3), A(1),
++      A(2), A(11), A(2), A(11),  0, 0, 0, A(1)
+ };
+ static unsigned get_score(int adc, int adc_l, int adc_h, int need_adc,
+@@ -523,6 +523,8 @@
+       case SND_SOC_DAIFMT_I2S:
+               iface_reg |= TLV320AIC23_FOR_I2S;
+               break;
++      case SND_SOC_DAIFMT_DSP_A:
++              iface_reg |= TLV320AIC23_LRP_ON;
+       case SND_SOC_DAIFMT_DSP_B:
+               iface_reg |= TLV320AIC23_FOR_DSP;
+               break;
+Index: linux-2.6.30/sound/soc/codecs/tlv320aic3x.c
+===================================================================
+--- linux-2.6.30.orig/sound/soc/codecs/tlv320aic3x.c   2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/sound/soc/codecs/tlv320aic3x.c        2011-02-01 16:40:30.181004049 +0100
+@@ -53,6 +53,7 @@
+ /* codec private data */
+ struct aic3x_priv {
++      struct snd_soc_codec codec;
+       unsigned int sysclk;
+       int master;
+ };
+@@ -145,8 +146,8 @@
+                     u8 *value)
+ {
+       *value = reg & 0xff;
+-      if (codec->hw_read(codec->control_data, value, 1) != 1)
+-              return -EIO;
++
++      value[0] = i2c_smbus_read_byte_data(codec->control_data, value[0]);
+       aic3x_write_reg_cache(codec, reg, *value);
+       return 0;
+@@ -767,6 +768,7 @@
+       int codec_clk = 0, bypass_pll = 0, fsref, last_clk = 0;
+       u8 data, r, p, pll_q, pll_p = 1, pll_r = 1, pll_j = 1;
+       u16 pll_d = 1;
++      u8 reg;
+       /* select data word length */
+       data =
+@@ -801,8 +803,16 @@
+               pll_q &= 0xf;
+               aic3x_write(codec, AIC3X_PLL_PROGA_REG, pll_q << PLLQ_SHIFT);
+               aic3x_write(codec, AIC3X_GPIOB_REG, CODEC_CLKIN_CLKDIV);
+-      } else
++              /* disable PLL if it is bypassed */
++              reg = aic3x_read_reg_cache(codec, AIC3X_PLL_PROGA_REG);
++              aic3x_write(codec, AIC3X_PLL_PROGA_REG, reg & ~PLL_ENABLE);
++
++      } else {
+               aic3x_write(codec, AIC3X_GPIOB_REG, CODEC_CLKIN_PLLDIV);
++              /* enable PLL when it is used */
++              reg = aic3x_read_reg_cache(codec, AIC3X_PLL_PROGA_REG);
++              aic3x_write(codec, AIC3X_PLL_PROGA_REG, reg | PLL_ENABLE);
++      }
+       /* Route Left DAC to left channel input and
+        * right DAC to right channel input */
+@@ -1147,11 +1157,13 @@
+  * initialise the AIC3X driver
+  * register the mixer and dsp interfaces with the kernel
+  */
+-static int aic3x_init(struct snd_soc_device *socdev)
++static int aic3x_init(struct snd_soc_codec *codec)
+ {
+-      struct snd_soc_codec *codec = socdev->card->codec;
+-      struct aic3x_setup_data *setup = socdev->codec_data;
+-      int reg, ret = 0;
++      int reg;
++
++      mutex_init(&codec->mutex);
++      INIT_LIST_HEAD(&codec->dapm_widgets);
++      INIT_LIST_HEAD(&codec->dapm_paths);
+       codec->name = "tlv320aic3x";
+       codec->owner = THIS_MODULE;
+@@ -1168,13 +1180,6 @@
+       aic3x_write(codec, AIC3X_PAGE_SELECT, PAGE0_SELECT);
+       aic3x_write(codec, AIC3X_RESET, SOFT_RESET);
+-      /* register pcms */
+-      ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
+-      if (ret < 0) {
+-              printk(KERN_ERR "aic3x: failed to create pcms\n");
+-              goto pcm_err;
+-      }
+-
+       /* DAC default volume and mute */
+       aic3x_write(codec, LDAC_VOL, DEFAULT_VOL | MUTE_ON);
+       aic3x_write(codec, RDAC_VOL, DEFAULT_VOL | MUTE_ON);
+@@ -1241,30 +1246,51 @@
+       /* off, with power on */
+       aic3x_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
+-      /* setup GPIO functions */
+-      aic3x_write(codec, AIC3X_GPIO1_REG, (setup->gpio_func[0] & 0xf) << 4);
+-      aic3x_write(codec, AIC3X_GPIO2_REG, (setup->gpio_func[1] & 0xf) << 4);
++      return 0;
++}
++
++static struct snd_soc_codec *aic3x_codec;
+-      snd_soc_add_controls(codec, aic3x_snd_controls,
+-                              ARRAY_SIZE(aic3x_snd_controls));
+-      aic3x_add_widgets(codec);
+-      ret = snd_soc_init_card(socdev);
++static int aic3x_register(struct snd_soc_codec *codec)
++{
++      int ret;
++
++      ret = aic3x_init(codec);
+       if (ret < 0) {
+-              printk(KERN_ERR "aic3x: failed to register card\n");
+-              goto card_err;
++              dev_err(codec->dev, "Failed to initialise device\n");
++              return ret;
+       }
+-      return ret;
++      aic3x_codec = codec;
+-card_err:
+-      snd_soc_free_pcms(socdev);
+-      snd_soc_dapm_free(socdev);
+-pcm_err:
+-      kfree(codec->reg_cache);
+-      return ret;
++      ret = snd_soc_register_codec(codec);
++      if (ret) {
++              dev_err(codec->dev, "Failed to register codec\n");
++              return ret;
++      }
++
++      ret = snd_soc_register_dai(&aic3x_dai);
++      if (ret) {
++              dev_err(codec->dev, "Failed to register dai\n");
++              snd_soc_unregister_codec(codec);
++              return ret;
++      }
++
++      return 0;
+ }
+-static struct snd_soc_device *aic3x_socdev;
++static int aic3x_unregister(struct aic3x_priv *aic3x)
++{
++      aic3x_set_bias_level(&aic3x->codec, SND_SOC_BIAS_OFF);
++
++      snd_soc_unregister_dai(&aic3x_dai);
++      snd_soc_unregister_codec(&aic3x->codec);
++
++      kfree(aic3x);
++      aic3x_codec = NULL;
++
++      return 0;
++}
+ #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
+ /*
+@@ -1279,28 +1305,36 @@
+ static int aic3x_i2c_probe(struct i2c_client *i2c,
+                          const struct i2c_device_id *id)
+ {
+-      struct snd_soc_device *socdev = aic3x_socdev;
+-      struct snd_soc_codec *codec = socdev->card->codec;
+-      int ret;
++      struct snd_soc_codec *codec;
++      struct aic3x_priv *aic3x;
+-      i2c_set_clientdata(i2c, codec);
++      aic3x = kzalloc(sizeof(struct aic3x_priv), GFP_KERNEL);
++      if (aic3x == NULL) {
++              dev_err(&i2c->dev, "failed to create private data\n");
++              return -ENOMEM;
++      }
++
++      codec = &aic3x->codec;
++      codec->dev = &i2c->dev;
++      codec->private_data = aic3x;
+       codec->control_data = i2c;
++      codec->hw_write = (hw_write_t) i2c_master_send;
+-      ret = aic3x_init(socdev);
+-      if (ret < 0)
+-              printk(KERN_ERR "aic3x: failed to initialise AIC3X\n");
+-      return ret;
++      i2c_set_clientdata(i2c, aic3x);
++
++      return aic3x_register(codec);
+ }
+ static int aic3x_i2c_remove(struct i2c_client *client)
+ {
+-      struct snd_soc_codec *codec = i2c_get_clientdata(client);
+-      kfree(codec->reg_cache);
+-      return 0;
++      struct aic3x_priv *aic3x = i2c_get_clientdata(client);
++
++      return aic3x_unregister(aic3x);
+ }
+ static const struct i2c_device_id aic3x_i2c_id[] = {
+       { "tlv320aic3x", 0 },
++      { "tlv320aic33", 0 },
+       { }
+ };
+ MODULE_DEVICE_TABLE(i2c, aic3x_i2c_id);
+@@ -1311,56 +1345,28 @@
+               .name = "aic3x I2C Codec",
+               .owner = THIS_MODULE,
+       },
+-      .probe = aic3x_i2c_probe,
++      .probe  = aic3x_i2c_probe,
+       .remove = aic3x_i2c_remove,
+       .id_table = aic3x_i2c_id,
+ };
+-static int aic3x_i2c_read(struct i2c_client *client, u8 *value, int len)
+-{
+-      value[0] = i2c_smbus_read_byte_data(client, value[0]);
+-      return (len == 1);
+-}
+-
+-static int aic3x_add_i2c_device(struct platform_device *pdev,
+-                               const struct aic3x_setup_data *setup)
++static inline void aic3x_i2c_init(void)
+ {
+-      struct i2c_board_info info;
+-      struct i2c_adapter *adapter;
+-      struct i2c_client *client;
+       int ret;
+       ret = i2c_add_driver(&aic3x_i2c_driver);
+-      if (ret != 0) {
+-              dev_err(&pdev->dev, "can't add i2c driver\n");
+-              return ret;
+-      }
+-
+-      memset(&info, 0, sizeof(struct i2c_board_info));
+-      info.addr = setup->i2c_address;
+-      strlcpy(info.type, "tlv320aic3x", I2C_NAME_SIZE);
+-
+-      adapter = i2c_get_adapter(setup->i2c_bus);
+-      if (!adapter) {
+-              dev_err(&pdev->dev, "can't get i2c adapter %d\n",
+-                      setup->i2c_bus);
+-              goto err_driver;
+-      }
+-
+-      client = i2c_new_device(adapter, &info);
+-      i2c_put_adapter(adapter);
+-      if (!client) {
+-              dev_err(&pdev->dev, "can't add i2c device at 0x%x\n",
+-                      (unsigned int)info.addr);
+-              goto err_driver;
+-      }
+-
+-      return 0;
++      if (ret)
++              printk(KERN_ERR "%s: error regsitering i2c driver, %d\n",
++                     __func__, ret);
++}
+-err_driver:
++static inline void aic3x_i2c_exit(void)
++{
+       i2c_del_driver(&aic3x_i2c_driver);
+-      return -ENODEV;
+ }
++#else
++static inline void aic3x_i2c_init(void) { }
++static inline void aic3x_i2c_exit(void) { }
+ #endif
+ static int aic3x_probe(struct platform_device *pdev)
+@@ -1368,43 +1374,51 @@
+       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
+       struct aic3x_setup_data *setup;
+       struct snd_soc_codec *codec;
+-      struct aic3x_priv *aic3x;
+       int ret = 0;
+-      printk(KERN_INFO "AIC3X Audio Codec %s\n", AIC3X_VERSION);
++      codec = aic3x_codec;
++      if (!codec) {
++              dev_err(&pdev->dev, "Codec not registered\n");
++              return -ENODEV;
++      }
++      socdev->card->codec = codec;
+       setup = socdev->codec_data;
+-      codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL);
+-      if (codec == NULL)
+-              return -ENOMEM;
+-      aic3x = kzalloc(sizeof(struct aic3x_priv), GFP_KERNEL);
+-      if (aic3x == NULL) {
+-              kfree(codec);
+-              return -ENOMEM;
++      if (setup) {
++              /* setup GPIO functions */
++              aic3x_write(codec, AIC3X_GPIO1_REG,
++                          (setup->gpio_func[0] & 0xf) << 4);
++              aic3x_write(codec, AIC3X_GPIO2_REG,
++                          (setup->gpio_func[1] & 0xf) << 4);
+       }
+-      codec->private_data = aic3x;
+-      socdev->card->codec = codec;
+-      mutex_init(&codec->mutex);
+-      INIT_LIST_HEAD(&codec->dapm_widgets);
+-      INIT_LIST_HEAD(&codec->dapm_paths);
+-
+-      aic3x_socdev = socdev;
+-#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
+-      if (setup->i2c_address) {
+-              codec->hw_write = (hw_write_t) i2c_master_send;
+-              codec->hw_read = (hw_read_t) aic3x_i2c_read;
+-              ret = aic3x_add_i2c_device(pdev, setup);
++      /* register pcms */
++      ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
++      if (ret < 0) {
++              printk(KERN_ERR "aic3x: failed to create pcms\n");
++              goto pcm_err;
+       }
+-#else
+-      /* Add other interfaces here */
+-#endif
+-      if (ret != 0) {
+-              kfree(codec->private_data);
+-              kfree(codec);
++      snd_soc_add_controls(codec, aic3x_snd_controls,
++                           ARRAY_SIZE(aic3x_snd_controls));
++
++      aic3x_add_widgets(codec);
++
++      ret = snd_soc_init_card(socdev);
++      if (ret < 0) {
++              printk(KERN_ERR "aic3x: failed to register card\n");
++              goto card_err;
+       }
++
++      return ret;
++
++card_err:
++      snd_soc_free_pcms(socdev);
++      snd_soc_dapm_free(socdev);
++
++pcm_err:
++      kfree(codec->reg_cache);
+       return ret;
+ }
+@@ -1419,12 +1433,8 @@
+       snd_soc_free_pcms(socdev);
+       snd_soc_dapm_free(socdev);
+-#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
+-      i2c_unregister_device(codec->control_data);
+-      i2c_del_driver(&aic3x_i2c_driver);
+-#endif
+-      kfree(codec->private_data);
+-      kfree(codec);
++
++      kfree(codec->reg_cache);
+       return 0;
+ }
+@@ -1439,13 +1449,15 @@
+ static int __init aic3x_modinit(void)
+ {
+-      return snd_soc_register_dai(&aic3x_dai);
++      aic3x_i2c_init();
++
++      return 0;
+ }
+ module_init(aic3x_modinit);
+ static void __exit aic3x_exit(void)
+ {
+-      snd_soc_unregister_dai(&aic3x_dai);
++      aic3x_i2c_exit();
+ }
+ module_exit(aic3x_exit);
+Index: linux-2.6.30/sound/soc/codecs/tlv320aic3x.h
+===================================================================
+--- linux-2.6.30.orig/sound/soc/codecs/tlv320aic3x.h   2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/sound/soc/codecs/tlv320aic3x.h        2011-02-01 16:40:30.181004049 +0100
+@@ -282,8 +282,6 @@
+ int aic3x_button_pressed(struct snd_soc_codec *codec);
+ struct aic3x_setup_data {
+-      int i2c_bus;
+-      unsigned short i2c_address;
+       unsigned int gpio_func[2];
+ };
+Index: linux-2.6.30/sound/soc/codecs/twl4030.c
+===================================================================
+--- linux-2.6.30.orig/sound/soc/codecs/twl4030.c       2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/sound/soc/codecs/twl4030.c    2011-02-01 16:40:30.181004049 +0100
+@@ -115,6 +115,7 @@
+       0x00, /* REG_VIBRA_PWM_SET      (0x47)  */
+       0x00, /* REG_ANAMIC_GAIN        (0x48)  */
+       0x00, /* REG_MISC_SET_2         (0x49)  */
++      0x00, /* REG_SW_SHADOW          (0x4A)  - Shadow, non HW register */
+ };
+ /* codec private data */
+@@ -125,6 +126,17 @@
+       struct snd_pcm_substream *master_substream;
+       struct snd_pcm_substream *slave_substream;
++
++      unsigned int configured;
++      unsigned int rate;
++      unsigned int sample_bits;
++      unsigned int channels;
++
++      unsigned int sysclk;
++
++      /* Headset output state handling */
++      unsigned int hsl_enabled;
++      unsigned int hsr_enabled;
+ };
+ /*
+@@ -161,7 +173,11 @@
+                       unsigned int reg, unsigned int value)
+ {
+       twl4030_write_reg_cache(codec, reg, value);
+-      return twl4030_i2c_write_u8(TWL4030_MODULE_AUDIO_VOICE, value, reg);
++      if (likely(reg < TWL4030_REG_SW_SHADOW))
++              return twl4030_i2c_write_u8(TWL4030_MODULE_AUDIO_VOICE, value,
++                                          reg);
++      else
++              return 0;
+ }
+ static void twl4030_codec_enable(struct snd_soc_codec *codec, int enable)
+@@ -188,6 +204,7 @@
+ static void twl4030_init_chip(struct snd_soc_codec *codec)
+ {
++      u8 *cache = codec->reg_cache;
+       int i;
+       /* clear CODECPDZ prior to setting register defaults */
+@@ -195,7 +212,7 @@
+       /* set all audio section registers to reasonable defaults */
+       for (i = TWL4030_REG_OPTION; i <= TWL4030_REG_MISC_SET_2; i++)
+-              twl4030_write(codec, i, twl4030_reg[i]);
++              twl4030_write(codec, i, cache[i]);
+ }
+@@ -208,55 +225,11 @@
+               return;
+       if (mute) {
+-              /* Bypass the reg_cache and mute the volumes
+-               * Headset mute is done in it's own event handler
+-               * Things to mute:  Earpiece, PreDrivL/R, CarkitL/R
+-               */
+-              reg_val = twl4030_read_reg_cache(codec, TWL4030_REG_EAR_CTL);
+-              twl4030_i2c_write_u8(TWL4030_MODULE_AUDIO_VOICE,
+-                                      reg_val & (~TWL4030_EAR_GAIN),
+-                                      TWL4030_REG_EAR_CTL);
+-
+-              reg_val = twl4030_read_reg_cache(codec, TWL4030_REG_PREDL_CTL);
+-              twl4030_i2c_write_u8(TWL4030_MODULE_AUDIO_VOICE,
+-                                      reg_val & (~TWL4030_PREDL_GAIN),
+-                                      TWL4030_REG_PREDL_CTL);
+-              reg_val = twl4030_read_reg_cache(codec, TWL4030_REG_PREDR_CTL);
+-              twl4030_i2c_write_u8(TWL4030_MODULE_AUDIO_VOICE,
+-                                      reg_val & (~TWL4030_PREDR_GAIN),
+-                                      TWL4030_REG_PREDL_CTL);
+-
+-              reg_val = twl4030_read_reg_cache(codec, TWL4030_REG_PRECKL_CTL);
+-              twl4030_i2c_write_u8(TWL4030_MODULE_AUDIO_VOICE,
+-                                      reg_val & (~TWL4030_PRECKL_GAIN),
+-                                      TWL4030_REG_PRECKL_CTL);
+-              reg_val = twl4030_read_reg_cache(codec, TWL4030_REG_PRECKR_CTL);
+-              twl4030_i2c_write_u8(TWL4030_MODULE_AUDIO_VOICE,
+-                                      reg_val & (~TWL4030_PRECKL_GAIN),
+-                                      TWL4030_REG_PRECKR_CTL);
+-
+               /* Disable PLL */
+               reg_val = twl4030_read_reg_cache(codec, TWL4030_REG_APLL_CTL);
+               reg_val &= ~TWL4030_APLL_EN;
+               twl4030_write(codec, TWL4030_REG_APLL_CTL, reg_val);
+       } else {
+-              /* Restore the volumes
+-               * Headset mute is done in it's own event handler
+-               * Things to restore:  Earpiece, PreDrivL/R, CarkitL/R
+-               */
+-              twl4030_write(codec, TWL4030_REG_EAR_CTL,
+-                      twl4030_read_reg_cache(codec, TWL4030_REG_EAR_CTL));
+-
+-              twl4030_write(codec, TWL4030_REG_PREDL_CTL,
+-                      twl4030_read_reg_cache(codec, TWL4030_REG_PREDL_CTL));
+-              twl4030_write(codec, TWL4030_REG_PREDR_CTL,
+-                      twl4030_read_reg_cache(codec, TWL4030_REG_PREDR_CTL));
+-
+-              twl4030_write(codec, TWL4030_REG_PRECKL_CTL,
+-                      twl4030_read_reg_cache(codec, TWL4030_REG_PRECKL_CTL));
+-              twl4030_write(codec, TWL4030_REG_PRECKR_CTL,
+-                      twl4030_read_reg_cache(codec, TWL4030_REG_PRECKR_CTL));
+-
+               /* Enable PLL */
+               reg_val = twl4030_read_reg_cache(codec, TWL4030_REG_APLL_CTL);
+               reg_val |= TWL4030_APLL_EN;
+@@ -316,104 +289,60 @@
+ }
+ /* Earpiece */
+-static const char *twl4030_earpiece_texts[] =
+-              {"Off", "DACL1", "DACL2", "DACR1"};
+-
+-static const unsigned int twl4030_earpiece_values[] =
+-              {0x0, 0x1, 0x2, 0x4};
+-
+-static const struct soc_enum twl4030_earpiece_enum =
+-      SOC_VALUE_ENUM_SINGLE(TWL4030_REG_EAR_CTL, 1, 0x7,
+-                      ARRAY_SIZE(twl4030_earpiece_texts),
+-                      twl4030_earpiece_texts,
+-                      twl4030_earpiece_values);
+-
+-static const struct snd_kcontrol_new twl4030_dapm_earpiece_control =
+-SOC_DAPM_VALUE_ENUM("Route", twl4030_earpiece_enum);
++static const struct snd_kcontrol_new twl4030_dapm_earpiece_controls[] = {
++      SOC_DAPM_SINGLE("Voice", TWL4030_REG_EAR_CTL, 0, 1, 0),
++      SOC_DAPM_SINGLE("AudioL1", TWL4030_REG_EAR_CTL, 1, 1, 0),
++      SOC_DAPM_SINGLE("AudioL2", TWL4030_REG_EAR_CTL, 2, 1, 0),
++      SOC_DAPM_SINGLE("AudioR1", TWL4030_REG_EAR_CTL, 3, 1, 0),
++};
+ /* PreDrive Left */
+-static const char *twl4030_predrivel_texts[] =
+-              {"Off", "DACL1", "DACL2", "DACR2"};
+-
+-static const unsigned int twl4030_predrivel_values[] =
+-              {0x0, 0x1, 0x2, 0x4};
+-
+-static const struct soc_enum twl4030_predrivel_enum =
+-      SOC_VALUE_ENUM_SINGLE(TWL4030_REG_PREDL_CTL, 1, 0x7,
+-                      ARRAY_SIZE(twl4030_predrivel_texts),
+-                      twl4030_predrivel_texts,
+-                      twl4030_predrivel_values);
+-
+-static const struct snd_kcontrol_new twl4030_dapm_predrivel_control =
+-SOC_DAPM_VALUE_ENUM("Route", twl4030_predrivel_enum);
++static const struct snd_kcontrol_new twl4030_dapm_predrivel_controls[] = {
++      SOC_DAPM_SINGLE("Voice", TWL4030_REG_PREDL_CTL, 0, 1, 0),
++      SOC_DAPM_SINGLE("AudioL1", TWL4030_REG_PREDL_CTL, 1, 1, 0),
++      SOC_DAPM_SINGLE("AudioL2", TWL4030_REG_PREDL_CTL, 2, 1, 0),
++      SOC_DAPM_SINGLE("AudioR2", TWL4030_REG_PREDL_CTL, 3, 1, 0),
++};
+ /* PreDrive Right */
+-static const char *twl4030_predriver_texts[] =
+-              {"Off", "DACR1", "DACR2", "DACL2"};
+-
+-static const unsigned int twl4030_predriver_values[] =
+-              {0x0, 0x1, 0x2, 0x4};
+-
+-static const struct soc_enum twl4030_predriver_enum =
+-      SOC_VALUE_ENUM_SINGLE(TWL4030_REG_PREDR_CTL, 1, 0x7,
+-                      ARRAY_SIZE(twl4030_predriver_texts),
+-                      twl4030_predriver_texts,
+-                      twl4030_predriver_values);
+-
+-static const struct snd_kcontrol_new twl4030_dapm_predriver_control =
+-SOC_DAPM_VALUE_ENUM("Route", twl4030_predriver_enum);
++static const struct snd_kcontrol_new twl4030_dapm_predriver_controls[] = {
++      SOC_DAPM_SINGLE("Voice", TWL4030_REG_PREDR_CTL, 0, 1, 0),
++      SOC_DAPM_SINGLE("AudioR1", TWL4030_REG_PREDR_CTL, 1, 1, 0),
++      SOC_DAPM_SINGLE("AudioR2", TWL4030_REG_PREDR_CTL, 2, 1, 0),
++      SOC_DAPM_SINGLE("AudioL2", TWL4030_REG_PREDR_CTL, 3, 1, 0),
++};
+ /* Headset Left */
+-static const char *twl4030_hsol_texts[] =
+-              {"Off", "DACL1", "DACL2"};
+-
+-static const struct soc_enum twl4030_hsol_enum =
+-      SOC_ENUM_SINGLE(TWL4030_REG_HS_SEL, 1,
+-                      ARRAY_SIZE(twl4030_hsol_texts),
+-                      twl4030_hsol_texts);
+-
+-static const struct snd_kcontrol_new twl4030_dapm_hsol_control =
+-SOC_DAPM_ENUM("Route", twl4030_hsol_enum);
++static const struct snd_kcontrol_new twl4030_dapm_hsol_controls[] = {
++      SOC_DAPM_SINGLE("Voice", TWL4030_REG_HS_SEL, 0, 1, 0),
++      SOC_DAPM_SINGLE("AudioL1", TWL4030_REG_HS_SEL, 1, 1, 0),
++      SOC_DAPM_SINGLE("AudioL2", TWL4030_REG_HS_SEL, 2, 1, 0),
++};
+ /* Headset Right */
+-static const char *twl4030_hsor_texts[] =
+-              {"Off", "DACR1", "DACR2"};
+-
+-static const struct soc_enum twl4030_hsor_enum =
+-      SOC_ENUM_SINGLE(TWL4030_REG_HS_SEL, 4,
+-                      ARRAY_SIZE(twl4030_hsor_texts),
+-                      twl4030_hsor_texts);
+-
+-static const struct snd_kcontrol_new twl4030_dapm_hsor_control =
+-SOC_DAPM_ENUM("Route", twl4030_hsor_enum);
++static const struct snd_kcontrol_new twl4030_dapm_hsor_controls[] = {
++      SOC_DAPM_SINGLE("Voice", TWL4030_REG_HS_SEL, 3, 1, 0),
++      SOC_DAPM_SINGLE("AudioR1", TWL4030_REG_HS_SEL, 4, 1, 0),
++      SOC_DAPM_SINGLE("AudioR2", TWL4030_REG_HS_SEL, 5, 1, 0),
++};
+ /* Carkit Left */
+-static const char *twl4030_carkitl_texts[] =
+-              {"Off", "DACL1", "DACL2"};
+-
+-static const struct soc_enum twl4030_carkitl_enum =
+-      SOC_ENUM_SINGLE(TWL4030_REG_PRECKL_CTL, 1,
+-                      ARRAY_SIZE(twl4030_carkitl_texts),
+-                      twl4030_carkitl_texts);
+-
+-static const struct snd_kcontrol_new twl4030_dapm_carkitl_control =
+-SOC_DAPM_ENUM("Route", twl4030_carkitl_enum);
++static const struct snd_kcontrol_new twl4030_dapm_carkitl_controls[] = {
++      SOC_DAPM_SINGLE("Voice", TWL4030_REG_PRECKL_CTL, 0, 1, 0),
++      SOC_DAPM_SINGLE("AudioL1", TWL4030_REG_PRECKL_CTL, 1, 1, 0),
++      SOC_DAPM_SINGLE("AudioL2", TWL4030_REG_PRECKL_CTL, 2, 1, 0),
++};
+ /* Carkit Right */
+-static const char *twl4030_carkitr_texts[] =
+-              {"Off", "DACR1", "DACR2"};
+-
+-static const struct soc_enum twl4030_carkitr_enum =
+-      SOC_ENUM_SINGLE(TWL4030_REG_PRECKR_CTL, 1,
+-                      ARRAY_SIZE(twl4030_carkitr_texts),
+-                      twl4030_carkitr_texts);
+-
+-static const struct snd_kcontrol_new twl4030_dapm_carkitr_control =
+-SOC_DAPM_ENUM("Route", twl4030_carkitr_enum);
++static const struct snd_kcontrol_new twl4030_dapm_carkitr_controls[] = {
++      SOC_DAPM_SINGLE("Voice", TWL4030_REG_PRECKR_CTL, 0, 1, 0),
++      SOC_DAPM_SINGLE("AudioR1", TWL4030_REG_PRECKR_CTL, 1, 1, 0),
++      SOC_DAPM_SINGLE("AudioR2", TWL4030_REG_PRECKR_CTL, 2, 1, 0),
++};
+ /* Handsfree Left */
+ static const char *twl4030_handsfreel_texts[] =
+-              {"Voice", "DACL1", "DACL2", "DACR2"};
++              {"Voice", "AudioL1", "AudioL2", "AudioR2"};
+ static const struct soc_enum twl4030_handsfreel_enum =
+       SOC_ENUM_SINGLE(TWL4030_REG_HFL_CTL, 0,
+@@ -423,9 +352,13 @@
+ static const struct snd_kcontrol_new twl4030_dapm_handsfreel_control =
+ SOC_DAPM_ENUM("Route", twl4030_handsfreel_enum);
++/* Handsfree Left virtual mute */
++static const struct snd_kcontrol_new twl4030_dapm_handsfreelmute_control =
++      SOC_DAPM_SINGLE("Switch", TWL4030_REG_SW_SHADOW, 0, 1, 0);
++
+ /* Handsfree Right */
+ static const char *twl4030_handsfreer_texts[] =
+-              {"Voice", "DACR1", "DACR2", "DACL2"};
++              {"Voice", "AudioR1", "AudioR2", "AudioL2"};
+ static const struct soc_enum twl4030_handsfreer_enum =
+       SOC_ENUM_SINGLE(TWL4030_REG_HFR_CTL, 0,
+@@ -435,37 +368,52 @@
+ static const struct snd_kcontrol_new twl4030_dapm_handsfreer_control =
+ SOC_DAPM_ENUM("Route", twl4030_handsfreer_enum);
+-/* Left analog microphone selection */
+-static const char *twl4030_analoglmic_texts[] =
+-              {"Off", "Main mic", "Headset mic", "AUXL", "Carkit mic"};
+-
+-static const unsigned int twl4030_analoglmic_values[] =
+-              {0x0, 0x1, 0x2, 0x4, 0x8};
++/* Handsfree Right virtual mute */
++static const struct snd_kcontrol_new twl4030_dapm_handsfreermute_control =
++      SOC_DAPM_SINGLE("Switch", TWL4030_REG_SW_SHADOW, 1, 1, 0);
++
++/* Vibra */
++/* Vibra audio path selection */
++static const char *twl4030_vibra_texts[] =
++              {"AudioL1", "AudioR1", "AudioL2", "AudioR2"};
++
++static const struct soc_enum twl4030_vibra_enum =
++      SOC_ENUM_SINGLE(TWL4030_REG_VIBRA_CTL, 2,
++                      ARRAY_SIZE(twl4030_vibra_texts),
++                      twl4030_vibra_texts);
++
++static const struct snd_kcontrol_new twl4030_dapm_vibra_control =
++SOC_DAPM_ENUM("Route", twl4030_vibra_enum);
++
++/* Vibra path selection: local vibrator (PWM) or audio driven */
++static const char *twl4030_vibrapath_texts[] =
++              {"Local vibrator", "Audio"};
++
++static const struct soc_enum twl4030_vibrapath_enum =
++      SOC_ENUM_SINGLE(TWL4030_REG_VIBRA_CTL, 4,
++                      ARRAY_SIZE(twl4030_vibrapath_texts),
++                      twl4030_vibrapath_texts);
+-static const struct soc_enum twl4030_analoglmic_enum =
+-      SOC_VALUE_ENUM_SINGLE(TWL4030_REG_ANAMICL, 0, 0xf,
+-                      ARRAY_SIZE(twl4030_analoglmic_texts),
+-                      twl4030_analoglmic_texts,
+-                      twl4030_analoglmic_values);
++static const struct snd_kcontrol_new twl4030_dapm_vibrapath_control =
++SOC_DAPM_ENUM("Route", twl4030_vibrapath_enum);
+-static const struct snd_kcontrol_new twl4030_dapm_analoglmic_control =
+-SOC_DAPM_VALUE_ENUM("Route", twl4030_analoglmic_enum);
++/* Left analog microphone selection */
++static const struct snd_kcontrol_new twl4030_dapm_analoglmic_controls[] = {
++      SOC_DAPM_SINGLE("Main Mic Capture Switch",
++                      TWL4030_REG_ANAMICL, 0, 1, 0),
++      SOC_DAPM_SINGLE("Headset Mic Capture Switch",
++                      TWL4030_REG_ANAMICL, 1, 1, 0),
++      SOC_DAPM_SINGLE("AUXL Capture Switch",
++                      TWL4030_REG_ANAMICL, 2, 1, 0),
++      SOC_DAPM_SINGLE("Carkit Mic Capture Switch",
++                      TWL4030_REG_ANAMICL, 3, 1, 0),
++};
+ /* Right analog microphone selection */
+-static const char *twl4030_analogrmic_texts[] =
+-              {"Off", "Sub mic", "AUXR"};
+-
+-static const unsigned int twl4030_analogrmic_values[] =
+-              {0x0, 0x1, 0x4};
+-
+-static const struct soc_enum twl4030_analogrmic_enum =
+-      SOC_VALUE_ENUM_SINGLE(TWL4030_REG_ANAMICR, 0, 0x5,
+-                      ARRAY_SIZE(twl4030_analogrmic_texts),
+-                      twl4030_analogrmic_texts,
+-                      twl4030_analogrmic_values);
+-
+-static const struct snd_kcontrol_new twl4030_dapm_analogrmic_control =
+-SOC_DAPM_VALUE_ENUM("Route", twl4030_analogrmic_enum);
++static const struct snd_kcontrol_new twl4030_dapm_analogrmic_controls[] = {
++      SOC_DAPM_SINGLE("Sub Mic Capture Switch", TWL4030_REG_ANAMICR, 0, 1, 0),
++      SOC_DAPM_SINGLE("AUXR Capture Switch", TWL4030_REG_ANAMICR, 2, 1, 0),
++};
+ /* TX1 L/R Analog/Digital microphone selection */
+ static const char *twl4030_micpathtx1_texts[] =
+@@ -507,6 +455,10 @@
+ static const struct snd_kcontrol_new twl4030_dapm_abypassl2_control =
+       SOC_DAPM_SINGLE("Switch", TWL4030_REG_ARXL2_APGA_CTL, 2, 1, 0);
++/* Analog bypass for Voice */
++static const struct snd_kcontrol_new twl4030_dapm_abypassv_control =
++      SOC_DAPM_SINGLE("Switch", TWL4030_REG_VDL_APGA_CTL, 2, 1, 0);
++
+ /* Digital bypass gain, 0 mutes the bypass */
+ static const unsigned int twl4030_dapm_dbypass_tlv[] = {
+       TLV_DB_RANGE_HEAD(2),
+@@ -526,6 +478,18 @@
+                       TWL4030_REG_ATX2ARXPGA, 0, 7, 0,
+                       twl4030_dapm_dbypass_tlv);
++/*
++ * Voice Sidetone GAIN volume control:
++ * from -51 to -10 dB in 1 dB steps (mute instead of -51 dB)
++ */
++static DECLARE_TLV_DB_SCALE(twl4030_dapm_dbypassv_tlv, -5100, 100, 1);
++
++/* Digital bypass voice: sidetone (VUL -> VDL)*/
++static const struct snd_kcontrol_new twl4030_dapm_dbypassv_control =
++      SOC_DAPM_SINGLE_TLV("Volume",
++                      TWL4030_REG_VSTPGA, 0, 0x29, 0,
++                      twl4030_dapm_dbypassv_tlv);
++
+ static int micpath_event(struct snd_soc_dapm_widget *w,
+       struct snd_kcontrol *kcontrol, int event)
+ {
+@@ -556,63 +520,205 @@
+       return 0;
+ }
+-static int handsfree_event(struct snd_soc_dapm_widget *w,
+-              struct snd_kcontrol *kcontrol, int event)
++/*
++ * Output PGA builder:
++ * Handle the muting and unmuting of the given output (turning off the
++ * amplifier associated with the output pin)
++ * On mute bypass the reg_cache and mute the volume
++ * On unmute: restore the register content
++ * Outputs handled in this way:  Earpiece, PreDrivL/R, CarkitL/R
++ */
++#define TWL4030_OUTPUT_PGA(pin_name, reg, mask)                               \
++static int pin_name##pga_event(struct snd_soc_dapm_widget *w,         \
++              struct snd_kcontrol *kcontrol, int event)               \
++{                                                                     \
++      u8 reg_val;                                                     \
++                                                                      \
++      switch (event) {                                                \
++      case SND_SOC_DAPM_POST_PMU:                                     \
++              twl4030_write(w->codec, reg,                            \
++                      twl4030_read_reg_cache(w->codec, reg));         \
++              break;                                                  \
++      case SND_SOC_DAPM_POST_PMD:                                     \
++              reg_val = twl4030_read_reg_cache(w->codec, reg);        \
++              twl4030_i2c_write_u8(TWL4030_MODULE_AUDIO_VOICE,        \
++                                      reg_val & (~mask),              \
++                                      reg);                           \
++              break;                                                  \
++      }                                                               \
++      return 0;                                                       \
++}
++
++TWL4030_OUTPUT_PGA(earpiece, TWL4030_REG_EAR_CTL, TWL4030_EAR_GAIN);
++TWL4030_OUTPUT_PGA(predrivel, TWL4030_REG_PREDL_CTL, TWL4030_PREDL_GAIN);
++TWL4030_OUTPUT_PGA(predriver, TWL4030_REG_PREDR_CTL, TWL4030_PREDR_GAIN);
++TWL4030_OUTPUT_PGA(carkitl, TWL4030_REG_PRECKL_CTL, TWL4030_PRECKL_GAIN);
++TWL4030_OUTPUT_PGA(carkitr, TWL4030_REG_PRECKR_CTL, TWL4030_PRECKR_GAIN);
++
++static void handsfree_ramp(struct snd_soc_codec *codec, int reg, int ramp)
+ {
+-      struct soc_enum *e = (struct soc_enum *)w->kcontrols->private_value;
+       unsigned char hs_ctl;
+-      hs_ctl = twl4030_read_reg_cache(w->codec, e->reg);
++      hs_ctl = twl4030_read_reg_cache(codec, reg);
+-      if (hs_ctl & TWL4030_HF_CTL_REF_EN) {
++      if (ramp) {
++              /* HF ramp-up */
++              hs_ctl |= TWL4030_HF_CTL_REF_EN;
++              twl4030_write(codec, reg, hs_ctl);
++              udelay(10);
+               hs_ctl |= TWL4030_HF_CTL_RAMP_EN;
+-              twl4030_write(w->codec, e->reg, hs_ctl);
++              twl4030_write(codec, reg, hs_ctl);
++              udelay(40);
+               hs_ctl |= TWL4030_HF_CTL_LOOP_EN;
+-              twl4030_write(w->codec, e->reg, hs_ctl);
+               hs_ctl |= TWL4030_HF_CTL_HB_EN;
+-              twl4030_write(w->codec, e->reg, hs_ctl);
++              twl4030_write(codec, reg, hs_ctl);
+       } else {
+-              hs_ctl &= ~(TWL4030_HF_CTL_RAMP_EN | TWL4030_HF_CTL_LOOP_EN
+-                              | TWL4030_HF_CTL_HB_EN);
+-              twl4030_write(w->codec, e->reg, hs_ctl);
++              /* HF ramp-down */
++              hs_ctl &= ~TWL4030_HF_CTL_LOOP_EN;
++              hs_ctl &= ~TWL4030_HF_CTL_HB_EN;
++              twl4030_write(codec, reg, hs_ctl);
++              hs_ctl &= ~TWL4030_HF_CTL_RAMP_EN;
++              twl4030_write(codec, reg, hs_ctl);
++              udelay(40);
++              hs_ctl &= ~TWL4030_HF_CTL_REF_EN;
++              twl4030_write(codec, reg, hs_ctl);
+       }
++}
++static int handsfreelpga_event(struct snd_soc_dapm_widget *w,
++              struct snd_kcontrol *kcontrol, int event)
++{
++      switch (event) {
++      case SND_SOC_DAPM_POST_PMU:
++              handsfree_ramp(w->codec, TWL4030_REG_HFL_CTL, 1);
++              break;
++      case SND_SOC_DAPM_POST_PMD:
++              handsfree_ramp(w->codec, TWL4030_REG_HFL_CTL, 0);
++              break;
++      }
+       return 0;
+ }
+-static int headsetl_event(struct snd_soc_dapm_widget *w,
++static int handsfreerpga_event(struct snd_soc_dapm_widget *w,
+               struct snd_kcontrol *kcontrol, int event)
+ {
+-      unsigned char hs_gain, hs_pop;
+-
+-      /* Save the current volume */
+-      hs_gain = twl4030_read_reg_cache(w->codec, TWL4030_REG_HS_GAIN_SET);
+-      hs_pop = twl4030_read_reg_cache(w->codec, TWL4030_REG_HS_POPN_SET);
+-
+       switch (event) {
+       case SND_SOC_DAPM_POST_PMU:
+-              /* Do the anti-pop/bias ramp enable according to the TRM */
+-              hs_pop |= TWL4030_VMID_EN;
+-              twl4030_write(w->codec, TWL4030_REG_HS_POPN_SET, hs_pop);
+-              /* Is this needed? Can we just use whatever gain here? */
+-              twl4030_write(w->codec, TWL4030_REG_HS_GAIN_SET,
+-                              (hs_gain & (~0x0f)) | 0x0a);
+-              hs_pop |= TWL4030_RAMP_EN;
+-              twl4030_write(w->codec, TWL4030_REG_HS_POPN_SET, hs_pop);
+-
+-              /* Restore the original volume */
+-              twl4030_write(w->codec, TWL4030_REG_HS_GAIN_SET, hs_gain);
++              handsfree_ramp(w->codec, TWL4030_REG_HFR_CTL, 1);
+               break;
+       case SND_SOC_DAPM_POST_PMD:
+-              /* Do the anti-pop/bias ramp disable according to the TRM */
++              handsfree_ramp(w->codec, TWL4030_REG_HFR_CTL, 0);
++              break;
++      }
++      return 0;
++}
++
++static void headset_ramp(struct snd_soc_codec *codec, int ramp)
++{
++      struct snd_soc_device *socdev = codec->socdev;
++      struct twl4030_setup_data *setup = socdev->codec_data;
++
++      unsigned char hs_gain, hs_pop;
++      struct twl4030_priv *twl4030 = codec->private_data;
++      /* Base values for ramp delay calculation: 2^19 - 2^26 */
++      unsigned int ramp_base[] = {524288, 1048576, 2097152, 4194304,
++                                  8388608, 16777216, 33554432, 67108864};
++
++      hs_gain = twl4030_read_reg_cache(codec, TWL4030_REG_HS_GAIN_SET);
++      hs_pop = twl4030_read_reg_cache(codec, TWL4030_REG_HS_POPN_SET);
++
++      /* Enable external mute control, this dramatically reduces
++       * the pop-noise */
++      if (setup && setup->hs_extmute) {
++              if (setup->set_hs_extmute) {
++                      setup->set_hs_extmute(1);
++              } else {
++                      hs_pop |= TWL4030_EXTMUTE;
++                      twl4030_write(codec, TWL4030_REG_HS_POPN_SET, hs_pop);
++              }
++      }
++
++      if (ramp) {
++              /* Headset ramp-up according to the TRM */
++              hs_pop |= TWL4030_VMID_EN;
++              twl4030_write(codec, TWL4030_REG_HS_POPN_SET, hs_pop);
++              twl4030_write(codec, TWL4030_REG_HS_GAIN_SET, hs_gain);
++              hs_pop |= TWL4030_RAMP_EN;
++              twl4030_write(codec, TWL4030_REG_HS_POPN_SET, hs_pop);
++              /* Wait ramp delay time + 1, so the VMID can settle */
++              mdelay((ramp_base[(hs_pop & TWL4030_RAMP_DELAY) >> 2] /
++                      twl4030->sysclk) + 1);
++      } else {
++              /* Headset ramp-down _not_ according to
++               * the TRM, but in a way that it is working */
+               hs_pop &= ~TWL4030_RAMP_EN;
+-              twl4030_write(w->codec, TWL4030_REG_HS_POPN_SET, hs_pop);
++              twl4030_write(codec, TWL4030_REG_HS_POPN_SET, hs_pop);
++              /* Wait ramp delay time + 1, so the VMID can settle */
++              mdelay((ramp_base[(hs_pop & TWL4030_RAMP_DELAY) >> 2] /
++                      twl4030->sysclk) + 1);
+               /* Bypass the reg_cache to mute the headset */
+               twl4030_i2c_write_u8(TWL4030_MODULE_AUDIO_VOICE,
+                                       hs_gain & (~0x0f),
+                                       TWL4030_REG_HS_GAIN_SET);
++
+               hs_pop &= ~TWL4030_VMID_EN;
+-              twl4030_write(w->codec, TWL4030_REG_HS_POPN_SET, hs_pop);
++              twl4030_write(codec, TWL4030_REG_HS_POPN_SET, hs_pop);
++      }
++
++      /* Disable external mute */
++      if (setup && setup->hs_extmute) {
++              if (setup->set_hs_extmute) {
++                      setup->set_hs_extmute(0);
++              } else {
++                      hs_pop &= ~TWL4030_EXTMUTE;
++                      twl4030_write(codec, TWL4030_REG_HS_POPN_SET, hs_pop);
++              }
++      }
++}
++
++static int headsetlpga_event(struct snd_soc_dapm_widget *w,
++              struct snd_kcontrol *kcontrol, int event)
++{
++      struct twl4030_priv *twl4030 = w->codec->private_data;
++
++      switch (event) {
++      case SND_SOC_DAPM_POST_PMU:
++              /* Do the ramp-up only once */
++              if (!twl4030->hsr_enabled)
++                      headset_ramp(w->codec, 1);
++
++              twl4030->hsl_enabled = 1;
++              break;
++      case SND_SOC_DAPM_POST_PMD:
++              /* Do the ramp-down only if both headsetL/R is disabled */
++              if (!twl4030->hsr_enabled)
++                      headset_ramp(w->codec, 0);
++
++              twl4030->hsl_enabled = 0;
++              break;
++      }
++      return 0;
++}
++
++static int headsetrpga_event(struct snd_soc_dapm_widget *w,
++              struct snd_kcontrol *kcontrol, int event)
++{
++      struct twl4030_priv *twl4030 = w->codec->private_data;
++
++      switch (event) {
++      case SND_SOC_DAPM_POST_PMU:
++              /* Do the ramp-up only once */
++              if (!twl4030->hsl_enabled)
++                      headset_ramp(w->codec, 1);
++
++              twl4030->hsr_enabled = 1;
++              break;
++      case SND_SOC_DAPM_POST_PMD:
++              /* Do the ramp-down only if both headsetL/R is disabled */
++              if (!twl4030->hsl_enabled)
++                      headset_ramp(w->codec, 0);
++
++              twl4030->hsr_enabled = 0;
+               break;
+       }
+       return 0;
+@@ -624,11 +730,23 @@
+       struct soc_mixer_control *m =
+               (struct soc_mixer_control *)w->kcontrols->private_value;
+       struct twl4030_priv *twl4030 = w->codec->private_data;
+-      unsigned char reg;
++      unsigned char reg, misc;
+       reg = twl4030_read_reg_cache(w->codec, m->reg);
+-      if (m->reg <= TWL4030_REG_ARXR2_APGA_CTL) {
++      /*
++       * bypass_state[0:3] - analog HiFi bypass
++       * bypass_state[4]   - analog voice bypass
++       * bypass_state[5]   - digital voice bypass
++       * bypass_state[6:7] - digital HiFi bypass
++       */
++      if (m->reg == TWL4030_REG_VSTPGA) {
++              /* Voice digital bypass */
++              if (reg)
++                      twl4030->bypass_state |= (1 << 5);
++              else
++                      twl4030->bypass_state &= ~(1 << 5);
++      } else if (m->reg <= TWL4030_REG_ARXR2_APGA_CTL) {
+               /* Analog bypass */
+               if (reg & (1 << m->shift))
+                       twl4030->bypass_state |=
+@@ -636,14 +754,28 @@
+               else
+                       twl4030->bypass_state &=
+                               ~(1 << (m->reg - TWL4030_REG_ARXL1_APGA_CTL));
++      } else if (m->reg == TWL4030_REG_VDL_APGA_CTL) {
++              /* Analog voice bypass */
++              if (reg & (1 << m->shift))
++                      twl4030->bypass_state |= (1 << 4);
++              else
++                      twl4030->bypass_state &= ~(1 << 4);
+       } else {
+               /* Digital bypass */
+               if (reg & (0x7 << m->shift))
+-                      twl4030->bypass_state |= (1 << (m->shift ? 5 : 4));
++                      twl4030->bypass_state |= (1 << (m->shift ? 7 : 6));
+               else
+-                      twl4030->bypass_state &= ~(1 << (m->shift ? 5 : 4));
++                      twl4030->bypass_state &= ~(1 << (m->shift ? 7 : 6));
+       }
++      /* Enable master analog loopback mode if any analog switch is enabled*/
++      misc = twl4030_read_reg_cache(w->codec, TWL4030_REG_MISC_SET_1);
++      if (twl4030->bypass_state & 0x1F)
++              misc |= TWL4030_FMLOOP_EN;
++      else
++              misc &= ~TWL4030_FMLOOP_EN;
++      twl4030_write(w->codec, TWL4030_REG_MISC_SET_1, misc);
++
+       if (w->codec->bias_level == SND_SOC_BIAS_STANDBY) {
+               if (twl4030->bypass_state)
+                       twl4030_codec_mute(w->codec, 0);
+@@ -810,6 +942,48 @@
+       return err;
+ }
++/* Codec operation modes */
++static const char *twl4030_op_modes_texts[] = {
++      "Option 2 (voice/audio)", "Option 1 (audio)"
++};
++
++static const struct soc_enum twl4030_op_modes_enum =
++      SOC_ENUM_SINGLE(TWL4030_REG_CODEC_MODE, 0,
++                      ARRAY_SIZE(twl4030_op_modes_texts),
++                      twl4030_op_modes_texts);
++
++static int snd_soc_put_twl4030_opmode_enum_double(struct snd_kcontrol *kcontrol,
++      struct snd_ctl_elem_value *ucontrol)
++{
++      struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
++      struct twl4030_priv *twl4030 = codec->private_data;
++      struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
++      unsigned short val;
++      unsigned short mask, bitmask;
++
++      if (twl4030->configured) {
++              printk(KERN_ERR "twl4030 operation mode cannot be "
++                      "changed on-the-fly\n");
++              return -EBUSY;
++      }
++
++      for (bitmask = 1; bitmask < e->max; bitmask <<= 1)
++              ;
++      if (ucontrol->value.enumerated.item[0] > e->max - 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->max - 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);
++}
++
+ /*
+  * FGAIN volume control:
+  * from -62 to 0 dB in 1 dB steps (mute instead of -63 dB)
+@@ -824,6 +998,12 @@
+ static DECLARE_TLV_DB_SCALE(digital_coarse_tlv, 0, 600, 0);
+ /*
++ * Voice Downlink GAIN volume control:
++ * from -37 to 12 dB in 1 dB steps (mute instead of -37 dB)
++ */
++static DECLARE_TLV_DB_SCALE(digital_voice_downlink_tlv, -3700, 100, 1);
++
++/*
+  * Analog playback gain
+  * -24 dB to 12 dB in 2 dB steps
+  */
+@@ -853,6 +1033,16 @@
+  */
+ static DECLARE_TLV_DB_SCALE(input_gain_tlv, 0, 600, 0);
++/* AVADC clock priority */
++static const char *twl4030_avadc_clk_priority_texts[] = {
++      "Voice high priority", "HiFi high priority"
++};
++
++static const struct soc_enum twl4030_avadc_clk_priority_enum =
++      SOC_ENUM_SINGLE(TWL4030_REG_AVADC_CTL, 2,
++                      ARRAY_SIZE(twl4030_avadc_clk_priority_texts),
++                      twl4030_avadc_clk_priority_texts);
++
+ static const char *twl4030_rampdelay_texts[] = {
+       "27/20/14 ms", "55/40/27 ms", "109/81/55 ms", "218/161/109 ms",
+       "437/323/218 ms", "874/645/437 ms", "1748/1291/874 ms",
+@@ -864,7 +1054,32 @@
+                       ARRAY_SIZE(twl4030_rampdelay_texts),
+                       twl4030_rampdelay_texts);
++/* Vibra H-bridge direction mode */
++static const char *twl4030_vibradirmode_texts[] = {
++      "Vibra H-bridge direction", "Audio data MSB",
++};
++
++static const struct soc_enum twl4030_vibradirmode_enum =
++      SOC_ENUM_SINGLE(TWL4030_REG_VIBRA_CTL, 5,
++                      ARRAY_SIZE(twl4030_vibradirmode_texts),
++                      twl4030_vibradirmode_texts);
++
++/* Vibra H-bridge direction */
++static const char *twl4030_vibradir_texts[] = {
++      "Positive polarity", "Negative polarity",
++};
++
++static const struct soc_enum twl4030_vibradir_enum =
++      SOC_ENUM_SINGLE(TWL4030_REG_VIBRA_CTL, 1,
++                      ARRAY_SIZE(twl4030_vibradir_texts),
++                      twl4030_vibradir_texts);
++
+ static const struct snd_kcontrol_new twl4030_snd_controls[] = {
++      /* Codec operation mode control */
++      SOC_ENUM_EXT("Codec Operation Mode", twl4030_op_modes_enum,
++              snd_soc_get_enum_double,
++              snd_soc_put_twl4030_opmode_enum_double),
++
+       /* Common playback gain controls */
+       SOC_DOUBLE_R_TLV("DAC1 Digital Fine Playback Volume",
+               TWL4030_REG_ARXL1PGA, TWL4030_REG_ARXR1PGA,
+@@ -893,6 +1108,16 @@
+               TWL4030_REG_ARXL2_APGA_CTL, TWL4030_REG_ARXR2_APGA_CTL,
+               1, 1, 0),
++      /* Common voice downlink gain controls */
++      SOC_SINGLE_TLV("DAC Voice Digital Downlink Volume",
++              TWL4030_REG_VRXPGA, 0, 0x31, 0, digital_voice_downlink_tlv),
++
++      SOC_SINGLE_TLV("DAC Voice Analog Downlink Volume",
++              TWL4030_REG_VDL_APGA_CTL, 3, 0x12, 1, analog_tlv),
++
++      SOC_SINGLE("DAC Voice Analog Downlink Switch",
++              TWL4030_REG_VDL_APGA_CTL, 1, 1, 0),
++
+       /* Separate output gain controls */
+       SOC_DOUBLE_R_TLV_TWL4030("PreDriv Playback Volume",
+               TWL4030_REG_PREDL_CTL, TWL4030_REG_PREDR_CTL,
+@@ -919,7 +1144,12 @@
+       SOC_DOUBLE_TLV("Analog Capture Volume", TWL4030_REG_ANAMIC_GAIN,
+               0, 3, 5, 0, input_gain_tlv),
++      SOC_ENUM("AVADC Clock Priority", twl4030_avadc_clk_priority_enum),
++
+       SOC_ENUM("HS ramp delay", twl4030_rampdelay_enum),
++
++      SOC_ENUM("Vibra H-bridge mode", twl4030_vibradirmode_enum),
++      SOC_ENUM("Vibra H-bridge direction", twl4030_vibradir_enum),
+ };
+ static const struct snd_soc_dapm_widget twl4030_dapm_widgets[] = {
+@@ -947,26 +1177,19 @@
+       SND_SOC_DAPM_OUTPUT("CARKITR"),
+       SND_SOC_DAPM_OUTPUT("HFL"),
+       SND_SOC_DAPM_OUTPUT("HFR"),
++      SND_SOC_DAPM_OUTPUT("VIBRA"),
+       /* DACs */
+-      SND_SOC_DAPM_DAC("DAC Right1", "Right Front Playback",
++      SND_SOC_DAPM_DAC("DAC Right1", "Right Front HiFi Playback",
+                       SND_SOC_NOPM, 0, 0),
+-      SND_SOC_DAPM_DAC("DAC Left1", "Left Front Playback",
++      SND_SOC_DAPM_DAC("DAC Left1", "Left Front HiFi Playback",
+                       SND_SOC_NOPM, 0, 0),
+-      SND_SOC_DAPM_DAC("DAC Right2", "Right Rear Playback",
++      SND_SOC_DAPM_DAC("DAC Right2", "Right Rear HiFi Playback",
+                       SND_SOC_NOPM, 0, 0),
+-      SND_SOC_DAPM_DAC("DAC Left2", "Left Rear Playback",
++      SND_SOC_DAPM_DAC("DAC Left2", "Left Rear HiFi Playback",
++                      SND_SOC_NOPM, 0, 0),
++      SND_SOC_DAPM_DAC("DAC Voice", "Voice Playback",
+                       SND_SOC_NOPM, 0, 0),
+-
+-      /* Analog PGAs */
+-      SND_SOC_DAPM_PGA("ARXR1_APGA", TWL4030_REG_ARXR1_APGA_CTL,
+-                      0, 0, NULL, 0),
+-      SND_SOC_DAPM_PGA("ARXL1_APGA", TWL4030_REG_ARXL1_APGA_CTL,
+-                      0, 0, NULL, 0),
+-      SND_SOC_DAPM_PGA("ARXR2_APGA", TWL4030_REG_ARXR2_APGA_CTL,
+-                      0, 0, NULL, 0),
+-      SND_SOC_DAPM_PGA("ARXL2_APGA", TWL4030_REG_ARXL2_APGA_CTL,
+-                      0, 0, NULL, 0),
+       /* Analog bypasses */
+       SND_SOC_DAPM_SWITCH_E("Right1 Analog Loopback", SND_SOC_NOPM, 0, 0,
+@@ -981,6 +1204,9 @@
+       SND_SOC_DAPM_SWITCH_E("Left2 Analog Loopback", SND_SOC_NOPM, 0, 0,
+                       &twl4030_dapm_abypassl2_control,
+                       bypass_event, SND_SOC_DAPM_POST_REG),
++      SND_SOC_DAPM_SWITCH_E("Voice Analog Loopback", SND_SOC_NOPM, 0, 0,
++                      &twl4030_dapm_abypassv_control,
++                      bypass_event, SND_SOC_DAPM_POST_REG),
+       /* Digital bypasses */
+       SND_SOC_DAPM_SWITCH_E("Left Digital Loopback", SND_SOC_NOPM, 0, 0,
+@@ -989,43 +1215,103 @@
+       SND_SOC_DAPM_SWITCH_E("Right Digital Loopback", SND_SOC_NOPM, 0, 0,
+                       &twl4030_dapm_dbypassr_control, bypass_event,
+                       SND_SOC_DAPM_POST_REG),
++      SND_SOC_DAPM_SWITCH_E("Voice Digital Loopback", SND_SOC_NOPM, 0, 0,
++                      &twl4030_dapm_dbypassv_control, bypass_event,
++                      SND_SOC_DAPM_POST_REG),
+-      SND_SOC_DAPM_MIXER("Analog R1 Playback Mixer", TWL4030_REG_AVDAC_CTL,
+-                      0, 0, NULL, 0),
+-      SND_SOC_DAPM_MIXER("Analog L1 Playback Mixer", TWL4030_REG_AVDAC_CTL,
+-                      1, 0, NULL, 0),
+-      SND_SOC_DAPM_MIXER("Analog R2 Playback Mixer", TWL4030_REG_AVDAC_CTL,
+-                      2, 0, NULL, 0),
+-      SND_SOC_DAPM_MIXER("Analog L2 Playback Mixer", TWL4030_REG_AVDAC_CTL,
+-                      3, 0, NULL, 0),
++      /* Digital mixers, power control for the physical DACs */
++      SND_SOC_DAPM_MIXER("Digital R1 Playback Mixer",
++                      TWL4030_REG_AVDAC_CTL, 0, 0, NULL, 0),
++      SND_SOC_DAPM_MIXER("Digital L1 Playback Mixer",
++                      TWL4030_REG_AVDAC_CTL, 1, 0, NULL, 0),
++      SND_SOC_DAPM_MIXER("Digital R2 Playback Mixer",
++                      TWL4030_REG_AVDAC_CTL, 2, 0, NULL, 0),
++      SND_SOC_DAPM_MIXER("Digital L2 Playback Mixer",
++                      TWL4030_REG_AVDAC_CTL, 3, 0, NULL, 0),
++      SND_SOC_DAPM_MIXER("Digital Voice Playback Mixer",
++                      TWL4030_REG_AVDAC_CTL, 4, 0, NULL, 0),
++
++      /* Analog mixers, power control for the physical PGAs */
++      SND_SOC_DAPM_MIXER("Analog R1 Playback Mixer",
++                      TWL4030_REG_ARXR1_APGA_CTL, 0, 0, NULL, 0),
++      SND_SOC_DAPM_MIXER("Analog L1 Playback Mixer",
++                      TWL4030_REG_ARXL1_APGA_CTL, 0, 0, NULL, 0),
++      SND_SOC_DAPM_MIXER("Analog R2 Playback Mixer",
++                      TWL4030_REG_ARXR2_APGA_CTL, 0, 0, NULL, 0),
++      SND_SOC_DAPM_MIXER("Analog L2 Playback Mixer",
++                      TWL4030_REG_ARXL2_APGA_CTL, 0, 0, NULL, 0),
++      SND_SOC_DAPM_MIXER("Analog Voice Playback Mixer",
++                      TWL4030_REG_VDL_APGA_CTL, 0, 0, NULL, 0),
+-      /* Output MUX controls */
++      /* Output MIXER controls */
+       /* Earpiece */
+-      SND_SOC_DAPM_VALUE_MUX("Earpiece Mux", SND_SOC_NOPM, 0, 0,
+-              &twl4030_dapm_earpiece_control),
++      SND_SOC_DAPM_MIXER("Earpiece Mixer", SND_SOC_NOPM, 0, 0,
++                      &twl4030_dapm_earpiece_controls[0],
++                      ARRAY_SIZE(twl4030_dapm_earpiece_controls)),
++      SND_SOC_DAPM_PGA_E("Earpiece PGA", SND_SOC_NOPM,
++                      0, 0, NULL, 0, earpiecepga_event,
++                      SND_SOC_DAPM_POST_PMU|SND_SOC_DAPM_POST_PMD),
+       /* PreDrivL/R */
+-      SND_SOC_DAPM_VALUE_MUX("PredriveL Mux", SND_SOC_NOPM, 0, 0,
+-              &twl4030_dapm_predrivel_control),
+-      SND_SOC_DAPM_VALUE_MUX("PredriveR Mux", SND_SOC_NOPM, 0, 0,
+-              &twl4030_dapm_predriver_control),
++      SND_SOC_DAPM_MIXER("PredriveL Mixer", SND_SOC_NOPM, 0, 0,
++                      &twl4030_dapm_predrivel_controls[0],
++                      ARRAY_SIZE(twl4030_dapm_predrivel_controls)),
++      SND_SOC_DAPM_PGA_E("PredriveL PGA", SND_SOC_NOPM,
++                      0, 0, NULL, 0, predrivelpga_event,
++                      SND_SOC_DAPM_POST_PMU|SND_SOC_DAPM_POST_PMD),
++      SND_SOC_DAPM_MIXER("PredriveR Mixer", SND_SOC_NOPM, 0, 0,
++                      &twl4030_dapm_predriver_controls[0],
++                      ARRAY_SIZE(twl4030_dapm_predriver_controls)),
++      SND_SOC_DAPM_PGA_E("PredriveR PGA", SND_SOC_NOPM,
++                      0, 0, NULL, 0, predriverpga_event,
++                      SND_SOC_DAPM_POST_PMU|SND_SOC_DAPM_POST_PMD),
+       /* HeadsetL/R */
+-      SND_SOC_DAPM_MUX_E("HeadsetL Mux", SND_SOC_NOPM, 0, 0,
+-              &twl4030_dapm_hsol_control, headsetl_event,
+-              SND_SOC_DAPM_POST_PMU|SND_SOC_DAPM_POST_PMD),
+-      SND_SOC_DAPM_MUX("HeadsetR Mux", SND_SOC_NOPM, 0, 0,
+-              &twl4030_dapm_hsor_control),
++      SND_SOC_DAPM_MIXER("HeadsetL Mixer", SND_SOC_NOPM, 0, 0,
++                      &twl4030_dapm_hsol_controls[0],
++                      ARRAY_SIZE(twl4030_dapm_hsol_controls)),
++      SND_SOC_DAPM_PGA_E("HeadsetL PGA", SND_SOC_NOPM,
++                      0, 0, NULL, 0, headsetlpga_event,
++                      SND_SOC_DAPM_POST_PMU|SND_SOC_DAPM_POST_PMD),
++      SND_SOC_DAPM_MIXER("HeadsetR Mixer", SND_SOC_NOPM, 0, 0,
++                      &twl4030_dapm_hsor_controls[0],
++                      ARRAY_SIZE(twl4030_dapm_hsor_controls)),
++      SND_SOC_DAPM_PGA_E("HeadsetR PGA", SND_SOC_NOPM,
++                      0, 0, NULL, 0, headsetrpga_event,
++                      SND_SOC_DAPM_POST_PMU|SND_SOC_DAPM_POST_PMD),
+       /* CarkitL/R */
+-      SND_SOC_DAPM_MUX("CarkitL Mux", SND_SOC_NOPM, 0, 0,
+-              &twl4030_dapm_carkitl_control),
+-      SND_SOC_DAPM_MUX("CarkitR Mux", SND_SOC_NOPM, 0, 0,
+-              &twl4030_dapm_carkitr_control),
++      SND_SOC_DAPM_MIXER("CarkitL Mixer", SND_SOC_NOPM, 0, 0,
++                      &twl4030_dapm_carkitl_controls[0],
++                      ARRAY_SIZE(twl4030_dapm_carkitl_controls)),
++      SND_SOC_DAPM_PGA_E("CarkitL PGA", SND_SOC_NOPM,
++                      0, 0, NULL, 0, carkitlpga_event,
++                      SND_SOC_DAPM_POST_PMU|SND_SOC_DAPM_POST_PMD),
++      SND_SOC_DAPM_MIXER("CarkitR Mixer", SND_SOC_NOPM, 0, 0,
++                      &twl4030_dapm_carkitr_controls[0],
++                      ARRAY_SIZE(twl4030_dapm_carkitr_controls)),
++      SND_SOC_DAPM_PGA_E("CarkitR PGA", SND_SOC_NOPM,
++                      0, 0, NULL, 0, carkitrpga_event,
++                      SND_SOC_DAPM_POST_PMU|SND_SOC_DAPM_POST_PMD),
++
++      /* Output MUX controls */
+       /* HandsfreeL/R */
+-      SND_SOC_DAPM_MUX_E("HandsfreeL Mux", TWL4030_REG_HFL_CTL, 5, 0,
+-              &twl4030_dapm_handsfreel_control, handsfree_event,
+-              SND_SOC_DAPM_POST_PMU|SND_SOC_DAPM_POST_PMD),
+-      SND_SOC_DAPM_MUX_E("HandsfreeR Mux", TWL4030_REG_HFR_CTL, 5, 0,
+-              &twl4030_dapm_handsfreer_control, handsfree_event,
+-              SND_SOC_DAPM_POST_PMU|SND_SOC_DAPM_POST_PMD),
++      SND_SOC_DAPM_MUX("HandsfreeL Mux", SND_SOC_NOPM, 0, 0,
++              &twl4030_dapm_handsfreel_control),
++      SND_SOC_DAPM_SWITCH("HandsfreeL", SND_SOC_NOPM, 0, 0,
++                      &twl4030_dapm_handsfreelmute_control),
++      SND_SOC_DAPM_PGA_E("HandsfreeL PGA", SND_SOC_NOPM,
++                      0, 0, NULL, 0, handsfreelpga_event,
++                      SND_SOC_DAPM_POST_PMU|SND_SOC_DAPM_POST_PMD),
++      SND_SOC_DAPM_MUX("HandsfreeR Mux", SND_SOC_NOPM, 5, 0,
++              &twl4030_dapm_handsfreer_control),
++      SND_SOC_DAPM_SWITCH("HandsfreeR", SND_SOC_NOPM, 0, 0,
++                      &twl4030_dapm_handsfreermute_control),
++      SND_SOC_DAPM_PGA_E("HandsfreeR PGA", SND_SOC_NOPM,
++                      0, 0, NULL, 0, handsfreerpga_event,
++                      SND_SOC_DAPM_POST_PMU|SND_SOC_DAPM_POST_PMD),
++      /* Vibra */
++      SND_SOC_DAPM_MUX("Vibra Mux", TWL4030_REG_VIBRA_CTL, 0, 0,
++              &twl4030_dapm_vibra_control),
++      SND_SOC_DAPM_MUX("Vibra Route", SND_SOC_NOPM, 0, 0,
++              &twl4030_dapm_vibrapath_control),
+       /* Introducing four virtual ADC, since TWL4030 have four channel for
+          capture */
+@@ -1050,11 +1336,15 @@
+               SND_SOC_DAPM_POST_PMU|SND_SOC_DAPM_POST_PMD|
+               SND_SOC_DAPM_POST_REG),
+-      /* Analog input muxes with switch for the capture amplifiers */
+-      SND_SOC_DAPM_VALUE_MUX("Analog Left Capture Route",
+-              TWL4030_REG_ANAMICL, 4, 0, &twl4030_dapm_analoglmic_control),
+-      SND_SOC_DAPM_VALUE_MUX("Analog Right Capture Route",
+-              TWL4030_REG_ANAMICR, 4, 0, &twl4030_dapm_analogrmic_control),
++      /* Analog input mixers for the capture amplifiers */
++      SND_SOC_DAPM_MIXER("Analog Left",
++              TWL4030_REG_ANAMICL, 4, 0,
++              &twl4030_dapm_analoglmic_controls[0],
++              ARRAY_SIZE(twl4030_dapm_analoglmic_controls)),
++      SND_SOC_DAPM_MIXER("Analog Right",
++              TWL4030_REG_ANAMICR, 4, 0,
++              &twl4030_dapm_analogrmic_controls[0],
++              ARRAY_SIZE(twl4030_dapm_analogrmic_controls)),
+       SND_SOC_DAPM_PGA("ADC Physical Left",
+               TWL4030_REG_AVADC_CTL, 3, 0, NULL, 0),
+@@ -1073,74 +1363,103 @@
+ };
+ static const struct snd_soc_dapm_route intercon[] = {
+-      {"Analog L1 Playback Mixer", NULL, "DAC Left1"},
+-      {"Analog R1 Playback Mixer", NULL, "DAC Right1"},
+-      {"Analog L2 Playback Mixer", NULL, "DAC Left2"},
+-      {"Analog R2 Playback Mixer", NULL, "DAC Right2"},
+-
+-      {"ARXL1_APGA", NULL, "Analog L1 Playback Mixer"},
+-      {"ARXR1_APGA", NULL, "Analog R1 Playback Mixer"},
+-      {"ARXL2_APGA", NULL, "Analog L2 Playback Mixer"},
+-      {"ARXR2_APGA", NULL, "Analog R2 Playback Mixer"},
++      {"Digital L1 Playback Mixer", NULL, "DAC Left1"},
++      {"Digital R1 Playback Mixer", NULL, "DAC Right1"},
++      {"Digital L2 Playback Mixer", NULL, "DAC Left2"},
++      {"Digital R2 Playback Mixer", NULL, "DAC Right2"},
++      {"Digital Voice Playback Mixer", NULL, "DAC Voice"},
++
++      {"Analog L1 Playback Mixer", NULL, "Digital L1 Playback Mixer"},
++      {"Analog R1 Playback Mixer", NULL, "Digital R1 Playback Mixer"},
++      {"Analog L2 Playback Mixer", NULL, "Digital L2 Playback Mixer"},
++      {"Analog R2 Playback Mixer", NULL, "Digital R2 Playback Mixer"},
++      {"Analog Voice Playback Mixer", NULL, "Digital Voice Playback Mixer"},
+       /* Internal playback routings */
+       /* Earpiece */
+-      {"Earpiece Mux", "DACL1", "ARXL1_APGA"},
+-      {"Earpiece Mux", "DACL2", "ARXL2_APGA"},
+-      {"Earpiece Mux", "DACR1", "ARXR1_APGA"},
++      {"Earpiece Mixer", "Voice", "Analog Voice Playback Mixer"},
++      {"Earpiece Mixer", "AudioL1", "Analog L1 Playback Mixer"},
++      {"Earpiece Mixer", "AudioL2", "Analog L2 Playback Mixer"},
++      {"Earpiece Mixer", "AudioR1", "Analog R1 Playback Mixer"},
++      {"Earpiece PGA", NULL, "Earpiece Mixer"},
+       /* PreDrivL */
+-      {"PredriveL Mux", "DACL1", "ARXL1_APGA"},
+-      {"PredriveL Mux", "DACL2", "ARXL2_APGA"},
+-      {"PredriveL Mux", "DACR2", "ARXR2_APGA"},
++      {"PredriveL Mixer", "Voice", "Analog Voice Playback Mixer"},
++      {"PredriveL Mixer", "AudioL1", "Analog L1 Playback Mixer"},
++      {"PredriveL Mixer", "AudioL2", "Analog L2 Playback Mixer"},
++      {"PredriveL Mixer", "AudioR2", "Analog R2 Playback Mixer"},
++      {"PredriveL PGA", NULL, "PredriveL Mixer"},
+       /* PreDrivR */
+-      {"PredriveR Mux", "DACR1", "ARXR1_APGA"},
+-      {"PredriveR Mux", "DACR2", "ARXR2_APGA"},
+-      {"PredriveR Mux", "DACL2", "ARXL2_APGA"},
++      {"PredriveR Mixer", "Voice", "Analog Voice Playback Mixer"},
++      {"PredriveR Mixer", "AudioR1", "Analog R1 Playback Mixer"},
++      {"PredriveR Mixer", "AudioR2", "Analog R2 Playback Mixer"},
++      {"PredriveR Mixer", "AudioL2", "Analog L2 Playback Mixer"},
++      {"PredriveR PGA", NULL, "PredriveR Mixer"},
+       /* HeadsetL */
+-      {"HeadsetL Mux", "DACL1", "ARXL1_APGA"},
+-      {"HeadsetL Mux", "DACL2", "ARXL2_APGA"},
++      {"HeadsetL Mixer", "Voice", "Analog Voice Playback Mixer"},
++      {"HeadsetL Mixer", "AudioL1", "Analog L1 Playback Mixer"},
++      {"HeadsetL Mixer", "AudioL2", "Analog L2 Playback Mixer"},
++      {"HeadsetL PGA", NULL, "HeadsetL Mixer"},
+       /* HeadsetR */
+-      {"HeadsetR Mux", "DACR1", "ARXR1_APGA"},
+-      {"HeadsetR Mux", "DACR2", "ARXR2_APGA"},
++      {"HeadsetR Mixer", "Voice", "Analog Voice Playback Mixer"},
++      {"HeadsetR Mixer", "AudioR1", "Analog R1 Playback Mixer"},
++      {"HeadsetR Mixer", "AudioR2", "Analog R2 Playback Mixer"},
++      {"HeadsetR PGA", NULL, "HeadsetR Mixer"},
+       /* CarkitL */
+-      {"CarkitL Mux", "DACL1", "ARXL1_APGA"},
+-      {"CarkitL Mux", "DACL2", "ARXL2_APGA"},
++      {"CarkitL Mixer", "Voice", "Analog Voice Playback Mixer"},
++      {"CarkitL Mixer", "AudioL1", "Analog L1 Playback Mixer"},
++      {"CarkitL Mixer", "AudioL2", "Analog L2 Playback Mixer"},
++      {"CarkitL PGA", NULL, "CarkitL Mixer"},
+       /* CarkitR */
+-      {"CarkitR Mux", "DACR1", "ARXR1_APGA"},
+-      {"CarkitR Mux", "DACR2", "ARXR2_APGA"},
++      {"CarkitR Mixer", "Voice", "Analog Voice Playback Mixer"},
++      {"CarkitR Mixer", "AudioR1", "Analog R1 Playback Mixer"},
++      {"CarkitR Mixer", "AudioR2", "Analog R2 Playback Mixer"},
++      {"CarkitR PGA", NULL, "CarkitR Mixer"},
+       /* HandsfreeL */
+-      {"HandsfreeL Mux", "DACL1", "ARXL1_APGA"},
+-      {"HandsfreeL Mux", "DACL2", "ARXL2_APGA"},
+-      {"HandsfreeL Mux", "DACR2", "ARXR2_APGA"},
++      {"HandsfreeL Mux", "Voice", "Analog Voice Playback Mixer"},
++      {"HandsfreeL Mux", "AudioL1", "Analog L1 Playback Mixer"},
++      {"HandsfreeL Mux", "AudioL2", "Analog L2 Playback Mixer"},
++      {"HandsfreeL Mux", "AudioR2", "Analog R2 Playback Mixer"},
++      {"HandsfreeL", "Switch", "HandsfreeL Mux"},
++      {"HandsfreeL PGA", NULL, "HandsfreeL"},
+       /* HandsfreeR */
+-      {"HandsfreeR Mux", "DACR1", "ARXR1_APGA"},
+-      {"HandsfreeR Mux", "DACR2", "ARXR2_APGA"},
+-      {"HandsfreeR Mux", "DACL2", "ARXL2_APGA"},
++      {"HandsfreeR Mux", "Voice", "Analog Voice Playback Mixer"},
++      {"HandsfreeR Mux", "AudioR1", "Analog R1 Playback Mixer"},
++      {"HandsfreeR Mux", "AudioR2", "Analog R2 Playback Mixer"},
++      {"HandsfreeR Mux", "AudioL2", "Analog L2 Playback Mixer"},
++      {"HandsfreeR", "Switch", "HandsfreeR Mux"},
++      {"HandsfreeR PGA", NULL, "HandsfreeR"},
++      /* Vibra */
++      {"Vibra Mux", "AudioL1", "DAC Left1"},
++      {"Vibra Mux", "AudioR1", "DAC Right1"},
++      {"Vibra Mux", "AudioL2", "DAC Left2"},
++      {"Vibra Mux", "AudioR2", "DAC Right2"},
+       /* outputs */
+-      {"OUTL", NULL, "ARXL2_APGA"},
+-      {"OUTR", NULL, "ARXR2_APGA"},
+-      {"EARPIECE", NULL, "Earpiece Mux"},
+-      {"PREDRIVEL", NULL, "PredriveL Mux"},
+-      {"PREDRIVER", NULL, "PredriveR Mux"},
+-      {"HSOL", NULL, "HeadsetL Mux"},
+-      {"HSOR", NULL, "HeadsetR Mux"},
+-      {"CARKITL", NULL, "CarkitL Mux"},
+-      {"CARKITR", NULL, "CarkitR Mux"},
+-      {"HFL", NULL, "HandsfreeL Mux"},
+-      {"HFR", NULL, "HandsfreeR Mux"},
++      {"OUTL", NULL, "Analog L2 Playback Mixer"},
++      {"OUTR", NULL, "Analog R2 Playback Mixer"},
++      {"EARPIECE", NULL, "Earpiece PGA"},
++      {"PREDRIVEL", NULL, "PredriveL PGA"},
++      {"PREDRIVER", NULL, "PredriveR PGA"},
++      {"HSOL", NULL, "HeadsetL PGA"},
++      {"HSOR", NULL, "HeadsetR PGA"},
++      {"CARKITL", NULL, "CarkitL PGA"},
++      {"CARKITR", NULL, "CarkitR PGA"},
++      {"HFL", NULL, "HandsfreeL PGA"},
++      {"HFR", NULL, "HandsfreeR PGA"},
++      {"Vibra Route", "Audio", "Vibra Mux"},
++      {"VIBRA", NULL, "Vibra Route"},
+       /* Capture path */
+-      {"Analog Left Capture Route", "Main mic", "MAINMIC"},
+-      {"Analog Left Capture Route", "Headset mic", "HSMIC"},
+-      {"Analog Left Capture Route", "AUXL", "AUXL"},
+-      {"Analog Left Capture Route", "Carkit mic", "CARKITMIC"},
++      {"Analog Left", "Main Mic Capture Switch", "MAINMIC"},
++      {"Analog Left", "Headset Mic Capture Switch", "HSMIC"},
++      {"Analog Left", "AUXL Capture Switch", "AUXL"},
++      {"Analog Left", "Carkit Mic Capture Switch", "CARKITMIC"},
+-      {"Analog Right Capture Route", "Sub mic", "SUBMIC"},
+-      {"Analog Right Capture Route", "AUXR", "AUXR"},
++      {"Analog Right", "Sub Mic Capture Switch", "SUBMIC"},
++      {"Analog Right", "AUXR Capture Switch", "AUXR"},
+-      {"ADC Physical Left", NULL, "Analog Left Capture Route"},
+-      {"ADC Physical Right", NULL, "Analog Right Capture Route"},
++      {"ADC Physical Left", NULL, "Analog Left"},
++      {"ADC Physical Right", NULL, "Analog Right"},
+       {"Digimic0 Enable", NULL, "DIGIMIC0"},
+       {"Digimic1 Enable", NULL, "DIGIMIC1"},
+@@ -1164,22 +1483,26 @@
+       {"ADC Virtual Right2", NULL, "TX2 Capture Route"},
+       /* Analog bypass routes */
+-      {"Right1 Analog Loopback", "Switch", "Analog Right Capture Route"},
+-      {"Left1 Analog Loopback", "Switch", "Analog Left Capture Route"},
+-      {"Right2 Analog Loopback", "Switch", "Analog Right Capture Route"},
+-      {"Left2 Analog Loopback", "Switch", "Analog Left Capture Route"},
++      {"Right1 Analog Loopback", "Switch", "Analog Right"},
++      {"Left1 Analog Loopback", "Switch", "Analog Left"},
++      {"Right2 Analog Loopback", "Switch", "Analog Right"},
++      {"Left2 Analog Loopback", "Switch", "Analog Left"},
++      {"Voice Analog Loopback", "Switch", "Analog Left"},
+       {"Analog R1 Playback Mixer", NULL, "Right1 Analog Loopback"},
+       {"Analog L1 Playback Mixer", NULL, "Left1 Analog Loopback"},
+       {"Analog R2 Playback Mixer", NULL, "Right2 Analog Loopback"},
+       {"Analog L2 Playback Mixer", NULL, "Left2 Analog Loopback"},
++      {"Analog Voice Playback Mixer", NULL, "Voice Analog Loopback"},
+       /* Digital bypass routes */
+       {"Right Digital Loopback", "Volume", "TX1 Capture Route"},
+       {"Left Digital Loopback", "Volume", "TX1 Capture Route"},
++      {"Voice Digital Loopback", "Volume", "TX2 Capture Route"},
+-      {"Analog R2 Playback Mixer", NULL, "Right Digital Loopback"},
+-      {"Analog L2 Playback Mixer", NULL, "Left Digital Loopback"},
++      {"Digital R2 Playback Mixer", NULL, "Right Digital Loopback"},
++      {"Digital L2 Playback Mixer", NULL, "Left Digital Loopback"},
++      {"Digital Voice Playback Mixer", NULL, "Voice Digital Loopback"},
+ };
+@@ -1226,6 +1549,58 @@
+       return 0;
+ }
++static void twl4030_constraints(struct twl4030_priv *twl4030,
++                              struct snd_pcm_substream *mst_substream)
++{
++      struct snd_pcm_substream *slv_substream;
++
++      /* Pick the stream, which need to be constrained */
++      if (mst_substream == twl4030->master_substream)
++              slv_substream = twl4030->slave_substream;
++      else if (mst_substream == twl4030->slave_substream)
++              slv_substream = twl4030->master_substream;
++      else /* This should not happen.. */
++              return;
++
++      /* Set the constraints according to the already configured stream */
++      snd_pcm_hw_constraint_minmax(slv_substream->runtime,
++                              SNDRV_PCM_HW_PARAM_RATE,
++                              twl4030->rate,
++                              twl4030->rate);
++
++      snd_pcm_hw_constraint_minmax(slv_substream->runtime,
++                              SNDRV_PCM_HW_PARAM_SAMPLE_BITS,
++                              twl4030->sample_bits,
++                              twl4030->sample_bits);
++
++      snd_pcm_hw_constraint_minmax(slv_substream->runtime,
++                              SNDRV_PCM_HW_PARAM_CHANNELS,
++                              twl4030->channels,
++                              twl4030->channels);
++}
++
++/* In case of 4 channel mode, the RX1 L/R for playback and the TX2 L/R for
++ * capture has to be enabled/disabled. */
++static void twl4030_tdm_enable(struct snd_soc_codec *codec, int direction,
++                              int enable)
++{
++      u8 reg, mask;
++
++      reg = twl4030_read_reg_cache(codec, TWL4030_REG_OPTION);
++
++      if (direction == SNDRV_PCM_STREAM_PLAYBACK)
++              mask = TWL4030_ARXL1_VRX_EN | TWL4030_ARXR1_EN;
++      else
++              mask = TWL4030_ATXL2_VTXL_EN | TWL4030_ATXR2_VTXR_EN;
++
++      if (enable)
++              reg |= mask;
++      else
++              reg &= ~mask;
++
++      twl4030_write(codec, TWL4030_REG_OPTION, reg);
++}
++
+ static int twl4030_startup(struct snd_pcm_substream *substream,
+                          struct snd_soc_dai *dai)
+ {
+@@ -1234,26 +1609,25 @@
+       struct snd_soc_codec *codec = socdev->card->codec;
+       struct twl4030_priv *twl4030 = codec->private_data;
+-      /* If we already have a playback or capture going then constrain
+-       * this substream to match it.
+-       */
+       if (twl4030->master_substream) {
+-              struct snd_pcm_runtime *master_runtime;
+-              master_runtime = twl4030->master_substream->runtime;
+-
+-              snd_pcm_hw_constraint_minmax(substream->runtime,
+-                                           SNDRV_PCM_HW_PARAM_RATE,
+-                                           master_runtime->rate,
+-                                           master_runtime->rate);
+-
+-              snd_pcm_hw_constraint_minmax(substream->runtime,
+-                                           SNDRV_PCM_HW_PARAM_SAMPLE_BITS,
+-                                           master_runtime->sample_bits,
+-                                           master_runtime->sample_bits);
+-
+               twl4030->slave_substream = substream;
+-      } else
++              /* The DAI has one configuration for playback and capture, so
++               * if the DAI has been already configured then constrain this
++               * substream to match it. */
++              if (twl4030->configured)
++                      twl4030_constraints(twl4030, twl4030->master_substream);
++      } else {
++              if (!(twl4030_read_reg_cache(codec, TWL4030_REG_CODEC_MODE) &
++                      TWL4030_OPTION_1)) {
++                      /* In option2 4 channel is not supported, set the
++                       * constraint for the first stream for channels, the
++                       * second stream will 'inherit' this cosntraint */
++                      snd_pcm_hw_constraint_minmax(substream->runtime,
++                                              SNDRV_PCM_HW_PARAM_CHANNELS,
++                                              2, 2);
++              }
+               twl4030->master_substream = substream;
++      }
+       return 0;
+ }
+@@ -1270,6 +1644,17 @@
+               twl4030->master_substream = twl4030->slave_substream;
+       twl4030->slave_substream = NULL;
++
++      /* If all streams are closed, or the remaining stream has not yet
++       * been configured than set the DAI as not configured. */
++      if (!twl4030->master_substream)
++              twl4030->configured = 0;
++       else if (!twl4030->master_substream->runtime->channels)
++              twl4030->configured = 0;
++
++       /* If the closing substream had 4 channel, do the necessary cleanup */
++      if (substream->runtime->channels == 4)
++              twl4030_tdm_enable(codec, substream->stream, 0);
+ }
+ static int twl4030_hw_params(struct snd_pcm_substream *substream,
+@@ -1282,8 +1667,22 @@
+       struct twl4030_priv *twl4030 = codec->private_data;
+       u8 mode, old_mode, format, old_format;
+-      if (substream == twl4030->slave_substream)
+-              /* Ignoring hw_params for slave substream */
++       /* If the substream has 4 channel, do the necessary setup */
++      if (params_channels(params) == 4) {
++              format = twl4030_read_reg_cache(codec, TWL4030_REG_AUDIO_IF);
++              mode = twl4030_read_reg_cache(codec, TWL4030_REG_CODEC_MODE);
++
++              /* Safety check: are we in the correct operating mode and
++               * the interface is in TDM mode? */
++              if ((mode & TWL4030_OPTION_1) &&
++                  ((format & TWL4030_AIF_FORMAT) == TWL4030_AIF_FORMAT_TDM))
++                      twl4030_tdm_enable(codec, substream->stream, 1);
++              else
++                      return -EINVAL;
++      }
++
++      if (twl4030->configured)
++              /* Ignoring hw_params for already configured DAI */
+               return 0;
+       /* bit rate */
+@@ -1363,6 +1762,21 @@
+               /* set CODECPDZ afterwards */
+               twl4030_codec_enable(codec, 1);
+       }
++
++      /* Store the important parameters for the DAI configuration and set
++       * the DAI as configured */
++      twl4030->configured = 1;
++      twl4030->rate = params_rate(params);
++      twl4030->sample_bits = hw_param_interval(params,
++                                      SNDRV_PCM_HW_PARAM_SAMPLE_BITS)->min;
++      twl4030->channels = params_channels(params);
++
++      /* If both playback and capture streams are open, and one of them
++       * is setting the hw parameters right now (since we are here), set
++       * constraints to the other stream to match the current one. */
++      if (twl4030->slave_substream)
++              twl4030_constraints(twl4030, substream);
++
+       return 0;
+ }
+@@ -1370,17 +1784,21 @@
+               int clk_id, unsigned int freq, int dir)
+ {
+       struct snd_soc_codec *codec = codec_dai->codec;
++      struct twl4030_priv *twl4030 = codec->private_data;
+       u8 infreq;
+       switch (freq) {
+       case 19200000:
+               infreq = TWL4030_APLL_INFREQ_19200KHZ;
++              twl4030->sysclk = 19200;
+               break;
+       case 26000000:
+               infreq = TWL4030_APLL_INFREQ_26000KHZ;
++              twl4030->sysclk = 26000;
+               break;
+       case 38400000:
+               infreq = TWL4030_APLL_INFREQ_38400KHZ;
++              twl4030->sysclk = 38400;
+               break;
+       default:
+               printk(KERN_ERR "TWL4030 set sysclk: unknown rate %d\n",
+@@ -1424,6 +1842,9 @@
+       case SND_SOC_DAIFMT_I2S:
+               format |= TWL4030_AIF_FORMAT_CODEC;
+               break;
++      case SND_SOC_DAIFMT_DSP_A:
++              format |= TWL4030_AIF_FORMAT_TDM;
++              break;
+       default:
+               return -EINVAL;
+       }
+@@ -1443,6 +1864,206 @@
+       return 0;
+ }
++static int twl4030_set_tristate(struct snd_soc_dai *dai, int tristate)
++{
++      struct snd_soc_codec *codec = dai->codec;
++      u8 reg = twl4030_read_reg_cache(codec, TWL4030_REG_AUDIO_IF);
++
++      if (tristate)
++              reg |= TWL4030_AIF_TRI_EN;
++      else
++              reg &= ~TWL4030_AIF_TRI_EN;
++
++      return twl4030_write(codec, TWL4030_REG_AUDIO_IF, reg);
++}
++
++/* In case of voice mode, the RX1 L(VRX) for downlink and the TX2 L/R
++ * (VTXL, VTXR) for uplink has to be enabled/disabled. */
++static void twl4030_voice_enable(struct snd_soc_codec *codec, int direction,
++                              int enable)
++{
++      u8 reg, mask;
++
++      reg = twl4030_read_reg_cache(codec, TWL4030_REG_OPTION);
++
++      if (direction == SNDRV_PCM_STREAM_PLAYBACK)
++              mask = TWL4030_ARXL1_VRX_EN;
++      else
++              mask = TWL4030_ATXL2_VTXL_EN | TWL4030_ATXR2_VTXR_EN;
++
++      if (enable)
++              reg |= mask;
++      else
++              reg &= ~mask;
++
++      twl4030_write(codec, TWL4030_REG_OPTION, reg);
++}
++
++static int twl4030_voice_startup(struct snd_pcm_substream *substream,
++              struct snd_soc_dai *dai)
++{
++      struct snd_soc_pcm_runtime *rtd = substream->private_data;
++      struct snd_soc_device *socdev = rtd->socdev;
++      struct snd_soc_codec *codec = socdev->card->codec;
++      u8 infreq;
++      u8 mode;
++
++      /* If the system master clock is not 26MHz, the voice PCM interface is
++       * not avilable.
++       */
++      infreq = twl4030_read_reg_cache(codec, TWL4030_REG_APLL_CTL)
++              & TWL4030_APLL_INFREQ;
++
++      if (infreq != TWL4030_APLL_INFREQ_26000KHZ) {
++              printk(KERN_ERR "TWL4030 voice startup: "
++                      "MCLK is not 26MHz, call set_sysclk() on init\n");
++              return -EINVAL;
++      }
++
++      /* If the codec mode is not option2, the voice PCM interface is not
++       * avilable.
++       */
++      mode = twl4030_read_reg_cache(codec, TWL4030_REG_CODEC_MODE)
++              & TWL4030_OPT_MODE;
++
++      if (mode != TWL4030_OPTION_2) {
++              printk(KERN_ERR "TWL4030 voice startup: "
++                      "the codec mode is not option2\n");
++              return -EINVAL;
++      }
++
++      return 0;
++}
++
++static void twl4030_voice_shutdown(struct snd_pcm_substream *substream,
++                              struct snd_soc_dai *dai)
++{
++      struct snd_soc_pcm_runtime *rtd = substream->private_data;
++      struct snd_soc_device *socdev = rtd->socdev;
++      struct snd_soc_codec *codec = socdev->card->codec;
++
++      /* Enable voice digital filters */
++      twl4030_voice_enable(codec, substream->stream, 0);
++}
++
++static int twl4030_voice_hw_params(struct snd_pcm_substream *substream,
++              struct snd_pcm_hw_params *params, struct snd_soc_dai *dai)
++{
++      struct snd_soc_pcm_runtime *rtd = substream->private_data;
++      struct snd_soc_device *socdev = rtd->socdev;
++      struct snd_soc_codec *codec = socdev->card->codec;
++      u8 old_mode, mode;
++
++      /* Enable voice digital filters */
++      twl4030_voice_enable(codec, substream->stream, 1);
++
++      /* bit rate */
++      old_mode = twl4030_read_reg_cache(codec, TWL4030_REG_CODEC_MODE)
++              & ~(TWL4030_CODECPDZ);
++      mode = old_mode;
++
++      switch (params_rate(params)) {
++      case 8000:
++              mode &= ~(TWL4030_SEL_16K);
++              break;
++      case 16000:
++              mode |= TWL4030_SEL_16K;
++              break;
++      default:
++              printk(KERN_ERR "TWL4030 voice hw params: unknown rate %d\n",
++                      params_rate(params));
++              return -EINVAL;
++      }
++
++      if (mode != old_mode) {
++              /* change rate and set CODECPDZ */
++              twl4030_codec_enable(codec, 0);
++              twl4030_write(codec, TWL4030_REG_CODEC_MODE, mode);
++              twl4030_codec_enable(codec, 1);
++      }
++
++      return 0;
++}
++
++static int twl4030_voice_set_dai_sysclk(struct snd_soc_dai *codec_dai,
++              int clk_id, unsigned int freq, int dir)
++{
++      struct snd_soc_codec *codec = codec_dai->codec;
++      u8 infreq;
++
++      switch (freq) {
++      case 26000000:
++              infreq = TWL4030_APLL_INFREQ_26000KHZ;
++              break;
++      default:
++              printk(KERN_ERR "TWL4030 voice set sysclk: unknown rate %d\n",
++                      freq);
++              return -EINVAL;
++      }
++
++      infreq |= TWL4030_APLL_EN;
++      twl4030_write(codec, TWL4030_REG_APLL_CTL, infreq);
++
++      return 0;
++}
++
++static int twl4030_voice_set_dai_fmt(struct snd_soc_dai *codec_dai,
++              unsigned int fmt)
++{
++      struct snd_soc_codec *codec = codec_dai->codec;
++      u8 old_format, format;
++
++      /* get format */
++      old_format = twl4030_read_reg_cache(codec, TWL4030_REG_VOICE_IF);
++      format = old_format;
++
++      /* set master/slave audio interface */
++      switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
++      case SND_SOC_DAIFMT_CBM_CFM:
++              format &= ~(TWL4030_VIF_SLAVE_EN);
++              break;
++      case SND_SOC_DAIFMT_CBS_CFS:
++              format |= TWL4030_VIF_SLAVE_EN;
++              break;
++      default:
++              return -EINVAL;
++      }
++
++      /* clock inversion */
++      switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
++      case SND_SOC_DAIFMT_IB_NF:
++              format &= ~(TWL4030_VIF_FORMAT);
++              break;
++      case SND_SOC_DAIFMT_NB_IF:
++              format |= TWL4030_VIF_FORMAT;
++              break;
++      default:
++              return -EINVAL;
++      }
++
++      if (format != old_format) {
++              /* change format and set CODECPDZ */
++              twl4030_codec_enable(codec, 0);
++              twl4030_write(codec, TWL4030_REG_VOICE_IF, format);
++              twl4030_codec_enable(codec, 1);
++      }
++
++      return 0;
++}
++
++static int twl4030_voice_set_tristate(struct snd_soc_dai *dai, int tristate)
++{
++      struct snd_soc_codec *codec = dai->codec;
++      u8 reg = twl4030_read_reg_cache(codec, TWL4030_REG_VOICE_IF);
++
++      if (tristate)
++              reg |= TWL4030_VIF_TRI_EN;
++      else
++              reg &= ~TWL4030_VIF_TRI_EN;
++
++      return twl4030_write(codec, TWL4030_REG_VOICE_IF, reg);
++}
++
+ #define TWL4030_RATES  (SNDRV_PCM_RATE_8000_48000)
+ #define TWL4030_FORMATS        (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FORMAT_S24_LE)
+@@ -1452,23 +2073,51 @@
+       .hw_params      = twl4030_hw_params,
+       .set_sysclk     = twl4030_set_dai_sysclk,
+       .set_fmt        = twl4030_set_dai_fmt,
++      .set_tristate   = twl4030_set_tristate,
++};
++
++static struct snd_soc_dai_ops twl4030_dai_voice_ops = {
++      .startup        = twl4030_voice_startup,
++      .shutdown       = twl4030_voice_shutdown,
++      .hw_params      = twl4030_voice_hw_params,
++      .set_sysclk     = twl4030_voice_set_dai_sysclk,
++      .set_fmt        = twl4030_voice_set_dai_fmt,
++      .set_tristate   = twl4030_voice_set_tristate,
+ };
+-struct snd_soc_dai twl4030_dai = {
++struct snd_soc_dai twl4030_dai[] = {
++{
+       .name = "twl4030",
+       .playback = {
+-              .stream_name = "Playback",
++              .stream_name = "HiFi Playback",
+               .channels_min = 2,
+-              .channels_max = 2,
++              .channels_max = 4,
+               .rates = TWL4030_RATES | SNDRV_PCM_RATE_96000,
+               .formats = TWL4030_FORMATS,},
+       .capture = {
+               .stream_name = "Capture",
+               .channels_min = 2,
+-              .channels_max = 2,
++              .channels_max = 4,
+               .rates = TWL4030_RATES,
+               .formats = TWL4030_FORMATS,},
+       .ops = &twl4030_dai_ops,
++},
++{
++      .name = "twl4030 Voice",
++      .playback = {
++              .stream_name = "Voice 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 = "Capture",
++              .channels_min = 1,
++              .channels_max = 2,
++              .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000,
++              .formats = SNDRV_PCM_FMTBIT_S16_LE,},
++      .ops = &twl4030_dai_voice_ops,
++},
+ };
+ EXPORT_SYMBOL_GPL(twl4030_dai);
+@@ -1500,6 +2149,8 @@
+ static int twl4030_init(struct snd_soc_device *socdev)
+ {
+       struct snd_soc_codec *codec = socdev->card->codec;
++      struct twl4030_setup_data *setup = socdev->codec_data;
++      struct twl4030_priv *twl4030 = codec->private_data;
+       int ret = 0;
+       printk(KERN_INFO "TWL4030 Audio Codec init \n");
+@@ -1509,14 +2160,31 @@
+       codec->read = twl4030_read_reg_cache;
+       codec->write = twl4030_write;
+       codec->set_bias_level = twl4030_set_bias_level;
+-      codec->dai = &twl4030_dai;
+-      codec->num_dai = 1;
++      codec->dai = twl4030_dai;
++      codec->num_dai = ARRAY_SIZE(twl4030_dai),
+       codec->reg_cache_size = sizeof(twl4030_reg);
+       codec->reg_cache = kmemdup(twl4030_reg, sizeof(twl4030_reg),
+                                       GFP_KERNEL);
+       if (codec->reg_cache == NULL)
+               return -ENOMEM;
++      /* Configuration for headset ramp delay from setup data */
++      if (setup) {
++              unsigned char hs_pop;
++
++              if (setup->sysclk)
++                      twl4030->sysclk = setup->sysclk;
++              else
++                      twl4030->sysclk = 26000;
++
++              hs_pop = twl4030_read_reg_cache(codec, TWL4030_REG_HS_POPN_SET);
++              hs_pop &= ~TWL4030_RAMP_DELAY;
++              hs_pop |= (setup->ramp_delay_value << 2);
++              twl4030_write_reg_cache(codec, TWL4030_REG_HS_POPN_SET, hs_pop);
++      } else {
++              twl4030->sysclk = 26000;
++      }
++
+       /* register pcms */
+       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
+       if (ret < 0) {
+@@ -1604,13 +2272,13 @@
+ static int __init twl4030_modinit(void)
+ {
+-      return snd_soc_register_dai(&twl4030_dai);
++      return snd_soc_register_dais(&twl4030_dai[0], ARRAY_SIZE(twl4030_dai));
+ }
+ module_init(twl4030_modinit);
+ static void __exit twl4030_exit(void)
+ {
+-      snd_soc_unregister_dai(&twl4030_dai);
++      snd_soc_unregister_dais(&twl4030_dai[0], ARRAY_SIZE(twl4030_dai));
+ }
+ module_exit(twl4030_exit);
+Index: linux-2.6.30/sound/soc/codecs/twl4030.h
+===================================================================
+--- linux-2.6.30.orig/sound/soc/codecs/twl4030.h       2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/sound/soc/codecs/twl4030.h    2011-02-01 16:40:30.185047492 +0100
+@@ -92,8 +92,9 @@
+ #define TWL4030_REG_VIBRA_PWM_SET     0x47
+ #define TWL4030_REG_ANAMIC_GAIN               0x48
+ #define TWL4030_REG_MISC_SET_2                0x49
++#define TWL4030_REG_SW_SHADOW         0x4A
+-#define TWL4030_CACHEREGNUM   (TWL4030_REG_MISC_SET_2 + 1)
++#define TWL4030_CACHEREGNUM   (TWL4030_REG_SW_SHADOW + 1)
+ /* Bitfield Definitions */
+@@ -110,9 +111,22 @@
+ #define TWL4030_APLL_RATE_44100               0x90
+ #define TWL4030_APLL_RATE_48000               0xA0
+ #define TWL4030_APLL_RATE_96000               0xE0
+-#define TWL4030_SEL_16K                       0x04
++#define TWL4030_SEL_16K                       0x08
+ #define TWL4030_CODECPDZ              0x02
+ #define TWL4030_OPT_MODE              0x01
++#define TWL4030_OPTION_1              (1 << 0)
++#define TWL4030_OPTION_2              (0 << 0)
++
++/* TWL4030_OPTION (0x02) Fields */
++
++#define TWL4030_ATXL1_EN              (1 << 0)
++#define TWL4030_ATXR1_EN              (1 << 1)
++#define TWL4030_ATXL2_VTXL_EN         (1 << 2)
++#define TWL4030_ATXR2_VTXR_EN         (1 << 3)
++#define TWL4030_ARXL1_VRX_EN          (1 << 4)
++#define TWL4030_ARXR1_EN              (1 << 5)
++#define TWL4030_ARXL2_EN              (1 << 6)
++#define TWL4030_ARXR2_EN              (1 << 7)
+ /* TWL4030_REG_MICBIAS_CTL (0x04) Fields */
+@@ -171,6 +185,17 @@
+ #define TWL4030_CLK256FS_EN           0x02
+ #define TWL4030_AIF_EN                        0x01
++/* VOICE_IF (0x0F) Fields */
++
++#define TWL4030_VIF_SLAVE_EN          0x80
++#define TWL4030_VIF_DIN_EN            0x40
++#define TWL4030_VIF_DOUT_EN           0x20
++#define TWL4030_VIF_SWAP              0x10
++#define TWL4030_VIF_FORMAT            0x08
++#define TWL4030_VIF_TRI_EN            0x04
++#define TWL4030_VIF_SUB_EN            0x02
++#define TWL4030_VIF_EN                        0x01
++
+ /* EAR_CTL (0x21) */
+ #define TWL4030_EAR_GAIN              0x30
+@@ -236,7 +261,21 @@
+ #define TWL4030_SMOOTH_ANAVOL_EN      0x02
+ #define TWL4030_DIGMIC_LR_SWAP_EN     0x01
+-extern struct snd_soc_dai twl4030_dai;
++/* TWL4030_REG_SW_SHADOW (0x4A) Fields */
++#define TWL4030_HFL_EN                        0x01
++#define TWL4030_HFR_EN                        0x02
++
++#define TWL4030_DAI_HIFI              0
++#define TWL4030_DAI_VOICE             1
++
++extern struct snd_soc_dai twl4030_dai[2];
+ extern struct snd_soc_codec_device soc_codec_dev_twl4030;
++struct twl4030_setup_data {
++      unsigned int ramp_delay_value;
++      unsigned int sysclk;
++      unsigned int hs_extmute:1;
++      void (*set_hs_extmute)(int mute);
++};
++
+ #endif        /* End of __TWL4030_AUDIO_H__ */
+Index: linux-2.6.30/sound/soc/codecs/uda134x.c
+===================================================================
+--- linux-2.6.30.orig/sound/soc/codecs/uda134x.c       2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/sound/soc/codecs/uda134x.c    2011-02-01 16:40:30.185047492 +0100
+@@ -101,7 +101,7 @@
+       pr_debug("%s reg: %02X, value:%02X\n", __func__, reg, value);
+       if (reg >= UDA134X_REGS_NUM) {
+-              printk(KERN_ERR "%s unkown register: reg: %d",
++              printk(KERN_ERR "%s unkown register: reg: %u",
+                      __func__, reg);
+               return -EINVAL;
+       }
+@@ -163,7 +163,7 @@
+       else
+               mute_reg &= ~(1<<2);
+-      uda134x_write(codec, UDA134X_DATA010, mute_reg & ~(1<<2));
++      uda134x_write(codec, UDA134X_DATA010, mute_reg);
+       return 0;
+ }
+@@ -296,7 +296,7 @@
+       struct snd_soc_codec *codec = codec_dai->codec;
+       struct uda134x_priv *uda134x = codec->private_data;
+-      pr_debug("%s clk_id: %d, freq: %d, dir: %d\n", __func__,
++      pr_debug("%s clk_id: %d, freq: %u, dir: %d\n", __func__,
+                clk_id, freq, dir);
+       /* Anything between 256fs*8Khz and 512fs*48Khz should be acceptable
+Index: linux-2.6.30/sound/soc/codecs/uda1380.c
+===================================================================
+--- linux-2.6.30.orig/sound/soc/codecs/uda1380.c       2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/sound/soc/codecs/uda1380.c    2011-02-01 16:40:30.185047492 +0100
+@@ -5,9 +5,7 @@
+  * it under the terms of the GNU General Public License version 2 as
+  * published by the Free Software Foundation.
+  *
+- * Copyright (c) 2007 Philipp Zabel <philipp.zabel@gmail.com>
+- * Improved support for DAPM and audio routing/mixing capabilities,
+- * added TLV support.
++ * Copyright (c) 2007-2009 Philipp Zabel <philipp.zabel@gmail.com>
+  *
+  * Modified by Richard Purdie <richard@openedhand.com> to fit into SoC
+  * codec model.
+@@ -19,26 +17,32 @@
+ #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/gpio.h>
+ #include <linux/delay.h>
+ #include <linux/i2c.h>
+ #include <linux/workqueue.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 <sound/tlv.h>
++#include <sound/uda1380.h>
+ #include "uda1380.h"
+-static struct work_struct uda1380_work;
+ static struct snd_soc_codec *uda1380_codec;
++/* codec private data */
++struct uda1380_priv {
++      struct snd_soc_codec codec;
++      u16 reg_cache[UDA1380_CACHEREGNUM];
++      unsigned int dac_clk;
++      struct work_struct work;
++};
++
+ /*
+  * uda1380 register cache
+  */
+@@ -473,6 +477,7 @@
+       struct snd_soc_pcm_runtime *rtd = substream->private_data;
+       struct snd_soc_device *socdev = rtd->socdev;
+       struct snd_soc_codec *codec = socdev->card->codec;
++      struct uda1380_priv *uda1380 = codec->private_data;
+       int mixer = uda1380_read_reg_cache(codec, UDA1380_MIXER);
+       switch (cmd) {
+@@ -480,13 +485,13 @@
+       case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
+               uda1380_write_reg_cache(codec, UDA1380_MIXER,
+                                       mixer & ~R14_SILENCE);
+-              schedule_work(&uda1380_work);
++              schedule_work(&uda1380->work);
+               break;
+       case SNDRV_PCM_TRIGGER_STOP:
+       case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
+               uda1380_write_reg_cache(codec, UDA1380_MIXER,
+                                       mixer | R14_SILENCE);
+-              schedule_work(&uda1380_work);
++              schedule_work(&uda1380->work);
+               break;
+       }
+       return 0;
+@@ -670,44 +675,33 @@
+       return 0;
+ }
+-/*
+- * initialise the UDA1380 driver
+- * register mixer and dsp interfaces with the kernel
+- */
+-static int uda1380_init(struct snd_soc_device *socdev, int dac_clk)
++static int uda1380_probe(struct platform_device *pdev)
+ {
+-      struct snd_soc_codec *codec = socdev->card->codec;
++      struct snd_soc_device *socdev = platform_get_drvdata(pdev);
++      struct snd_soc_codec *codec;
++      struct uda1380_platform_data *pdata;
+       int ret = 0;
+-      codec->name = "UDA1380";
+-      codec->owner = THIS_MODULE;
+-      codec->read = uda1380_read_reg_cache;
+-      codec->write = uda1380_write;
+-      codec->set_bias_level = uda1380_set_bias_level;
+-      codec->dai = uda1380_dai;
+-      codec->num_dai = ARRAY_SIZE(uda1380_dai);
+-      codec->reg_cache = kmemdup(uda1380_reg, sizeof(uda1380_reg),
+-                                 GFP_KERNEL);
+-      if (codec->reg_cache == NULL)
+-              return -ENOMEM;
+-      codec->reg_cache_size = ARRAY_SIZE(uda1380_reg);
+-      codec->reg_cache_step = 1;
+-      uda1380_reset(codec);
++      if (uda1380_codec == NULL) {
++              dev_err(&pdev->dev, "Codec device not registered\n");
++              return -ENODEV;
++      }
+-      uda1380_codec = codec;
+-      INIT_WORK(&uda1380_work, uda1380_flush_work);
++      socdev->card->codec = uda1380_codec;
++      codec = uda1380_codec;
++      pdata = codec->dev->platform_data;
+       /* register pcms */
+       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
+       if (ret < 0) {
+-              pr_err("uda1380: failed to create pcms\n");
++              dev_err(codec->dev, "failed to create pcms: %d\n", ret);
+               goto pcm_err;
+       }
+       /* power on device */
+       uda1380_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
+       /* set clock input */
+-      switch (dac_clk) {
++      switch (pdata->dac_clk) {
+       case UDA1380_DAC_CLK_SYSCLK:
+               uda1380_write(codec, UDA1380_CLK, 0);
+               break;
+@@ -716,13 +710,12 @@
+               break;
+       }
+-      /* uda1380 init */
+       snd_soc_add_controls(codec, uda1380_snd_controls,
+                               ARRAY_SIZE(uda1380_snd_controls));
+       uda1380_add_widgets(codec);
+       ret = snd_soc_init_card(socdev);
+       if (ret < 0) {
+-              pr_err("uda1380: failed to register card\n");
++              dev_err(codec->dev, "failed to register card: %d\n", ret);
+               goto card_err;
+       }
+@@ -732,165 +725,201 @@
+       snd_soc_free_pcms(socdev);
+       snd_soc_dapm_free(socdev);
+ pcm_err:
+-      kfree(codec->reg_cache);
+       return ret;
+ }
+-static struct snd_soc_device *uda1380_socdev;
+-
+-#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
+-
+-static int uda1380_i2c_probe(struct i2c_client *i2c,
+-                           const struct i2c_device_id *id)
++/* power down chip */
++static int uda1380_remove(struct platform_device *pdev)
+ {
+-      struct snd_soc_device *socdev = uda1380_socdev;
+-      struct uda1380_setup_data *setup = socdev->codec_data;
++      struct snd_soc_device *socdev = platform_get_drvdata(pdev);
+       struct snd_soc_codec *codec = socdev->card->codec;
+-      int ret;
+-
+-      i2c_set_clientdata(i2c, codec);
+-      codec->control_data = i2c;
+-      ret = uda1380_init(socdev, setup->dac_clk);
+-      if (ret < 0)
+-              pr_err("uda1380: failed to initialise UDA1380\n");
++      if (codec->control_data)
++              uda1380_set_bias_level(codec, SND_SOC_BIAS_OFF);
+-      return ret;
+-}
++      snd_soc_free_pcms(socdev);
++      snd_soc_dapm_free(socdev);
+-static int uda1380_i2c_remove(struct i2c_client *client)
+-{
+-      struct snd_soc_codec *codec = i2c_get_clientdata(client);
+-      kfree(codec->reg_cache);
+       return 0;
+ }
+-static const struct i2c_device_id uda1380_i2c_id[] = {
+-      { "uda1380", 0 },
+-      { }
+-};
+-MODULE_DEVICE_TABLE(i2c, uda1380_i2c_id);
+-
+-static struct i2c_driver uda1380_i2c_driver = {
+-      .driver = {
+-              .name =  "UDA1380 I2C Codec",
+-              .owner = THIS_MODULE,
+-      },
+-      .probe =    uda1380_i2c_probe,
+-      .remove =   uda1380_i2c_remove,
+-      .id_table = uda1380_i2c_id,
++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);
+-static int uda1380_add_i2c_device(struct platform_device *pdev,
+-                                const struct uda1380_setup_data *setup)
++static int uda1380_register(struct uda1380_priv *uda1380)
+ {
+-      struct i2c_board_info info;
+-      struct i2c_adapter *adapter;
+-      struct i2c_client *client;
+-      int ret;
++      int ret, i;
++      struct snd_soc_codec *codec = &uda1380->codec;
++      struct uda1380_platform_data *pdata = codec->dev->platform_data;
+-      ret = i2c_add_driver(&uda1380_i2c_driver);
+-      if (ret != 0) {
+-              dev_err(&pdev->dev, "can't add i2c driver\n");
+-              return ret;
++      if (uda1380_codec) {
++              dev_err(codec->dev, "Another UDA1380 is registered\n");
++              return -EINVAL;
++      }
++
++      if (!pdata || !pdata->gpio_power || !pdata->gpio_reset)
++              return -EINVAL;
++
++      ret = gpio_request(pdata->gpio_power, "uda1380 power");
++      if (ret)
++              goto err_out;
++      ret = gpio_request(pdata->gpio_reset, "uda1380 reset");
++      if (ret)
++              goto err_gpio;
++
++      gpio_direction_output(pdata->gpio_power, 1);
++
++      /* we may need to have the clock running here - pH5 */
++      gpio_direction_output(pdata->gpio_reset, 1);
++      udelay(5);
++      gpio_set_value(pdata->gpio_reset, 0);
++
++      mutex_init(&codec->mutex);
++      INIT_LIST_HEAD(&codec->dapm_widgets);
++      INIT_LIST_HEAD(&codec->dapm_paths);
++
++      codec->private_data = uda1380;
++      codec->name = "UDA1380";
++      codec->owner = THIS_MODULE;
++      codec->read = uda1380_read_reg_cache;
++      codec->write = uda1380_write;
++      codec->bias_level = SND_SOC_BIAS_OFF;
++      codec->set_bias_level = uda1380_set_bias_level;
++      codec->dai = uda1380_dai;
++      codec->num_dai = ARRAY_SIZE(uda1380_dai);
++      codec->reg_cache_size = ARRAY_SIZE(uda1380_reg);
++      codec->reg_cache = &uda1380->reg_cache;
++      codec->reg_cache_step = 1;
++
++      memcpy(codec->reg_cache, uda1380_reg, sizeof(uda1380_reg));
++
++      ret = uda1380_reset(codec);
++      if (ret < 0) {
++              dev_err(codec->dev, "Failed to issue reset\n");
++              goto err_reset;
+       }
+-      memset(&info, 0, sizeof(struct i2c_board_info));
+-      info.addr = setup->i2c_address;
+-      strlcpy(info.type, "uda1380", I2C_NAME_SIZE);
++      INIT_WORK(&uda1380->work, uda1380_flush_work);
+-      adapter = i2c_get_adapter(setup->i2c_bus);
+-      if (!adapter) {
+-              dev_err(&pdev->dev, "can't get i2c adapter %d\n",
+-                      setup->i2c_bus);
+-              goto err_driver;
++      for (i = 0; i < ARRAY_SIZE(uda1380_dai); i++)
++              uda1380_dai[i].dev = codec->dev;
++
++      uda1380_codec = codec;
++
++      ret = snd_soc_register_codec(codec);
++      if (ret != 0) {
++              dev_err(codec->dev, "Failed to register codec: %d\n", ret);
++              goto err_reset;
+       }
+-      client = i2c_new_device(adapter, &info);
+-      i2c_put_adapter(adapter);
+-      if (!client) {
+-              dev_err(&pdev->dev, "can't add i2c device at 0x%x\n",
+-                      (unsigned int)info.addr);
+-              goto err_driver;
++      ret = snd_soc_register_dais(uda1380_dai, ARRAY_SIZE(uda1380_dai));
++      if (ret != 0) {
++              dev_err(codec->dev, "Failed to register DAIs: %d\n", ret);
++              goto err_dai;
+       }
+       return 0;
+-err_driver:
+-      i2c_del_driver(&uda1380_i2c_driver);
+-      return -ENODEV;
++err_dai:
++      snd_soc_unregister_codec(codec);
++err_reset:
++      gpio_set_value(pdata->gpio_power, 0);
++      gpio_free(pdata->gpio_reset);
++err_gpio:
++      gpio_free(pdata->gpio_power);
++err_out:
++      return ret;
+ }
+-#endif
+-static int uda1380_probe(struct platform_device *pdev)
++static void uda1380_unregister(struct uda1380_priv *uda1380)
+ {
+-      struct snd_soc_device *socdev = platform_get_drvdata(pdev);
+-      struct uda1380_setup_data *setup;
++      struct snd_soc_codec *codec = &uda1380->codec;
++      struct uda1380_platform_data *pdata = codec->dev->platform_data;
++
++      snd_soc_unregister_dais(uda1380_dai, ARRAY_SIZE(uda1380_dai));
++      snd_soc_unregister_codec(&uda1380->codec);
++
++      gpio_set_value(pdata->gpio_power, 0);
++      gpio_free(pdata->gpio_reset);
++      gpio_free(pdata->gpio_power);
++
++      kfree(uda1380);
++      uda1380_codec = NULL;
++}
++
++#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
++static __devinit int uda1380_i2c_probe(struct i2c_client *i2c,
++                                    const struct i2c_device_id *id)
++{
++      struct uda1380_priv *uda1380;
+       struct snd_soc_codec *codec;
+       int ret;
+-      setup = socdev->codec_data;
+-      codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL);
+-      if (codec == NULL)
++      uda1380 = kzalloc(sizeof(struct uda1380_priv), GFP_KERNEL);
++      if (uda1380 == NULL)
+               return -ENOMEM;
+-      socdev->card->codec = codec;
+-      mutex_init(&codec->mutex);
+-      INIT_LIST_HEAD(&codec->dapm_widgets);
+-      INIT_LIST_HEAD(&codec->dapm_paths);
++      codec = &uda1380->codec;
++      codec->hw_write = (hw_write_t)i2c_master_send;
+-      uda1380_socdev = socdev;
+-      ret = -ENODEV;
++      i2c_set_clientdata(i2c, uda1380);
++      codec->control_data = i2c;
+-#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
+-      if (setup->i2c_address) {
+-              codec->hw_write = (hw_write_t)i2c_master_send;
+-              ret = uda1380_add_i2c_device(pdev, setup);
+-      }
+-#endif
++      codec->dev = &i2c->dev;
++      ret = uda1380_register(uda1380);
+       if (ret != 0)
+-              kfree(codec);
++              kfree(uda1380);
++
+       return ret;
+ }
+-/* power down chip */
+-static int uda1380_remove(struct platform_device *pdev)
++static int __devexit uda1380_i2c_remove(struct i2c_client *i2c)
+ {
+-      struct snd_soc_device *socdev = platform_get_drvdata(pdev);
+-      struct snd_soc_codec *codec = socdev->card->codec;
+-
+-      if (codec->control_data)
+-              uda1380_set_bias_level(codec, SND_SOC_BIAS_OFF);
+-
+-      snd_soc_free_pcms(socdev);
+-      snd_soc_dapm_free(socdev);
+-#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
+-      i2c_unregister_device(codec->control_data);
+-      i2c_del_driver(&uda1380_i2c_driver);
+-#endif
+-      kfree(codec);
+-
++      struct uda1380_priv *uda1380 = i2c_get_clientdata(i2c);
++      uda1380_unregister(uda1380);
+       return 0;
+ }
+-struct snd_soc_codec_device soc_codec_dev_uda1380 = {
+-      .probe =        uda1380_probe,
+-      .remove =       uda1380_remove,
+-      .suspend =      uda1380_suspend,
+-      .resume =       uda1380_resume,
++static const struct i2c_device_id uda1380_i2c_id[] = {
++      { "uda1380", 0 },
++      { }
+ };
+-EXPORT_SYMBOL_GPL(soc_codec_dev_uda1380);
++MODULE_DEVICE_TABLE(i2c, uda1380_i2c_id);
++
++static struct i2c_driver uda1380_i2c_driver = {
++      .driver = {
++              .name =  "UDA1380 I2C Codec",
++              .owner = THIS_MODULE,
++      },
++      .probe =    uda1380_i2c_probe,
++      .remove =   __devexit_p(uda1380_i2c_remove),
++      .id_table = uda1380_i2c_id,
++};
++#endif
+ static int __init uda1380_modinit(void)
+ {
+-      return snd_soc_register_dais(uda1380_dai, ARRAY_SIZE(uda1380_dai));
++      int ret;
++#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
++      ret = i2c_add_driver(&uda1380_i2c_driver);
++      if (ret != 0)
++              pr_err("Failed to register UDA1380 I2C driver: %d\n", ret);
++#endif
++      return 0;
+ }
+ module_init(uda1380_modinit);
+ static void __exit uda1380_exit(void)
+ {
+-      snd_soc_unregister_dais(uda1380_dai, ARRAY_SIZE(uda1380_dai));
++#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
++      i2c_del_driver(&uda1380_i2c_driver);
++#endif
+ }
+ module_exit(uda1380_exit);
+Index: linux-2.6.30/sound/soc/codecs/uda1380.h
+===================================================================
+--- linux-2.6.30.orig/sound/soc/codecs/uda1380.h       2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/sound/soc/codecs/uda1380.h    2011-02-01 16:40:30.185047492 +0100
+@@ -72,14 +72,6 @@
+ #define R22_SKIP_DCFIL        0x0002
+ #define R23_AGC_EN    0x0001
+-struct uda1380_setup_data {
+-      int            i2c_bus;
+-      unsigned short i2c_address;
+-      int            dac_clk;
+-#define UDA1380_DAC_CLK_SYSCLK 0
+-#define UDA1380_DAC_CLK_WSPLL  1
+-};
+-
+ #define UDA1380_DAI_DUPLEX    0 /* playback and capture on single DAI */
+ #define UDA1380_DAI_PLAYBACK  1 /* playback DAI */
+ #define UDA1380_DAI_CAPTURE   2 /* capture DAI */
+Index: linux-2.6.30/sound/soc/codecs/wm8350.c
+===================================================================
+--- linux-2.6.30.orig/sound/soc/codecs/wm8350.c        2011-02-01 16:39:20.000000000 +0100
++++ linux-2.6.30/sound/soc/codecs/wm8350.c     2011-02-01 16:40:30.185047492 +0100
+@@ -63,6 +63,8 @@
+       struct wm8350_jack_data hpl;
+       struct wm8350_jack_data hpr;
+       struct regulator_bulk_data supplies[ARRAY_SIZE(supply_names)];
++      int fll_freq_out;
++      int fll_freq_in;
+ };
+ static unsigned int wm8350_codec_cache_read(struct snd_soc_codec *codec,
+@@ -406,7 +408,6 @@
+ static const char *wm8350_pol[] = { "Normal", "Inv R", "Inv L", "Inv L & R" };
+ static const char *wm8350_dacmutem[] = { "Normal", "Soft" };
+ static const char *wm8350_dacmutes[] = { "Fast", "Slow" };
+-static const char *wm8350_dacfilter[] = { "Normal", "Sloping" };
+ static const char *wm8350_adcfilter[] = { "None", "High Pass" };
+ static const char *wm8350_adchp[] = { "44.1kHz", "8kHz", "16kHz", "32kHz" };
+ static const char *wm8350_lr[] = { "Left", "Right" };
+@@ -416,7 +417,6 @@
+       SOC_ENUM_SINGLE(WM8350_DAC_CONTROL, 0, 4, wm8350_pol),
+       SOC_ENUM_SINGLE(WM8350_DAC_MUTE_VOLUME, 14, 2, wm8350_dacmutem),
+       SOC_ENUM_SINGLE(WM8350_DAC_MUTE_VOLUME, 13, 2, wm8350_dacmutes),
+-      SOC_ENUM_SINGLE(WM8350_DAC_MUTE_VOLUME, 12, 2, wm8350_dacfilter),
+       SOC_ENUM_SINGLE(WM8350_ADC_CONTROL, 15, 2, wm8350_adcfilter),
+       SOC_ENUM_SINGLE(WM8350_ADC_CONTROL, 8, 4, wm8350_adchp),
+       SOC_ENUM_SINGLE(WM8350_ADC_CONTROL, 0, 4, wm8350_pol),
+@@ -444,10 +444,9 @@
+                               0, 255, 0, dac_pcm_tlv),
+       SOC_ENUM("Playback PCM Mute Function", wm8350_enum[2]),
+       SOC_ENUM("Playback PCM Mute Speed", wm8350_enum[3]),
+-      SOC_ENUM("Playback PCM Filter", wm8350_enum[4]),
+-      SOC_ENUM("Capture PCM Filter", wm8350_enum[5]),
+-      SOC_ENUM("Capture PCM HP Filter", wm8350_enum[6]),
+-      SOC_ENUM("Capture ADC Inversion", wm8350_enum[7]),
++      SOC_ENUM("Capture PCM Filter", wm8350_enum[4]),
++      SOC_ENUM("Capture PCM HP Filter", wm8350_enum[5]),
++      SOC_ENUM("Capture ADC Inversion", wm8350_enum[6]),
+       SOC_WM8350_DOUBLE_R_TLV("Capture PCM Volume",
+                               WM8350_ADC_DIGITAL_VOLUME_L,
+                               WM8350_ADC_DIGITAL_VOLUME_R,
+@@ -580,7 +579,7 @@
+       SOC_DAPM_SINGLE_TLV("L3 Capture Volume",
+                           WM8350_INPUT_MIXER_VOLUME_L, 9, 7, 0, out_mix_tlv),
+       SOC_DAPM_SINGLE("PGA Capture Switch",
+-                      WM8350_LEFT_INPUT_VOLUME, 14, 1, 0),
++                      WM8350_LEFT_INPUT_VOLUME, 14, 1, 1),
+ };
+ /* Right Input Mixer */
+@@ -590,7 +589,7 @@
+       SOC_DAPM_SINGLE_TLV("L3 Capture Volume",
+                           WM8350_INPUT_MIXER_VOLUME_R, 13, 7, 0, out_mix_tlv),
+       SOC_DAPM_SINGLE("PGA Capture Switch",
+-                      WM8350_RIGHT_INPUT_VOLUME, 14, 1, 0),
++                      WM8350_RIGHT_INPUT_VOLUME, 14, 1, 1),
+ };
+ /* Left Mic Mixer */
+@@ -993,6 +992,7 @@
+                               struct snd_soc_dai *codec_dai)
+ {
+       struct snd_soc_codec *codec = codec_dai->codec;
++      struct wm8350 *wm8350 = codec->control_data;
+       u16 iface = wm8350_codec_read(codec, WM8350_AI_FORMATING) &
+           ~WM8350_AIF_WL_MASK;
+@@ -1012,6 +1012,19 @@
+       }
+       wm8350_codec_write(codec, WM8350_AI_FORMATING, iface);
++
++      /* The sloping stopband filter is recommended for use with
++       * lower sample rates to improve performance.
++       */
++      if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
++              if (params_rate(params) < 24000)
++                      wm8350_set_bits(wm8350, WM8350_DAC_MUTE_VOLUME,
++                                      WM8350_DAC_SB_FILT);
++              else
++                      wm8350_clear_bits(wm8350, WM8350_DAC_MUTE_VOLUME,
++                                        WM8350_DAC_SB_FILT);
++      }
++
+       return 0;
+ }
+@@ -1088,15 +1101,19 @@
+ }
+ static int wm8350_set_fll(struct snd_soc_dai *codec_dai,
+-                        int pll_id, unsigned int freq_in,
++                        int pll_id, int source, unsigned int freq_in,
+                         unsigned int freq_out)
+ {
+       struct snd_soc_codec *codec = codec_dai->codec;
+       struct wm8350 *wm8350 = codec->control_data;
++      struct wm8350_data *priv = codec->private_data;
+       struct _fll_div fll_div;
+       int ret = 0;
+       u16 fll_1, fll_4;
++      if (freq_in == priv->fll_freq_in && freq_out == priv->fll_freq_out)
++              return 0;
++
+       /* power down FLL - we need to do this for reconfiguration */
+       wm8350_clear_bits(wm8350, WM8350_POWER_MGMT_4,
+                         WM8350_FLL_ENA | WM8350_FLL_OSC_ENA);
+@@ -1108,7 +1125,7 @@
+       if (ret < 0)
+               return ret;
+       dev_dbg(wm8350->dev,
+-              "FLL in %d FLL out %d N 0x%x K 0x%x div %d ratio %d",
++              "FLL in %u FLL out %u N 0x%x K 0x%x div %d ratio %d",
+               freq_in, freq_out, fll_div.n, fll_div.k, fll_div.div,
+               fll_div.ratio);
+@@ -1131,6 +1148,9 @@
+       wm8350_set_bits(wm8350, WM8350_POWER_MGMT_4, WM8350_FLL_OSC_ENA);
+       wm8350_set_bits(wm8350, WM8350_POWER_MGMT_4, WM8350_FLL_ENA);
++      priv->fll_freq_out = freq_out;
++      priv->fll_freq_in = freq_in;
++
+       return 0;
+ }
+@@ -1660,6 +1680,21 @@
+       return 0;
+ }
++#ifdef CONFIG_PM
++static int wm8350_codec_suspend(struct platform_device *pdev, pm_message_t m)
++{
++      return snd_soc_suspend_device(&pdev->dev);
++}
++
++static int wm8350_codec_resume(struct platform_device *pdev)
++{
++      return snd_soc_resume_device(&pdev->dev);
++}
++#else
++#define wm8350_codec_suspend NULL
++#define wm8350_codec_resume NULL
++#endif
++
+ static struct platform_driver wm8350_codec_driver = {
+       .driver = {
+                  .name = "wm8350-codec",
+@@ -1667,6 +1702,8 @@
+                  },
+       .probe = wm8350_codec_probe,
+       .remove = __devexit_p(wm8350_codec_remove),
++      .suspend = wm8350_codec_suspend,
++      .resume = wm8350_codec_resume,
+ };
+ static __init int wm8350_init(void)
+Index: linux-2.6.30/sound/soc/codecs/wm8350.h
+===================================================================
+--- linux-2.6.30.orig/sound/soc/codecs/wm8350.h        2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/sound/soc/codecs/wm8350.h     2011-02-01 16:40:30.185047492 +0100
+@@ -13,6 +13,7 @@
+ #define _WM8350_H
+ #include <sound/soc.h>
++#include <linux/mfd/wm8350/audio.h>
+ extern struct snd_soc_dai wm8350_dai;
+ extern struct snd_soc_codec_device soc_codec_dev_wm8350;
+Index: linux-2.6.30/sound/soc/codecs/wm8400.c
+===================================================================
+--- linux-2.6.30.orig/sound/soc/codecs/wm8400.c        2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/sound/soc/codecs/wm8400.c     2011-02-01 16:40:30.185047492 +0100
+@@ -954,7 +954,7 @@
+               factors->outdiv *= 2;
+               if (factors->outdiv > 32) {
+                       dev_err(wm8400->wm8400->dev,
+-                              "Unsupported FLL output frequency %dHz\n",
++                              "Unsupported FLL output frequency %uHz\n",
+                               Fout);
+                       return -EINVAL;
+               }
+@@ -1003,7 +1003,7 @@
+       factors->k = K / 10;
+       dev_dbg(wm8400->wm8400->dev,
+-              "FLL: Fref=%d Fout=%d N=%x K=%x, FRATIO=%x OUTDIV=%x\n",
++              "FLL: Fref=%u Fout=%u N=%x K=%x, FRATIO=%x OUTDIV=%x\n",
+               Fref, Fout,
+               factors->n, factors->k, factors->fratio, factors->outdiv);
+@@ -1011,7 +1011,8 @@
+ }
+ static int wm8400_set_dai_pll(struct snd_soc_dai *codec_dai, int pll_id,
+-                            unsigned int freq_in, unsigned int freq_out)
++                            int source, unsigned int freq_in,
++                            unsigned int freq_out)
+ {
+       struct snd_soc_codec *codec = codec_dai->codec;
+       struct wm8400_priv *wm8400 = codec->private_data;
+@@ -1022,10 +1023,15 @@
+       if (freq_in == wm8400->fll_in && freq_out == wm8400->fll_out)
+               return 0;
+-      if (freq_out != 0) {
++      if (freq_out) {
+               ret = fll_factors(wm8400, &factors, freq_in, freq_out);
+               if (ret != 0)
+                       return ret;
++      } else {
++              /* Bodge GCC 4.4.0 uninitialised variable warning - it
++               * doesn't seem capable of working out that we exit if
++               * freq_out is 0 before any of the uses. */
++              memset(&factors, 0, sizeof(factors));
+       }
+       wm8400->fll_out = freq_out;
+@@ -1040,7 +1046,7 @@
+       reg &= ~WM8400_FLL_OSC_ENA;
+       wm8400_write(codec, WM8400_FLL_CONTROL_1, reg);
+-      if (freq_out == 0)
++      if (!freq_out)
+               return 0;
+       reg &= ~(WM8400_FLL_REF_FREQ | WM8400_FLL_FRATIO_MASK);
+@@ -1473,8 +1479,8 @@
+       codec = &priv->codec;
+       codec->private_data = priv;
+-      codec->control_data = dev->dev.driver_data;
+-      priv->wm8400 = dev->dev.driver_data;
++      codec->control_data = dev_get_drvdata(&dev->dev);
++      priv->wm8400 = dev_get_drvdata(&dev->dev);
+       ret = regulator_bulk_get(priv->wm8400->dev,
+                                ARRAY_SIZE(power), &power[0]);
+@@ -1553,6 +1559,21 @@
+       return 0;
+ }
++#ifdef CONFIG_PM
++static int wm8400_pdev_suspend(struct platform_device *pdev, pm_message_t msg)
++{
++      return snd_soc_suspend_device(&pdev->dev);
++}
++
++static int wm8400_pdev_resume(struct platform_device *pdev)
++{
++      return snd_soc_resume_device(&pdev->dev);
++}
++#else
++#define wm8400_pdev_suspend NULL
++#define wm8400_pdev_resume NULL
++#endif
++
+ static struct platform_driver wm8400_codec_driver = {
+       .driver = {
+               .name = "wm8400-codec",
+@@ -1560,6 +1581,8 @@
+       },
+       .probe = wm8400_codec_probe,
+       .remove = __exit_p(wm8400_codec_remove),
++      .suspend = wm8400_pdev_suspend,
++      .resume = wm8400_pdev_resume,
+ };
+ static int __init wm8400_codec_init(void)
+Index: linux-2.6.30/sound/soc/codecs/wm8510.c
+===================================================================
+--- linux-2.6.30.orig/sound/soc/codecs/wm8510.c        2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/sound/soc/codecs/wm8510.c     2011-02-01 16:40:30.185047492 +0100
+@@ -58,55 +58,7 @@
+ #define WM8510_POWER1_BIASEN  0x08
+ #define WM8510_POWER1_BUFIOEN 0x10
+-/*
+- * 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)
++#define wm8510_reset(c)       snd_soc_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" };
+@@ -298,7 +250,7 @@
+       if ((Ndiv < 6) || (Ndiv > 12))
+               printk(KERN_WARNING
+-                      "WM8510 N value %d outwith recommended range!d\n",
++                      "WM8510 N value %u outwith recommended range!d\n",
+                       Ndiv);
+       pll_div.n = Ndiv;
+@@ -319,35 +271,35 @@
+       pll_div.k = K;
+ }
+-static int wm8510_set_dai_pll(struct snd_soc_dai *codec_dai,
+-              int pll_id, unsigned int freq_in, unsigned int freq_out)
++static int wm8510_set_dai_pll(struct snd_soc_dai *codec_dai, int pll_id,
++              int source, unsigned int freq_in, unsigned int freq_out)
+ {
+       struct snd_soc_codec *codec = codec_dai->codec;
+       u16 reg;
+       if (freq_in == 0 || freq_out == 0) {
+               /* Clock CODEC directly from MCLK */
+-              reg = wm8510_read_reg_cache(codec, WM8510_CLOCK);
+-              wm8510_write(codec, WM8510_CLOCK, reg & 0x0ff);
++              reg = snd_soc_read(codec, WM8510_CLOCK);
++              snd_soc_write(codec, WM8510_CLOCK, reg & 0x0ff);
+               /* Turn off PLL */
+-              reg = wm8510_read_reg_cache(codec, WM8510_POWER1);
+-              wm8510_write(codec, WM8510_POWER1, reg & 0x1df);
++              reg = snd_soc_read(codec, WM8510_POWER1);
++              snd_soc_write(codec, WM8510_POWER1, reg & 0x1df);
+               return 0;
+       }
+       pll_factors(freq_out*4, freq_in);
+-      wm8510_write(codec, WM8510_PLLN, (pll_div.pre_div << 4) | pll_div.n);
+-      wm8510_write(codec, WM8510_PLLK1, pll_div.k >> 18);
+-      wm8510_write(codec, WM8510_PLLK2, (pll_div.k >> 9) & 0x1ff);
+-      wm8510_write(codec, WM8510_PLLK3, pll_div.k & 0x1ff);
+-      reg = wm8510_read_reg_cache(codec, WM8510_POWER1);
+-      wm8510_write(codec, WM8510_POWER1, reg | 0x020);
++      snd_soc_write(codec, WM8510_PLLN, (pll_div.pre_div << 4) | pll_div.n);
++      snd_soc_write(codec, WM8510_PLLK1, pll_div.k >> 18);
++      snd_soc_write(codec, WM8510_PLLK2, (pll_div.k >> 9) & 0x1ff);
++      snd_soc_write(codec, WM8510_PLLK3, pll_div.k & 0x1ff);
++      reg = snd_soc_read(codec, WM8510_POWER1);
++      snd_soc_write(codec, WM8510_POWER1, reg | 0x020);
+       /* Run CODEC from PLL instead of MCLK */
+-      reg = wm8510_read_reg_cache(codec, WM8510_CLOCK);
+-      wm8510_write(codec, WM8510_CLOCK, reg | 0x100);
++      reg = snd_soc_read(codec, WM8510_CLOCK);
++      snd_soc_write(codec, WM8510_CLOCK, reg | 0x100);
+       return 0;
+ }
+@@ -363,24 +315,24 @@
+       switch (div_id) {
+       case WM8510_OPCLKDIV:
+-              reg = wm8510_read_reg_cache(codec, WM8510_GPIO) & 0x1cf;
+-              wm8510_write(codec, WM8510_GPIO, reg | div);
++              reg = snd_soc_read(codec, WM8510_GPIO) & 0x1cf;
++              snd_soc_write(codec, WM8510_GPIO, reg | div);
+               break;
+       case WM8510_MCLKDIV:
+-              reg = wm8510_read_reg_cache(codec, WM8510_CLOCK) & 0x11f;
+-              wm8510_write(codec, WM8510_CLOCK, reg | div);
++              reg = snd_soc_read(codec, WM8510_CLOCK) & 0x11f;
++              snd_soc_write(codec, WM8510_CLOCK, reg | div);
+               break;
+       case WM8510_ADCCLK:
+-              reg = wm8510_read_reg_cache(codec, WM8510_ADC) & 0x1f7;
+-              wm8510_write(codec, WM8510_ADC, reg | div);
++              reg = snd_soc_read(codec, WM8510_ADC) & 0x1f7;
++              snd_soc_write(codec, WM8510_ADC, reg | div);
+               break;
+       case WM8510_DACCLK:
+-              reg = wm8510_read_reg_cache(codec, WM8510_DAC) & 0x1f7;
+-              wm8510_write(codec, WM8510_DAC, reg | div);
++              reg = snd_soc_read(codec, WM8510_DAC) & 0x1f7;
++              snd_soc_write(codec, WM8510_DAC, reg | div);
+               break;
+       case WM8510_BCLKDIV:
+-              reg = wm8510_read_reg_cache(codec, WM8510_CLOCK) & 0x1e3;
+-              wm8510_write(codec, WM8510_CLOCK, reg | div);
++              reg = snd_soc_read(codec, WM8510_CLOCK) & 0x1e3;
++              snd_soc_write(codec, WM8510_CLOCK, reg | div);
+               break;
+       default:
+               return -EINVAL;
+@@ -394,7 +346,7 @@
+ {
+       struct snd_soc_codec *codec = codec_dai->codec;
+       u16 iface = 0;
+-      u16 clk = wm8510_read_reg_cache(codec, WM8510_CLOCK) & 0x1fe;
++      u16 clk = snd_soc_read(codec, WM8510_CLOCK) & 0x1fe;
+       /* set master/slave audio interface */
+       switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
+@@ -441,8 +393,8 @@
+               return -EINVAL;
+       }
+-      wm8510_write(codec, WM8510_IFACE, iface);
+-      wm8510_write(codec, WM8510_CLOCK, clk);
++      snd_soc_write(codec, WM8510_IFACE, iface);
++      snd_soc_write(codec, WM8510_CLOCK, clk);
+       return 0;
+ }
+@@ -453,8 +405,8 @@
+       struct snd_soc_pcm_runtime *rtd = substream->private_data;
+       struct snd_soc_device *socdev = rtd->socdev;
+       struct snd_soc_codec *codec = socdev->card->codec;
+-      u16 iface = wm8510_read_reg_cache(codec, WM8510_IFACE) & 0x19f;
+-      u16 adn = wm8510_read_reg_cache(codec, WM8510_ADD) & 0x1f1;
++      u16 iface = snd_soc_read(codec, WM8510_IFACE) & 0x19f;
++      u16 adn = snd_soc_read(codec, WM8510_ADD) & 0x1f1;
+       /* bit size */
+       switch (params_format(params)) {
+@@ -493,20 +445,20 @@
+               break;
+       }
+-      wm8510_write(codec, WM8510_IFACE, iface);
+-      wm8510_write(codec, WM8510_ADD, adn);
++      snd_soc_write(codec, WM8510_IFACE, iface);
++      snd_soc_write(codec, WM8510_ADD, adn);
+       return 0;
+ }
+ static int wm8510_mute(struct snd_soc_dai *dai, int mute)
+ {
+       struct snd_soc_codec *codec = dai->codec;
+-      u16 mute_reg = wm8510_read_reg_cache(codec, WM8510_DAC) & 0xffbf;
++      u16 mute_reg = snd_soc_read(codec, WM8510_DAC) & 0xffbf;
+       if (mute)
+-              wm8510_write(codec, WM8510_DAC, mute_reg | 0x40);
++              snd_soc_write(codec, WM8510_DAC, mute_reg | 0x40);
+       else
+-              wm8510_write(codec, WM8510_DAC, mute_reg);
++              snd_soc_write(codec, WM8510_DAC, mute_reg);
+       return 0;
+ }
+@@ -514,13 +466,13 @@
+ static int wm8510_set_bias_level(struct snd_soc_codec *codec,
+       enum snd_soc_bias_level level)
+ {
+-      u16 power1 = wm8510_read_reg_cache(codec, WM8510_POWER1) & ~0x3;
++      u16 power1 = snd_soc_read(codec, WM8510_POWER1) & ~0x3;
+       switch (level) {
+       case SND_SOC_BIAS_ON:
+       case SND_SOC_BIAS_PREPARE:
+               power1 |= 0x1;  /* VMID 50k */
+-              wm8510_write(codec, WM8510_POWER1, power1);
++              snd_soc_write(codec, WM8510_POWER1, power1);
+               break;
+       case SND_SOC_BIAS_STANDBY:
+@@ -528,18 +480,18 @@
+               if (codec->bias_level == SND_SOC_BIAS_OFF) {
+                       /* Initial cap charge at VMID 5k */
+-                      wm8510_write(codec, WM8510_POWER1, power1 | 0x3);
++                      snd_soc_write(codec, WM8510_POWER1, power1 | 0x3);
+                       mdelay(100);
+               }
+               power1 |= 0x2;  /* VMID 500k */
+-              wm8510_write(codec, WM8510_POWER1, power1);
++              snd_soc_write(codec, WM8510_POWER1, power1);
+               break;
+       case SND_SOC_BIAS_OFF:
+-              wm8510_write(codec, WM8510_POWER1, 0);
+-              wm8510_write(codec, WM8510_POWER2, 0);
+-              wm8510_write(codec, WM8510_POWER3, 0);
++              snd_soc_write(codec, WM8510_POWER1, 0);
++              snd_soc_write(codec, WM8510_POWER2, 0);
++              snd_soc_write(codec, WM8510_POWER3, 0);
+               break;
+       }
+@@ -577,6 +529,7 @@
+               .rates = WM8510_RATES,
+               .formats = WM8510_FORMATS,},
+       .ops = &wm8510_dai_ops,
++      .symmetric_rates = 1,
+ };
+ EXPORT_SYMBOL_GPL(wm8510_dai);
+@@ -612,15 +565,14 @@
+  * initialise the WM8510 driver
+  * register the mixer and dsp interfaces with the kernel
+  */
+-static int wm8510_init(struct snd_soc_device *socdev)
++static int wm8510_init(struct snd_soc_device *socdev,
++                     enum snd_soc_control_type control)
+ {
+       struct snd_soc_codec *codec = socdev->card->codec;
+       int ret = 0;
+       codec->name = "WM8510";
+       codec->owner = THIS_MODULE;
+-      codec->read = wm8510_read_reg_cache;
+-      codec->write = wm8510_write;
+       codec->set_bias_level = wm8510_set_bias_level;
+       codec->dai = &wm8510_dai;
+       codec->num_dai = 1;
+@@ -630,13 +582,20 @@
+       if (codec->reg_cache == NULL)
+               return -ENOMEM;
++      ret = snd_soc_codec_set_cache_io(codec, 7, 9, control);
++      if (ret < 0) {
++              printk(KERN_ERR "wm8510: failed to set cache I/O: %d\n",
++                     ret);
++              goto err;
++      }
++
+       wm8510_reset(codec);
+       /* register pcms */
+       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
+       if (ret < 0) {
+               printk(KERN_ERR "wm8510: failed to create pcms\n");
+-              goto pcm_err;
++              goto err;
+       }
+       /* power on device */
+@@ -655,7 +614,7 @@
+ card_err:
+       snd_soc_free_pcms(socdev);
+       snd_soc_dapm_free(socdev);
+-pcm_err:
++err:
+       kfree(codec->reg_cache);
+       return ret;
+ }
+@@ -678,7 +637,7 @@
+       i2c_set_clientdata(i2c, codec);
+       codec->control_data = i2c;
+-      ret = wm8510_init(socdev);
++      ret = wm8510_init(socdev, SND_SOC_I2C);
+       if (ret < 0)
+               pr_err("failed to initialise WM8510\n");
+@@ -758,7 +717,7 @@
+       codec->control_data = spi;
+-      ret = wm8510_init(socdev);
++      ret = wm8510_init(socdev, SND_SOC_SPI);
+       if (ret < 0)
+               dev_err(&spi->dev, "failed to initialise WM8510\n");
+@@ -779,30 +738,6 @@
+       .probe          = wm8510_spi_probe,
+       .remove         = __devexit_p(wm8510_spi_remove),
+ };
+-
+-static int wm8510_spi_write(struct spi_device *spi, const char *data, int len)
+-{
+-      struct spi_transfer t;
+-      struct spi_message m;
+-      u8 msg[2];
+-
+-      if (len <= 0)
+-              return 0;
+-
+-      msg[0] = data[0];
+-      msg[1] = data[1];
+-
+-      spi_message_init(&m);
+-      memset(&t, 0, (sizeof t));
+-
+-      t.tx_buf = &msg[0];
+-      t.len = len;
+-
+-      spi_message_add_tail(&t, &m);
+-      spi_sync(spi, &m);
+-
+-      return len;
+-}
+ #endif /* CONFIG_SPI_MASTER */
+ static int wm8510_probe(struct platform_device *pdev)
+@@ -827,13 +762,11 @@
+       wm8510_socdev = socdev;
+ #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
+       if (setup->i2c_address) {
+-              codec->hw_write = (hw_write_t)i2c_master_send;
+               ret = wm8510_add_i2c_device(pdev, setup);
+       }
+ #endif
+ #if defined(CONFIG_SPI_MASTER)
+       if (setup->spi) {
+-              codec->hw_write = (hw_write_t)wm8510_spi_write;
+               ret = spi_register_driver(&wm8510_spi_driver);
+               if (ret != 0)
+                       printk(KERN_ERR "can't add spi driver");
+Index: linux-2.6.30/sound/soc/codecs/wm8580.c
+===================================================================
+--- linux-2.6.30.orig/sound/soc/codecs/wm8580.c        2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/sound/soc/codecs/wm8580.c     2011-02-01 16:40:30.185047492 +0100
+@@ -24,6 +24,8 @@
+ #include <linux/pm.h>
+ #include <linux/i2c.h>
+ #include <linux/platform_device.h>
++#include <linux/regulator/consumer.h>
++
+ #include <sound/core.h>
+ #include <sound/pcm.h>
+ #include <sound/pcm_params.h>
+@@ -187,82 +189,22 @@
+       unsigned int out;
+ };
++#define WM8580_NUM_SUPPLIES 3
++static const char *wm8580_supply_names[WM8580_NUM_SUPPLIES] = {
++      "AVDD",
++      "DVDD",
++      "PVDD",
++};
++
+ /* codec private data */
+ struct wm8580_priv {
+       struct snd_soc_codec codec;
++      struct regulator_bulk_data supplies[WM8580_NUM_SUPPLIES];
+       u16 reg_cache[WM8580_MAX_REGISTER + 1];
+       struct pll_state a;
+       struct pll_state b;
+ };
+-
+-/*
+- * read wm8580 register cache
+- */
+-static inline unsigned int wm8580_read_reg_cache(struct snd_soc_codec *codec,
+-      unsigned int reg)
+-{
+-      u16 *cache = codec->reg_cache;
+-      BUG_ON(reg >= ARRAY_SIZE(wm8580_reg));
+-      return cache[reg];
+-}
+-
+-/*
+- * write wm8580 register cache
+- */
+-static inline void wm8580_write_reg_cache(struct snd_soc_codec *codec,
+-      unsigned int reg, unsigned int value)
+-{
+-      u16 *cache = codec->reg_cache;
+-
+-      cache[reg] = value;
+-}
+-
+-/*
+- * write to the WM8580 register space
+- */
+-static int wm8580_write(struct snd_soc_codec *codec, unsigned int reg,
+-      unsigned int value)
+-{
+-      u8 data[2];
+-
+-      BUG_ON(reg >= ARRAY_SIZE(wm8580_reg));
+-
+-      /* Registers are 9 bits wide */
+-      value &= 0x1ff;
+-
+-      switch (reg) {
+-      case WM8580_RESET:
+-              /* Uncached */
+-              break;
+-      default:
+-              if (value == wm8580_read_reg_cache(codec, reg))
+-                      return 0;
+-      }
+-
+-      /* data is
+-       *   D15..D9 WM8580 register offset
+-       *   D8...D0 register data
+-       */
+-      data[0] = (reg << 1) | ((value >> 8) & 0x0001);
+-      data[1] = value & 0x00ff;
+-
+-      wm8580_write_reg_cache(codec, reg, value);
+-      if (codec->hw_write(codec->control_data, data, 2) == 2)
+-              return 0;
+-      else
+-              return -EIO;
+-}
+-
+-static inline unsigned int wm8580_read(struct snd_soc_codec *codec,
+-                                     unsigned int reg)
+-{
+-      switch (reg) {
+-      default:
+-              return wm8580_read_reg_cache(codec, reg);
+-      }
+-}
+-
+ static const DECLARE_TLV_DB_SCALE(dac_tlv, -12750, 50, 1);
+ static int wm8580_out_vu(struct snd_kcontrol *kcontrol,
+@@ -271,25 +213,22 @@
+       struct soc_mixer_control *mc =
+               (struct soc_mixer_control *)kcontrol->private_value;
+       struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
++      u16 *reg_cache = codec->reg_cache;
+       unsigned int reg = mc->reg;
+       unsigned int reg2 = mc->rreg;
+       int ret;
+-      u16 val;
+       /* Clear the register cache so we write without VU set */
+-      wm8580_write_reg_cache(codec, reg, 0);
+-      wm8580_write_reg_cache(codec, reg2, 0);
++      reg_cache[reg] = 0;
++      reg_cache[reg2] = 0;
+       ret = snd_soc_put_volsw_2r(kcontrol, ucontrol);
+       if (ret < 0)
+               return ret;
+       /* Now write again with the volume update bit set */
+-      val = wm8580_read_reg_cache(codec, reg);
+-      wm8580_write(codec, reg, val | 0x0100);
+-
+-      val = wm8580_read_reg_cache(codec, reg2);
+-      wm8580_write(codec, reg2, val | 0x0100);
++      snd_soc_update_bits(codec, reg, 0x100, 0x100);
++      snd_soc_update_bits(codec, reg2, 0x100, 0x100);
+       return 0;
+ }
+@@ -415,7 +354,7 @@
+       unsigned int K, Ndiv, Nmod;
+       int i;
+-      pr_debug("wm8580: PLL %dHz->%dHz\n", source, target);
++      pr_debug("wm8580: PLL %uHz->%uHz\n", source, target);
+       /* Scale the output frequency up; the PLL should run in the
+        * region of 90-100MHz.
+@@ -447,7 +386,7 @@
+       if ((Ndiv < 5) || (Ndiv > 13)) {
+               printk(KERN_ERR
+-                      "WM8580 N=%d outside supported range\n", Ndiv);
++                      "WM8580 N=%u outside supported range\n", Ndiv);
+               return -EINVAL;
+       }
+@@ -468,8 +407,8 @@
+       return 0;
+ }
+-static int wm8580_set_dai_pll(struct snd_soc_dai *codec_dai,
+-              int pll_id, unsigned int freq_in, unsigned int freq_out)
++static int wm8580_set_dai_pll(struct snd_soc_dai *codec_dai, int pll_id,
++              int source, unsigned int freq_in, unsigned int freq_out)
+ {
+       int offset;
+       struct snd_soc_codec *codec = codec_dai->codec;
+@@ -512,27 +451,27 @@
+       /* Always disable the PLL - it is not safe to leave it running
+        * while reprogramming it.
+        */
+-      reg = wm8580_read(codec, WM8580_PWRDN2);
+-      wm8580_write(codec, WM8580_PWRDN2, reg | pwr_mask);
++      reg = snd_soc_read(codec, WM8580_PWRDN2);
++      snd_soc_write(codec, WM8580_PWRDN2, reg | pwr_mask);
+       if (!freq_in || !freq_out)
+               return 0;
+-      wm8580_write(codec, WM8580_PLLA1 + offset, pll_div.k & 0x1ff);
+-      wm8580_write(codec, WM8580_PLLA2 + offset, (pll_div.k >> 9) & 0xff);
+-      wm8580_write(codec, WM8580_PLLA3 + offset,
++      snd_soc_write(codec, WM8580_PLLA1 + offset, pll_div.k & 0x1ff);
++      snd_soc_write(codec, WM8580_PLLA2 + offset, (pll_div.k >> 9) & 0x1ff);
++      snd_soc_write(codec, WM8580_PLLA3 + offset,
+                    (pll_div.k >> 18 & 0xf) | (pll_div.n << 4));
+-      reg = wm8580_read(codec, WM8580_PLLA4 + offset);
+-      reg &= ~0x3f;
++      reg = snd_soc_read(codec, WM8580_PLLA4 + offset);
++      reg &= ~0x1b;
+       reg |= pll_div.prescale | pll_div.postscale << 1 |
+               pll_div.freqmode << 3;
+-      wm8580_write(codec, WM8580_PLLA4 + offset, reg);
++      snd_soc_write(codec, WM8580_PLLA4 + offset, reg);
+       /* All done, turn it on */
+-      reg = wm8580_read(codec, WM8580_PWRDN2);
+-      wm8580_write(codec, WM8580_PWRDN2, reg & ~pwr_mask);
++      reg = snd_soc_read(codec, WM8580_PWRDN2);
++      snd_soc_write(codec, WM8580_PWRDN2, reg & ~pwr_mask);
+       return 0;
+ }
+@@ -547,7 +486,7 @@
+       struct snd_soc_pcm_runtime *rtd = substream->private_data;
+       struct snd_soc_device *socdev = rtd->socdev;
+       struct snd_soc_codec *codec = socdev->card->codec;
+-      u16 paifb = wm8580_read(codec, WM8580_PAIF3 + dai->id);
++      u16 paifb = snd_soc_read(codec, WM8580_PAIF3 + dai->id);
+       paifb &= ~WM8580_AIF_LENGTH_MASK;
+       /* bit size */
+@@ -567,7 +506,7 @@
+               return -EINVAL;
+       }
+-      wm8580_write(codec, WM8580_PAIF3 + dai->id, paifb);
++      snd_soc_write(codec, WM8580_PAIF3 + dai->id, paifb);
+       return 0;
+ }
+@@ -579,8 +518,8 @@
+       unsigned int aifb;
+       int can_invert_lrclk;
+-      aifa = wm8580_read(codec, WM8580_PAIF1 + codec_dai->id);
+-      aifb = wm8580_read(codec, WM8580_PAIF3 + codec_dai->id);
++      aifa = snd_soc_read(codec, WM8580_PAIF1 + codec_dai->id);
++      aifb = snd_soc_read(codec, WM8580_PAIF3 + codec_dai->id);
+       aifb &= ~(WM8580_AIF_FMT_MASK | WM8580_AIF_LRP | WM8580_AIF_BCP);
+@@ -646,8 +585,8 @@
+               return -EINVAL;
+       }
+-      wm8580_write(codec, WM8580_PAIF1 + codec_dai->id, aifa);
+-      wm8580_write(codec, WM8580_PAIF3 + codec_dai->id, aifb);
++      snd_soc_write(codec, WM8580_PAIF1 + codec_dai->id, aifa);
++      snd_soc_write(codec, WM8580_PAIF3 + codec_dai->id, aifb);
+       return 0;
+ }
+@@ -660,7 +599,7 @@
+       switch (div_id) {
+       case WM8580_MCLK:
+-              reg = wm8580_read(codec, WM8580_PLLB4);
++              reg = snd_soc_read(codec, WM8580_PLLB4);
+               reg &= ~WM8580_PLLB4_MCLKOUTSRC_MASK;
+               switch (div) {
+@@ -682,11 +621,11 @@
+               default:
+                       return -EINVAL;
+               }
+-              wm8580_write(codec, WM8580_PLLB4, reg);
++              snd_soc_write(codec, WM8580_PLLB4, reg);
+               break;
+       case WM8580_DAC_CLKSEL:
+-              reg = wm8580_read(codec, WM8580_CLKSEL);
++              reg = snd_soc_read(codec, WM8580_CLKSEL);
+               reg &= ~WM8580_CLKSEL_DAC_CLKSEL_MASK;
+               switch (div) {
+@@ -704,11 +643,11 @@
+               default:
+                       return -EINVAL;
+               }
+-              wm8580_write(codec, WM8580_CLKSEL, reg);
++              snd_soc_write(codec, WM8580_CLKSEL, reg);
+               break;
+       case WM8580_CLKOUTSRC:
+-              reg = wm8580_read(codec, WM8580_PLLB4);
++              reg = snd_soc_read(codec, WM8580_PLLB4);
+               reg &= ~WM8580_PLLB4_CLKOUTSRC_MASK;
+               switch (div) {
+@@ -730,7 +669,7 @@
+               default:
+                       return -EINVAL;
+               }
+-              wm8580_write(codec, WM8580_PLLB4, reg);
++              snd_soc_write(codec, WM8580_PLLB4, reg);
+               break;
+       default:
+@@ -745,14 +684,14 @@
+       struct snd_soc_codec *codec = codec_dai->codec;
+       unsigned int reg;
+-      reg = wm8580_read(codec, WM8580_DAC_CONTROL5);
++      reg = snd_soc_read(codec, WM8580_DAC_CONTROL5);
+       if (mute)
+               reg |= WM8580_DAC_CONTROL5_MUTEALL;
+       else
+               reg &= ~WM8580_DAC_CONTROL5_MUTEALL;
+-      wm8580_write(codec, WM8580_DAC_CONTROL5, reg);
++      snd_soc_write(codec, WM8580_DAC_CONTROL5, reg);
+       return 0;
+ }
+@@ -769,20 +708,20 @@
+       case SND_SOC_BIAS_STANDBY:
+               if (codec->bias_level == SND_SOC_BIAS_OFF) {
+                       /* Power up and get individual control of the DACs */
+-                      reg = wm8580_read(codec, WM8580_PWRDN1);
++                      reg = snd_soc_read(codec, WM8580_PWRDN1);
+                       reg &= ~(WM8580_PWRDN1_PWDN | WM8580_PWRDN1_ALLDACPD);
+-                      wm8580_write(codec, WM8580_PWRDN1, reg);
++                      snd_soc_write(codec, WM8580_PWRDN1, reg);
+                       /* Make VMID high impedence */
+-                      reg = wm8580_read(codec,  WM8580_ADC_CONTROL1);
++                      reg = snd_soc_read(codec,  WM8580_ADC_CONTROL1);
+                       reg &= ~0x100;
+-                      wm8580_write(codec, WM8580_ADC_CONTROL1, reg);
++                      snd_soc_write(codec, WM8580_ADC_CONTROL1, reg);
+               }
+               break;
+       case SND_SOC_BIAS_OFF:
+-              reg = wm8580_read(codec, WM8580_PWRDN1);
+-              wm8580_write(codec, WM8580_PWRDN1, reg | WM8580_PWRDN1_PWDN);
++              reg = snd_soc_read(codec, WM8580_PWRDN1);
++              snd_soc_write(codec, WM8580_PWRDN1, reg | WM8580_PWRDN1_PWDN);
+               break;
+       }
+       codec->bias_level = level;
+@@ -893,7 +832,8 @@
+ };
+ EXPORT_SYMBOL_GPL(soc_codec_dev_wm8580);
+-static int wm8580_register(struct wm8580_priv *wm8580)
++static int wm8580_register(struct wm8580_priv *wm8580,
++                         enum snd_soc_control_type control)
+ {
+       int ret, i;
+       struct snd_soc_codec *codec = &wm8580->codec;
+@@ -911,8 +851,6 @@
+       codec->private_data = wm8580;
+       codec->name = "WM8580";
+       codec->owner = THIS_MODULE;
+-      codec->read = wm8580_read_reg_cache;
+-      codec->write = wm8580_write;
+       codec->bias_level = SND_SOC_BIAS_OFF;
+       codec->set_bias_level = wm8580_set_bias_level;
+       codec->dai = wm8580_dai;
+@@ -922,11 +860,34 @@
+       memcpy(codec->reg_cache, wm8580_reg, sizeof(wm8580_reg));
++      ret = snd_soc_codec_set_cache_io(codec, 7, 9, control);
++      if (ret < 0) {
++              dev_err(codec->dev, "Failed to set cache I/O: %d\n", ret);
++              goto err;
++      }
++
++      for (i = 0; i < ARRAY_SIZE(wm8580->supplies); i++)
++              wm8580->supplies[i].supply = wm8580_supply_names[i];
++
++      ret = regulator_bulk_get(codec->dev, ARRAY_SIZE(wm8580->supplies),
++                               wm8580->supplies);
++      if (ret != 0) {
++              dev_err(codec->dev, "Failed to request supplies: %d\n", ret);
++              goto err;
++      }
++
++      ret = regulator_bulk_enable(ARRAY_SIZE(wm8580->supplies),
++                                  wm8580->supplies);
++      if (ret != 0) {
++              dev_err(codec->dev, "Failed to enable supplies: %d\n", ret);
++              goto err_regulator_get;
++      }
++
+       /* Get the codec into a known state */
+-      ret = wm8580_write(codec, WM8580_RESET, 0);
++      ret = snd_soc_write(codec, WM8580_RESET, 0);
+       if (ret != 0) {
+               dev_err(codec->dev, "Failed to reset codec: %d\n", ret);
+-              goto err;
++              goto err_regulator_enable;
+       }
+       for (i = 0; i < ARRAY_SIZE(wm8580_dai); i++)
+@@ -939,7 +900,7 @@
+       ret = snd_soc_register_codec(codec);
+       if (ret != 0) {
+               dev_err(codec->dev, "Failed to register codec: %d\n", ret);
+-              goto err;
++              goto err_regulator_enable;
+       }
+       ret = snd_soc_register_dais(wm8580_dai, ARRAY_SIZE(wm8580_dai));
+@@ -952,6 +913,10 @@
+ err_codec:
+       snd_soc_unregister_codec(codec);
++err_regulator_enable:
++      regulator_bulk_disable(ARRAY_SIZE(wm8580->supplies), wm8580->supplies);
++err_regulator_get:
++      regulator_bulk_free(ARRAY_SIZE(wm8580->supplies), wm8580->supplies);
+ err:
+       kfree(wm8580);
+       return ret;
+@@ -962,6 +927,8 @@
+       wm8580_set_bias_level(&wm8580->codec, SND_SOC_BIAS_OFF);
+       snd_soc_unregister_dais(wm8580_dai, ARRAY_SIZE(wm8580_dai));
+       snd_soc_unregister_codec(&wm8580->codec);
++      regulator_bulk_disable(ARRAY_SIZE(wm8580->supplies), wm8580->supplies);
++      regulator_bulk_free(ARRAY_SIZE(wm8580->supplies), wm8580->supplies);
+       kfree(wm8580);
+       wm8580_codec = NULL;
+ }
+@@ -978,14 +945,13 @@
+               return -ENOMEM;
+       codec = &wm8580->codec;
+-      codec->hw_write = (hw_write_t)i2c_master_send;
+       i2c_set_clientdata(i2c, wm8580);
+       codec->control_data = i2c;
+       codec->dev = &i2c->dev;
+-      return wm8580_register(wm8580);
++      return wm8580_register(wm8580, SND_SOC_I2C);
+ }
+ static int wm8580_i2c_remove(struct i2c_client *client)
+@@ -995,6 +961,21 @@
+       return 0;
+ }
++#ifdef CONFIG_PM
++static int wm8580_i2c_suspend(struct i2c_client *client, pm_message_t msg)
++{
++      return snd_soc_suspend_device(&client->dev);
++}
++
++static int wm8580_i2c_resume(struct i2c_client *client)
++{
++      return snd_soc_resume_device(&client->dev);
++}
++#else
++#define wm8580_i2c_suspend NULL
++#define wm8580_i2c_resume NULL
++#endif
++
+ static const struct i2c_device_id wm8580_i2c_id[] = {
+       { "wm8580", 0 },
+       { }
+@@ -1008,6 +989,8 @@
+       },
+       .probe =    wm8580_i2c_probe,
+       .remove =   wm8580_i2c_remove,
++      .suspend =  wm8580_i2c_suspend,
++      .resume =   wm8580_i2c_resume,
+       .id_table = wm8580_i2c_id,
+ };
+ #endif
+Index: linux-2.6.30/sound/soc/codecs/wm8728.c
+===================================================================
+--- linux-2.6.30.orig/sound/soc/codecs/wm8728.c        2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/sound/soc/codecs/wm8728.c     2011-02-01 16:40:30.185047492 +0100
+@@ -43,45 +43,6 @@
+       0x100,
+ };
+-static inline unsigned int wm8728_read_reg_cache(struct snd_soc_codec *codec,
+-      unsigned int reg)
+-{
+-      u16 *cache = codec->reg_cache;
+-      BUG_ON(reg >= ARRAY_SIZE(wm8728_reg_defaults));
+-      return cache[reg];
+-}
+-
+-static inline void wm8728_write_reg_cache(struct snd_soc_codec *codec,
+-      u16 reg, unsigned int value)
+-{
+-      u16 *cache = codec->reg_cache;
+-      BUG_ON(reg >= ARRAY_SIZE(wm8728_reg_defaults));
+-      cache[reg] = value;
+-}
+-
+-/*
+- * write to the WM8728 register space
+- */
+-static int wm8728_write(struct snd_soc_codec *codec, unsigned int reg,
+-      unsigned int value)
+-{
+-      u8 data[2];
+-
+-      /* data is
+-       *   D15..D9 WM8728 register offset
+-       *   D8...D0 register data
+-       */
+-      data[0] = (reg << 1) | ((value >> 8) & 0x0001);
+-      data[1] = value & 0x00ff;
+-
+-      wm8728_write_reg_cache(codec, reg, value);
+-
+-      if (codec->hw_write(codec->control_data, data, 2) == 2)
+-              return 0;
+-      else
+-              return -EIO;
+-}
+-
+ static const DECLARE_TLV_DB_SCALE(wm8728_tlv, -12750, 50, 1);
+ static const struct snd_kcontrol_new wm8728_snd_controls[] = {
+@@ -121,12 +82,12 @@
+ static int wm8728_mute(struct snd_soc_dai *dai, int mute)
+ {
+       struct snd_soc_codec *codec = dai->codec;
+-      u16 mute_reg = wm8728_read_reg_cache(codec, WM8728_DACCTL);
++      u16 mute_reg = snd_soc_read(codec, WM8728_DACCTL);
+       if (mute)
+-              wm8728_write(codec, WM8728_DACCTL, mute_reg | 1);
++              snd_soc_write(codec, WM8728_DACCTL, mute_reg | 1);
+       else
+-              wm8728_write(codec, WM8728_DACCTL, mute_reg & ~1);
++              snd_soc_write(codec, WM8728_DACCTL, mute_reg & ~1);
+       return 0;
+ }
+@@ -138,7 +99,7 @@
+       struct snd_soc_pcm_runtime *rtd = substream->private_data;
+       struct snd_soc_device *socdev = rtd->socdev;
+       struct snd_soc_codec *codec = socdev->card->codec;
+-      u16 dac = wm8728_read_reg_cache(codec, WM8728_DACCTL);
++      u16 dac = snd_soc_read(codec, WM8728_DACCTL);
+       dac &= ~0x18;
+@@ -155,7 +116,7 @@
+               return -EINVAL;
+       }
+-      wm8728_write(codec, WM8728_DACCTL, dac);
++      snd_soc_write(codec, WM8728_DACCTL, dac);
+       return 0;
+ }
+@@ -164,7 +125,7 @@
+               unsigned int fmt)
+ {
+       struct snd_soc_codec *codec = codec_dai->codec;
+-      u16 iface = wm8728_read_reg_cache(codec, WM8728_IFCTL);
++      u16 iface = snd_soc_read(codec, WM8728_IFCTL);
+       /* Currently only I2S is supported by the driver, though the
+        * hardware is more flexible.
+@@ -204,7 +165,7 @@
+               return -EINVAL;
+       }
+-      wm8728_write(codec, WM8728_IFCTL, iface);
++      snd_soc_write(codec, WM8728_IFCTL, iface);
+       return 0;
+ }
+@@ -220,19 +181,19 @@
+       case SND_SOC_BIAS_STANDBY:
+               if (codec->bias_level == SND_SOC_BIAS_OFF) {
+                       /* Power everything up... */
+-                      reg = wm8728_read_reg_cache(codec, WM8728_DACCTL);
+-                      wm8728_write(codec, WM8728_DACCTL, reg & ~0x4);
++                      reg = snd_soc_read(codec, WM8728_DACCTL);
++                      snd_soc_write(codec, WM8728_DACCTL, reg & ~0x4);
+                       /* ..then sync in the register cache. */
+                       for (i = 0; i < ARRAY_SIZE(wm8728_reg_defaults); i++)
+-                              wm8728_write(codec, i,
+-                                           wm8728_read_reg_cache(codec, i));
++                              snd_soc_write(codec, i,
++                                           snd_soc_read(codec, i));
+               }
+               break;
+       case SND_SOC_BIAS_OFF:
+-              reg = wm8728_read_reg_cache(codec, WM8728_DACCTL);
+-              wm8728_write(codec, WM8728_DACCTL, reg | 0x4);
++              reg = snd_soc_read(codec, WM8728_DACCTL);
++              snd_soc_write(codec, WM8728_DACCTL, reg | 0x4);
+               break;
+       }
+       codec->bias_level = level;
+@@ -287,15 +248,14 @@
+  * initialise the WM8728 driver
+  * register the mixer and dsp interfaces with the kernel
+  */
+-static int wm8728_init(struct snd_soc_device *socdev)
++static int wm8728_init(struct snd_soc_device *socdev,
++                     enum snd_soc_control_type control)
+ {
+       struct snd_soc_codec *codec = socdev->card->codec;
+       int ret = 0;
+       codec->name = "WM8728";
+       codec->owner = THIS_MODULE;
+-      codec->read = wm8728_read_reg_cache;
+-      codec->write = wm8728_write;
+       codec->set_bias_level = wm8728_set_bias_level;
+       codec->dai = &wm8728_dai;
+       codec->num_dai = 1;
+@@ -307,11 +267,18 @@
+       if (codec->reg_cache == NULL)
+               return -ENOMEM;
++      ret = snd_soc_codec_set_cache_io(codec, 7, 9, control);
++      if (ret < 0) {
++              printk(KERN_ERR "wm8728: failed to configure cache I/O: %d\n",
++                     ret);
++              goto err;
++      }
++
+       /* register pcms */
+       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
+       if (ret < 0) {
+               printk(KERN_ERR "wm8728: failed to create pcms\n");
+-              goto pcm_err;
++              goto err;
+       }
+       /* power on device */
+@@ -331,7 +298,7 @@
+ card_err:
+       snd_soc_free_pcms(socdev);
+       snd_soc_dapm_free(socdev);
+-pcm_err:
++err:
+       kfree(codec->reg_cache);
+       return ret;
+ }
+@@ -357,7 +324,7 @@
+       i2c_set_clientdata(i2c, codec);
+       codec->control_data = i2c;
+-      ret = wm8728_init(socdev);
++      ret = wm8728_init(socdev, SND_SOC_I2C);
+       if (ret < 0)
+               pr_err("failed to initialise WM8728\n");
+@@ -437,7 +404,7 @@
+       codec->control_data = spi;
+-      ret = wm8728_init(socdev);
++      ret = wm8728_init(socdev, SND_SOC_SPI);
+       if (ret < 0)
+               dev_err(&spi->dev, "failed to initialise WM8728\n");
+@@ -458,30 +425,6 @@
+       .probe          = wm8728_spi_probe,
+       .remove         = __devexit_p(wm8728_spi_remove),
+ };
+-
+-static int wm8728_spi_write(struct spi_device *spi, const char *data, int len)
+-{
+-      struct spi_transfer t;
+-      struct spi_message m;
+-      u8 msg[2];
+-
+-      if (len <= 0)
+-              return 0;
+-
+-      msg[0] = data[0];
+-      msg[1] = data[1];
+-
+-      spi_message_init(&m);
+-      memset(&t, 0, (sizeof t));
+-
+-      t.tx_buf = &msg[0];
+-      t.len = len;
+-
+-      spi_message_add_tail(&t, &m);
+-      spi_sync(spi, &m);
+-
+-      return len;
+-}
+ #endif /* CONFIG_SPI_MASTER */
+ static int wm8728_probe(struct platform_device *pdev)
+@@ -506,13 +449,11 @@
+ #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
+       if (setup->i2c_address) {
+-              codec->hw_write = (hw_write_t)i2c_master_send;
+               ret = wm8728_add_i2c_device(pdev, setup);
+       }
+ #endif
+ #if defined(CONFIG_SPI_MASTER)
+       if (setup->spi) {
+-              codec->hw_write = (hw_write_t)wm8728_spi_write;
+               ret = spi_register_driver(&wm8728_spi_driver);
+               if (ret != 0)
+                       printk(KERN_ERR "can't add spi driver");
+Index: linux-2.6.30/sound/soc/codecs/wm8731.c
+===================================================================
+--- linux-2.6.30.orig/sound/soc/codecs/wm8731.c        2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/sound/soc/codecs/wm8731.c     2011-02-01 16:40:30.185047492 +0100
+@@ -26,6 +26,7 @@
+ #include <sound/soc.h>
+ #include <sound/soc-dapm.h>
+ #include <sound/initval.h>
++#include <sound/tlv.h>
+ #include "wm8731.h"
+@@ -39,9 +40,6 @@
+       unsigned int sysclk;
+ };
+-#ifdef CONFIG_SPI_MASTER
+-static int wm8731_spi_write(struct spi_device *spi, const char *data, int len);
+-#endif
+ /*
+  * wm8731 register cache
+@@ -50,60 +48,12 @@
+  * 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
++      0x0097, 0x0097, 0x0079, 0x0079,
++      0x000a, 0x0008, 0x009f, 0x000a,
++      0x0000, 0x0000
+ };
+-/*
+- * 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)
++#define wm8731_reset(c)       snd_soc_write(c, WM8731_RESET, 0)
+ static const char *wm8731_input_select[] = {"Line In", "Mic"};
+ static const char *wm8731_deemph[] = {"None", "32Khz", "44.1Khz", "48Khz"};
+@@ -113,20 +63,26 @@
+       SOC_ENUM_SINGLE(WM8731_APDIGI, 1, 4, wm8731_deemph),
+ };
++static const DECLARE_TLV_DB_SCALE(in_tlv, -3450, 150, 0);
++static const DECLARE_TLV_DB_SCALE(sidetone_tlv, -1500, 300, 0);
++static const DECLARE_TLV_DB_SCALE(out_tlv, -12100, 100, 1);
++
+ 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_TLV("Master Playback Volume", WM8731_LOUT1V, WM8731_ROUT1V,
++               0, 127, 0, out_tlv),
+ 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_TLV("Capture Volume", WM8731_LINVOL, WM8731_RINVOL, 0, 31, 0,
++               in_tlv),
+ 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("Mic Capture Switch", WM8731_APANA, 1, 1, 1),
+-SOC_SINGLE("Sidetone Playback Volume", WM8731_APANA, 6, 3, 1),
++SOC_SINGLE_TLV("Sidetone Playback Volume", WM8731_APANA, 6, 3, 1,
++             sidetone_tlv),
+ SOC_SINGLE("ADC High Pass Filter Switch", WM8731_APDIGI, 0, 1, 1),
+ SOC_SINGLE("Store DC Offset Switch", WM8731_APDIGI, 4, 1, 0),
+@@ -260,12 +216,12 @@
+       struct snd_soc_device *socdev = rtd->socdev;
+       struct snd_soc_codec *codec = socdev->card->codec;
+       struct wm8731_priv *wm8731 = codec->private_data;
+-      u16 iface = wm8731_read_reg_cache(codec, WM8731_IFACE) & 0xfff3;
++      u16 iface = snd_soc_read(codec, WM8731_IFACE) & 0xfff3;
+       int i = get_coeff(wm8731->sysclk, params_rate(params));
+       u16 srate = (coeff_div[i].sr << 2) |
+               (coeff_div[i].bosr << 1) | coeff_div[i].usb;
+-      wm8731_write(codec, WM8731_SRATE, srate);
++      snd_soc_write(codec, WM8731_SRATE, srate);
+       /* bit size */
+       switch (params_format(params)) {
+@@ -279,7 +235,7 @@
+               break;
+       }
+-      wm8731_write(codec, WM8731_IFACE, iface);
++      snd_soc_write(codec, WM8731_IFACE, iface);
+       return 0;
+ }
+@@ -291,7 +247,7 @@
+       struct snd_soc_codec *codec = socdev->card->codec;
+       /* set active */
+-      wm8731_write(codec, WM8731_ACTIVE, 0x0001);
++      snd_soc_write(codec, WM8731_ACTIVE, 0x0001);
+       return 0;
+ }
+@@ -306,19 +262,19 @@
+       /* deactivate */
+       if (!codec->active) {
+               udelay(50);
+-              wm8731_write(codec, WM8731_ACTIVE, 0x0);
++              snd_soc_write(codec, WM8731_ACTIVE, 0x0);
+       }
+ }
+ static int wm8731_mute(struct snd_soc_dai *dai, int mute)
+ {
+       struct snd_soc_codec *codec = dai->codec;
+-      u16 mute_reg = wm8731_read_reg_cache(codec, WM8731_APDIGI) & 0xfff7;
++      u16 mute_reg = snd_soc_read(codec, WM8731_APDIGI) & 0xfff7;
+       if (mute)
+-              wm8731_write(codec, WM8731_APDIGI, mute_reg | 0x8);
++              snd_soc_write(codec, WM8731_APDIGI, mute_reg | 0x8);
+       else
+-              wm8731_write(codec, WM8731_APDIGI, mute_reg);
++              snd_soc_write(codec, WM8731_APDIGI, mute_reg);
+       return 0;
+ }
+@@ -396,7 +352,7 @@
+       }
+       /* set iface */
+-      wm8731_write(codec, WM8731_IFACE, iface);
++      snd_soc_write(codec, WM8731_IFACE, iface);
+       return 0;
+ }
+@@ -412,12 +368,12 @@
+               break;
+       case SND_SOC_BIAS_STANDBY:
+               /* Clear PWROFF, gate CLKOUT, everything else as-is */
+-              reg = wm8731_read_reg_cache(codec, WM8731_PWR) & 0xff7f;
+-              wm8731_write(codec, WM8731_PWR, reg | 0x0040);
++              reg = snd_soc_read(codec, WM8731_PWR) & 0xff7f;
++              snd_soc_write(codec, WM8731_PWR, reg | 0x0040);
+               break;
+       case SND_SOC_BIAS_OFF:
+-              wm8731_write(codec, WM8731_ACTIVE, 0x0);
+-              wm8731_write(codec, WM8731_PWR, 0xffff);
++              snd_soc_write(codec, WM8731_ACTIVE, 0x0);
++              snd_soc_write(codec, WM8731_PWR, 0xffff);
+               break;
+       }
+       codec->bias_level = level;
+@@ -457,15 +413,17 @@
+               .rates = WM8731_RATES,
+               .formats = WM8731_FORMATS,},
+       .ops = &wm8731_dai_ops,
++      .symmetric_rates = 1,
+ };
+ EXPORT_SYMBOL_GPL(wm8731_dai);
++#ifdef CONFIG_PM
+ 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->card->codec;
+-      wm8731_write(codec, WM8731_ACTIVE, 0x0);
++      snd_soc_write(codec, WM8731_ACTIVE, 0x0);
+       wm8731_set_bias_level(codec, SND_SOC_BIAS_OFF);
+       return 0;
+ }
+@@ -488,6 +446,10 @@
+       wm8731_set_bias_level(codec, codec->suspend_bias_level);
+       return 0;
+ }
++#else
++#define wm8731_suspend NULL
++#define wm8731_resume NULL
++#endif
+ static int wm8731_probe(struct platform_device *pdev)
+ {
+@@ -547,15 +509,16 @@
+ };
+ EXPORT_SYMBOL_GPL(soc_codec_dev_wm8731);
+-static int wm8731_register(struct wm8731_priv *wm8731)
++static int wm8731_register(struct wm8731_priv *wm8731,
++                         enum snd_soc_control_type control)
+ {
+       int ret;
+       struct snd_soc_codec *codec = &wm8731->codec;
+-      u16 reg;
+       if (wm8731_codec) {
+               dev_err(codec->dev, "Another WM8731 is registered\n");
+-              return -EINVAL;
++              ret = -EINVAL;
++              goto err;
+       }
+       mutex_init(&codec->mutex);
+@@ -565,8 +528,6 @@
+       codec->private_data = wm8731;
+       codec->name = "WM8731";
+       codec->owner = THIS_MODULE;
+-      codec->read = wm8731_read_reg_cache;
+-      codec->write = wm8731_write;
+       codec->bias_level = SND_SOC_BIAS_OFF;
+       codec->set_bias_level = wm8731_set_bias_level;
+       codec->dai = &wm8731_dai;
+@@ -576,10 +537,16 @@
+       memcpy(codec->reg_cache, wm8731_reg, sizeof(wm8731_reg));
++      ret = snd_soc_codec_set_cache_io(codec, 7, 9, control);
++      if (ret < 0) {
++              dev_err(codec->dev, "Failed to set cache I/O: %d\n", ret);
++              goto err;
++      }
++
+       ret = wm8731_reset(codec);
+       if (ret < 0) {
+-              dev_err(codec->dev, "Failed to issue reset\n");
+-              return ret;
++              dev_err(codec->dev, "Failed to issue reset: %d\n", ret);
++              goto err;
+       }
+       wm8731_dai.dev = codec->dev;
+@@ -587,35 +554,36 @@
+       wm8731_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
+       /* Latch 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);
++      snd_soc_update_bits(codec, WM8731_LOUT1V, 0x100, 0);
++      snd_soc_update_bits(codec, WM8731_ROUT1V, 0x100, 0);
++      snd_soc_update_bits(codec, WM8731_LINVOL, 0x100, 0);
++      snd_soc_update_bits(codec, WM8731_RINVOL, 0x100, 0);
+       /* Disable bypass path by default */
+-      reg = wm8731_read_reg_cache(codec, WM8731_APANA);
+-      wm8731_write(codec, WM8731_APANA, reg & ~0x4);
++      snd_soc_update_bits(codec, WM8731_APANA, 0x4, 0);
+       wm8731_codec = codec;
+       ret = snd_soc_register_codec(codec);
+       if (ret != 0) {
+               dev_err(codec->dev, "Failed to register codec: %d\n", ret);
+-              return ret;
++              goto err;
+       }
+       ret = snd_soc_register_dai(&wm8731_dai);
+       if (ret != 0) {
+               dev_err(codec->dev, "Failed to register DAI: %d\n", ret);
+               snd_soc_unregister_codec(codec);
+-              return ret;
++              goto err_codec;
+       }
+       return 0;
++
++err_codec:
++      snd_soc_unregister_codec(codec);
++err:
++      kfree(wm8731);
++      return ret;
+ }
+ static void wm8731_unregister(struct wm8731_priv *wm8731)
+@@ -628,30 +596,6 @@
+ }
+ #if defined(CONFIG_SPI_MASTER)
+-static int wm8731_spi_write(struct spi_device *spi, const char *data, int len)
+-{
+-      struct spi_transfer t;
+-      struct spi_message m;
+-      u8 msg[2];
+-
+-      if (len <= 0)
+-              return 0;
+-
+-      msg[0] = data[0];
+-      msg[1] = data[1];
+-
+-      spi_message_init(&m);
+-      memset(&t, 0, (sizeof t));
+-
+-      t.tx_buf = &msg[0];
+-      t.len = len;
+-
+-      spi_message_add_tail(&t, &m);
+-      spi_sync(spi, &m);
+-
+-      return len;
+-}
+-
+ static int __devinit wm8731_spi_probe(struct spi_device *spi)
+ {
+       struct snd_soc_codec *codec;
+@@ -663,23 +607,37 @@
+       codec = &wm8731->codec;
+       codec->control_data = spi;
+-      codec->hw_write = (hw_write_t)wm8731_spi_write;
+       codec->dev = &spi->dev;
+-      spi->dev.driver_data = wm8731;
++      dev_set_drvdata(&spi->dev, wm8731);
+-      return wm8731_register(wm8731);
++      return wm8731_register(wm8731, SND_SOC_SPI);
+ }
+ static int __devexit wm8731_spi_remove(struct spi_device *spi)
+ {
+-      struct wm8731_priv *wm8731 = spi->dev.driver_data;
++      struct wm8731_priv *wm8731 = dev_get_drvdata(&spi->dev);
+       wm8731_unregister(wm8731);
+       return 0;
+ }
++#ifdef CONFIG_PM
++static int wm8731_spi_suspend(struct spi_device *spi, pm_message_t msg)
++{
++      return snd_soc_suspend_device(&spi->dev);
++}
++
++static int wm8731_spi_resume(struct spi_device *spi)
++{
++      return snd_soc_resume_device(&spi->dev);
++}
++#else
++#define wm8731_spi_suspend NULL
++#define wm8731_spi_resume NULL
++#endif
++
+ static struct spi_driver wm8731_spi_driver = {
+       .driver = {
+               .name   = "wm8731",
+@@ -687,6 +645,8 @@
+               .owner  = THIS_MODULE,
+       },
+       .probe          = wm8731_spi_probe,
++      .suspend        = wm8731_spi_suspend,
++      .resume         = wm8731_spi_resume,
+       .remove         = __devexit_p(wm8731_spi_remove),
+ };
+ #endif /* CONFIG_SPI_MASTER */
+@@ -703,14 +663,13 @@
+               return -ENOMEM;
+       codec = &wm8731->codec;
+-      codec->hw_write = (hw_write_t)i2c_master_send;
+       i2c_set_clientdata(i2c, wm8731);
+       codec->control_data = i2c;
+       codec->dev = &i2c->dev;
+-      return wm8731_register(wm8731);
++      return wm8731_register(wm8731, SND_SOC_I2C);
+ }
+ static __devexit int wm8731_i2c_remove(struct i2c_client *client)
+@@ -720,6 +679,21 @@
+       return 0;
+ }
++#ifdef CONFIG_PM
++static int wm8731_i2c_suspend(struct i2c_client *i2c, pm_message_t msg)
++{
++      return snd_soc_suspend_device(&i2c->dev);
++}
++
++static int wm8731_i2c_resume(struct i2c_client *i2c)
++{
++      return snd_soc_resume_device(&i2c->dev);
++}
++#else
++#define wm8731_i2c_suspend NULL
++#define wm8731_i2c_resume NULL
++#endif
++
+ static const struct i2c_device_id wm8731_i2c_id[] = {
+       { "wm8731", 0 },
+       { }
+@@ -733,6 +707,8 @@
+       },
+       .probe =    wm8731_i2c_probe,
+       .remove =   __devexit_p(wm8731_i2c_remove),
++      .suspend =  wm8731_i2c_suspend,
++      .resume =   wm8731_i2c_resume,
+       .id_table = wm8731_i2c_id,
+ };
+ #endif
+Index: linux-2.6.30/sound/soc/codecs/wm8750.c
+===================================================================
+--- linux-2.6.30.orig/sound/soc/codecs/wm8750.c        2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/sound/soc/codecs/wm8750.c     2011-02-01 16:40:30.189047317 +0100
+@@ -55,50 +55,7 @@
+       0x0079, 0x0079, 0x0079,          /* 40 */
+ };
+-/*
+- * 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)
++#define wm8750_reset(c)       snd_soc_write(c, WM8750_RESET, 0)
+ /*
+  * WM8750 Controls
+@@ -594,7 +551,7 @@
+               return -EINVAL;
+       }
+-      wm8750_write(codec, WM8750_IFACE, iface);
++      snd_soc_write(codec, WM8750_IFACE, iface);
+       return 0;
+ }
+@@ -606,8 +563,8 @@
+       struct snd_soc_device *socdev = rtd->socdev;
+       struct snd_soc_codec *codec = socdev->card->codec;
+       struct wm8750_priv *wm8750 = codec->private_data;
+-      u16 iface = wm8750_read_reg_cache(codec, WM8750_IFACE) & 0x1f3;
+-      u16 srate = wm8750_read_reg_cache(codec, WM8750_SRATE) & 0x1c0;
++      u16 iface = snd_soc_read(codec, WM8750_IFACE) & 0x1f3;
++      u16 srate = snd_soc_read(codec, WM8750_SRATE) & 0x1c0;
+       int coeff = get_coeff(wm8750->sysclk, params_rate(params));
+       /* bit size */
+@@ -626,9 +583,9 @@
+       }
+       /* set iface & srate */
+-      wm8750_write(codec, WM8750_IFACE, iface);
++      snd_soc_write(codec, WM8750_IFACE, iface);
+       if (coeff >= 0)
+-              wm8750_write(codec, WM8750_SRATE, srate |
++              snd_soc_write(codec, WM8750_SRATE, srate |
+                       (coeff_div[coeff].sr << 1) | coeff_div[coeff].usb);
+       return 0;
+@@ -637,35 +594,35 @@
+ static int wm8750_mute(struct snd_soc_dai *dai, int mute)
+ {
+       struct snd_soc_codec *codec = dai->codec;
+-      u16 mute_reg = wm8750_read_reg_cache(codec, WM8750_ADCDAC) & 0xfff7;
++      u16 mute_reg = snd_soc_read(codec, WM8750_ADCDAC) & 0xfff7;
+       if (mute)
+-              wm8750_write(codec, WM8750_ADCDAC, mute_reg | 0x8);
++              snd_soc_write(codec, WM8750_ADCDAC, mute_reg | 0x8);
+       else
+-              wm8750_write(codec, WM8750_ADCDAC, mute_reg);
++              snd_soc_write(codec, WM8750_ADCDAC, mute_reg);
+       return 0;
+ }
+ static int wm8750_set_bias_level(struct snd_soc_codec *codec,
+                                enum snd_soc_bias_level level)
+ {
+-      u16 pwr_reg = wm8750_read_reg_cache(codec, WM8750_PWR1) & 0xfe3e;
++      u16 pwr_reg = snd_soc_read(codec, WM8750_PWR1) & 0xfe3e;
+       switch (level) {
+       case SND_SOC_BIAS_ON:
+               /* set vmid to 50k and unmute dac */
+-              wm8750_write(codec, WM8750_PWR1, pwr_reg | 0x00c0);
++              snd_soc_write(codec, WM8750_PWR1, pwr_reg | 0x00c0);
+               break;
+       case SND_SOC_BIAS_PREPARE:
+               /* set vmid to 5k for quick power up */
+-              wm8750_write(codec, WM8750_PWR1, pwr_reg | 0x01c1);
++              snd_soc_write(codec, WM8750_PWR1, pwr_reg | 0x01c1);
+               break;
+       case SND_SOC_BIAS_STANDBY:
+               /* mute dac and set vmid to 500k, enable VREF */
+-              wm8750_write(codec, WM8750_PWR1, pwr_reg | 0x0141);
++              snd_soc_write(codec, WM8750_PWR1, pwr_reg | 0x0141);
+               break;
+       case SND_SOC_BIAS_OFF:
+-              wm8750_write(codec, WM8750_PWR1, 0x0001);
++              snd_soc_write(codec, WM8750_PWR1, 0x0001);
+               break;
+       }
+       codec->bias_level = level;
+@@ -754,15 +711,14 @@
+  * initialise the WM8750 driver
+  * register the mixer and dsp interfaces with the kernel
+  */
+-static int wm8750_init(struct snd_soc_device *socdev)
++static int wm8750_init(struct snd_soc_device *socdev,
++                     enum snd_soc_control_type control)
+ {
+       struct snd_soc_codec *codec = socdev->card->codec;
+       int reg, ret = 0;
+       codec->name = "WM8750";
+       codec->owner = THIS_MODULE;
+-      codec->read = wm8750_read_reg_cache;
+-      codec->write = wm8750_write;
+       codec->set_bias_level = wm8750_set_bias_level;
+       codec->dai = &wm8750_dai;
+       codec->num_dai = 1;
+@@ -771,13 +727,23 @@
+       if (codec->reg_cache == NULL)
+               return -ENOMEM;
+-      wm8750_reset(codec);
++      ret = snd_soc_codec_set_cache_io(codec, 7, 9, control);
++      if (ret < 0) {
++              printk(KERN_ERR "wm8750: failed to set cache I/O: %d\n", ret);
++              goto err;
++      }
++
++      ret = wm8750_reset(codec);
++      if (ret < 0) {
++              printk(KERN_ERR "wm8750: failed to reset: %d\n", ret);
++              goto err;
++      }
+       /* register pcms */
+       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
+       if (ret < 0) {
+               printk(KERN_ERR "wm8750: failed to create pcms\n");
+-              goto pcm_err;
++              goto err;
+       }
+       /* charge output caps */
+@@ -786,22 +752,22 @@
+       schedule_delayed_work(&codec->delayed_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);
++      reg = snd_soc_read(codec, WM8750_LDAC);
++      snd_soc_write(codec, WM8750_LDAC, reg | 0x0100);
++      reg = snd_soc_read(codec, WM8750_RDAC);
++      snd_soc_write(codec, WM8750_RDAC, reg | 0x0100);
++      reg = snd_soc_read(codec, WM8750_LOUT1V);
++      snd_soc_write(codec, WM8750_LOUT1V, reg | 0x0100);
++      reg = snd_soc_read(codec, WM8750_ROUT1V);
++      snd_soc_write(codec, WM8750_ROUT1V, reg | 0x0100);
++      reg = snd_soc_read(codec, WM8750_LOUT2V);
++      snd_soc_write(codec, WM8750_LOUT2V, reg | 0x0100);
++      reg = snd_soc_read(codec, WM8750_ROUT2V);
++      snd_soc_write(codec, WM8750_ROUT2V, reg | 0x0100);
++      reg = snd_soc_read(codec, WM8750_LINVOL);
++      snd_soc_write(codec, WM8750_LINVOL, reg | 0x0100);
++      reg = snd_soc_read(codec, WM8750_RINVOL);
++      snd_soc_write(codec, WM8750_RINVOL, reg | 0x0100);
+       snd_soc_add_controls(codec, wm8750_snd_controls,
+                               ARRAY_SIZE(wm8750_snd_controls));
+@@ -816,7 +782,7 @@
+ card_err:
+       snd_soc_free_pcms(socdev);
+       snd_soc_dapm_free(socdev);
+-pcm_err:
++err:
+       kfree(codec->reg_cache);
+       return ret;
+ }
+@@ -844,7 +810,7 @@
+       i2c_set_clientdata(i2c, codec);
+       codec->control_data = i2c;
+-      ret = wm8750_init(socdev);
++      ret = wm8750_init(socdev, SND_SOC_I2C);
+       if (ret < 0)
+               pr_err("failed to initialise WM8750\n");
+@@ -924,7 +890,7 @@
+       codec->control_data = spi;
+-      ret = wm8750_init(socdev);
++      ret = wm8750_init(socdev, SND_SOC_SPI);
+       if (ret < 0)
+               dev_err(&spi->dev, "failed to initialise WM8750\n");
+@@ -945,30 +911,6 @@
+       .probe          = wm8750_spi_probe,
+       .remove         = __devexit_p(wm8750_spi_remove),
+ };
+-
+-static int wm8750_spi_write(struct spi_device *spi, const char *data, int len)
+-{
+-      struct spi_transfer t;
+-      struct spi_message m;
+-      u8 msg[2];
+-
+-      if (len <= 0)
+-              return 0;
+-
+-      msg[0] = data[0];
+-      msg[1] = data[1];
+-
+-      spi_message_init(&m);
+-      memset(&t, 0, (sizeof t));
+-
+-      t.tx_buf = &msg[0];
+-      t.len = len;
+-
+-      spi_message_add_tail(&t, &m);
+-      spi_sync(spi, &m);
+-
+-      return len;
+-}
+ #endif
+ static int wm8750_probe(struct platform_device *pdev)
+@@ -1002,13 +944,11 @@
+ #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
+       if (setup->i2c_address) {
+-              codec->hw_write = (hw_write_t)i2c_master_send;
+               ret = wm8750_add_i2c_device(pdev, setup);
+       }
+ #endif
+ #if defined(CONFIG_SPI_MASTER)
+       if (setup->spi) {
+-              codec->hw_write = (hw_write_t)wm8750_spi_write;
+               ret = spi_register_driver(&wm8750_spi_driver);
+               if (ret != 0)
+                       printk(KERN_ERR "can't add spi driver");
+Index: linux-2.6.30/sound/soc/codecs/wm8753.c
+===================================================================
+--- linux-2.6.30.orig/sound/soc/codecs/wm8753.c        2011-02-01 16:39:20.000000000 +0100
++++ linux-2.6.30/sound/soc/codecs/wm8753.c     2011-02-01 16:44:16.336265765 +0100
+@@ -79,7 +79,7 @@
+       0x0097, 0x0097, 0x0000, 0x0004,
+       0x0000, 0x0083, 0x0024, 0x01ba,
+       0x0000, 0x0083, 0x0024, 0x01ba,
+-      0x0000, 0x0000
++      0x0000, 0x0000, 0x0000
+ };
+ /* codec private data */
+@@ -595,6 +595,7 @@
+       /* Mono Capture mixer-mux */
+       {"Capture Right Mixer", "Stereo", "Capture Right Mux"},
++      {"Capture Left Mixer", "Stereo", "Capture Left 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"},
+@@ -703,7 +704,7 @@
+       if ((Ndiv < 6) || (Ndiv > 12))
+               printk(KERN_WARNING
+-                      "wm8753: unsupported N = %d\n", Ndiv);
++                      "wm8753: unsupported N = %u\n", Ndiv);
+       pll_div->n = Ndiv;
+       Nmod = target % source;
+@@ -723,8 +724,8 @@
+       pll_div->k = K;
+ }
+-static int wm8753_set_dai_pll(struct snd_soc_dai *codec_dai,
+-              int pll_id, unsigned int freq_in, unsigned int freq_out)
++static int wm8753_set_dai_pll(struct snd_soc_dai *codec_dai, int pll_id,
++              int source, unsigned int freq_in, unsigned int freq_out)
+ {
+       u16 reg, enable;
+       int offset;
+@@ -1660,7 +1661,7 @@
+       codec->set_bias_level = wm8753_set_bias_level;
+       codec->dai = wm8753_dai;
+       codec->num_dai = 2;
+-      codec->reg_cache_size = ARRAY_SIZE(wm8753->reg_cache);
++      codec->reg_cache_size = ARRAY_SIZE(wm8753->reg_cache) + 1;
+       codec->reg_cache = &wm8753->reg_cache;
+       codec->private_data = wm8753;
+@@ -1766,6 +1767,21 @@
+         return 0;
+ }
++#ifdef CONFIG_PM
++static int wm8753_i2c_suspend(struct i2c_client *client, pm_message_t msg)
++{
++      return snd_soc_suspend_device(&client->dev);
++}
++
++static int wm8753_i2c_resume(struct i2c_client *client)
++{
++      return snd_soc_resume_device(&client->dev);
++}
++#else
++#define wm8753_i2c_suspend NULL
++#define wm8753_i2c_resume NULL
++#endif
++
+ static const struct i2c_device_id wm8753_i2c_id[] = {
+       { "wm8753", 0 },
+       { }
+@@ -1779,6 +1795,8 @@
+       },
+       .probe =    wm8753_i2c_probe,
+       .remove =   wm8753_i2c_remove,
++      .suspend =  wm8753_i2c_suspend,
++      .resume =   wm8753_i2c_resume,
+       .id_table = wm8753_i2c_id,
+ };
+ #endif
+@@ -1822,18 +1840,34 @@
+       codec->hw_write = (hw_write_t)wm8753_spi_write;
+       codec->dev = &spi->dev;
+-      spi->dev.driver_data = wm8753;
++      dev_set_drvdata(&spi->dev, wm8753);
+       return wm8753_register(wm8753);
+ }
+ static int __devexit wm8753_spi_remove(struct spi_device *spi)
+ {
+-      struct wm8753_priv *wm8753 = spi->dev.driver_data;
++      struct wm8753_priv *wm8753 = dev_get_drvdata(&spi->dev);
+       wm8753_unregister(wm8753);
+       return 0;
+ }
++#ifdef CONFIG_PM
++static int wm8753_spi_suspend(struct spi_device *spi, pm_message_t msg)
++{
++      return snd_soc_suspend_device(&spi->dev);
++}
++
++static int wm8753_spi_resume(struct spi_device *spi)
++{
++      return snd_soc_resume_device(&spi->dev);
++}
++
++#else
++#define wm8753_spi_suspend NULL
++#define wm8753_spi_resume NULL
++#endif
++
+ static struct spi_driver wm8753_spi_driver = {
+       .driver = {
+               .name   = "wm8753",
+@@ -1842,6 +1876,8 @@
+       },
+       .probe          = wm8753_spi_probe,
+       .remove         = __devexit_p(wm8753_spi_remove),
++      .suspend        = wm8753_spi_suspend,
++      .resume         = wm8753_spi_resume,
+ };
+ #endif
+Index: linux-2.6.30/sound/soc/codecs/wm8900.c
+===================================================================
+--- linux-2.6.30.orig/sound/soc/codecs/wm8900.c        2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/sound/soc/codecs/wm8900.c     2011-02-01 16:40:30.189047317 +0100
+@@ -116,6 +116,7 @@
+ #define WM8900_REG_CLOCKING2_DAC_CLKDIV 0x1c
+ #define WM8900_REG_DACCTRL_MUTE          0x004
++#define WM8900_REG_DACCTRL_DAC_SB_FILT   0x100
+ #define WM8900_REG_DACCTRL_AIF_LRCLKRATE 0x400
+ #define WM8900_REG_AUDIO3_ADCLRC_DIR    0x0800
+@@ -182,111 +183,20 @@
+       /* Remaining registers all zero */
+ };
+-/*
+- * read wm8900 register cache
+- */
+-static inline unsigned int wm8900_read_reg_cache(struct snd_soc_codec *codec,
+-      unsigned int reg)
+-{
+-      u16 *cache = codec->reg_cache;
+-
+-      BUG_ON(reg >= WM8900_MAXREG);
+-
+-      if (reg == WM8900_REG_ID)
+-              return 0;
+-
+-      return cache[reg];
+-}
+-
+-/*
+- * write wm8900 register cache
+- */
+-static inline void wm8900_write_reg_cache(struct snd_soc_codec *codec,
+-      u16 reg, unsigned int value)
+-{
+-      u16 *cache = codec->reg_cache;
+-
+-      BUG_ON(reg >= WM8900_MAXREG);
+-
+-      cache[reg] = value;
+-}
+-
+-/*
+- * write to the WM8900 register space
+- */
+-static int wm8900_write(struct snd_soc_codec *codec, unsigned int reg,
+-                      unsigned int value)
+-{
+-      u8 data[3];
+-
+-      if (value == wm8900_read_reg_cache(codec, reg))
+-              return 0;
+-
+-      /* data is
+-       *   D15..D9 WM8900 register offset
+-       *   D8...D0 register data
+-       */
+-      data[0] = reg;
+-      data[1] = value >> 8;
+-      data[2] = value & 0x00ff;
+-
+-      wm8900_write_reg_cache(codec, reg, value);
+-      if (codec->hw_write(codec->control_data, data, 3) == 3)
+-              return 0;
+-      else
+-              return -EIO;
+-}
+-
+-/*
+- * Read from the wm8900.
+- */
+-static unsigned int wm8900_chip_read(struct snd_soc_codec *codec, u8 reg)
+-{
+-      struct i2c_msg xfer[2];
+-      u16 data;
+-      int ret;
+-      struct i2c_client *client = codec->control_data;
+-
+-      BUG_ON(reg != WM8900_REG_ID && reg != WM8900_REG_POWER1);
+-
+-      /* Write register */
+-      xfer[0].addr = client->addr;
+-      xfer[0].flags = 0;
+-      xfer[0].len = 1;
+-      xfer[0].buf = &reg;
+-
+-      /* Read data */
+-      xfer[1].addr = client->addr;
+-      xfer[1].flags = I2C_M_RD;
+-      xfer[1].len = 2;
+-      xfer[1].buf = (u8 *)&data;
+-
+-      ret = i2c_transfer(client->adapter, xfer, 2);
+-      if (ret != 2) {
+-              printk(KERN_CRIT "i2c_transfer returned %d\n", ret);
+-              return 0;
+-      }
+-
+-      return (data >> 8) | ((data & 0xff) << 8);
+-}
+-
+-/*
+- * Read from the WM8900 register space.  Most registers can't be read
+- * and are therefore supplied from cache.
+- */
+-static unsigned int wm8900_read(struct snd_soc_codec *codec, unsigned int reg)
++static int wm8900_volatile_register(unsigned int reg)
+ {
+       switch (reg) {
+       case WM8900_REG_ID:
+-              return wm8900_chip_read(codec, reg);
++      case WM8900_REG_POWER1:
++              return 1;
+       default:
+-              return wm8900_read_reg_cache(codec, reg);
++              return 0;
+       }
+ }
+ static void wm8900_reset(struct snd_soc_codec *codec)
+ {
+-      wm8900_write(codec, WM8900_REG_RESET, 0);
++      snd_soc_write(codec, WM8900_REG_RESET, 0);
+       memcpy(codec->reg_cache, wm8900_reg_defaults,
+              sizeof(codec->reg_cache));
+@@ -296,14 +206,14 @@
+                          struct snd_kcontrol *kcontrol, int event)
+ {
+       struct snd_soc_codec *codec = w->codec;
+-      u16 hpctl1 = wm8900_read(codec, WM8900_REG_HPCTL1);
++      u16 hpctl1 = snd_soc_read(codec, WM8900_REG_HPCTL1);
+       switch (event) {
+       case SND_SOC_DAPM_PRE_PMU:
+               /* Clamp headphone outputs */
+               hpctl1 = WM8900_REG_HPCTL1_HP_CLAMP_IP |
+                       WM8900_REG_HPCTL1_HP_CLAMP_OP;
+-              wm8900_write(codec, WM8900_REG_HPCTL1, hpctl1);
++              snd_soc_write(codec, WM8900_REG_HPCTL1, hpctl1);
+               break;
+       case SND_SOC_DAPM_POST_PMU:
+@@ -312,41 +222,41 @@
+               hpctl1 |= WM8900_REG_HPCTL1_HP_SHORT |
+                       WM8900_REG_HPCTL1_HP_SHORT2 |
+                       WM8900_REG_HPCTL1_HP_IPSTAGE_ENA;
+-              wm8900_write(codec, WM8900_REG_HPCTL1, hpctl1);
++              snd_soc_write(codec, WM8900_REG_HPCTL1, hpctl1);
+               msleep(400);
+               /* Enable the output stage */
+               hpctl1 &= ~WM8900_REG_HPCTL1_HP_CLAMP_OP;
+               hpctl1 |= WM8900_REG_HPCTL1_HP_OPSTAGE_ENA;
+-              wm8900_write(codec, WM8900_REG_HPCTL1, hpctl1);
++              snd_soc_write(codec, WM8900_REG_HPCTL1, hpctl1);
+               /* Remove the shorts */
+               hpctl1 &= ~WM8900_REG_HPCTL1_HP_SHORT2;
+-              wm8900_write(codec, WM8900_REG_HPCTL1, hpctl1);
++              snd_soc_write(codec, WM8900_REG_HPCTL1, hpctl1);
+               hpctl1 &= ~WM8900_REG_HPCTL1_HP_SHORT;
+-              wm8900_write(codec, WM8900_REG_HPCTL1, hpctl1);
++              snd_soc_write(codec, WM8900_REG_HPCTL1, hpctl1);
+               break;
+       case SND_SOC_DAPM_PRE_PMD:
+               /* Short the output */
+               hpctl1 |= WM8900_REG_HPCTL1_HP_SHORT;
+-              wm8900_write(codec, WM8900_REG_HPCTL1, hpctl1);
++              snd_soc_write(codec, WM8900_REG_HPCTL1, hpctl1);
+               /* Disable the output stage */
+               hpctl1 &= ~WM8900_REG_HPCTL1_HP_OPSTAGE_ENA;
+-              wm8900_write(codec, WM8900_REG_HPCTL1, hpctl1);
++              snd_soc_write(codec, WM8900_REG_HPCTL1, hpctl1);
+               /* Clamp the outputs and power down input */
+               hpctl1 |= WM8900_REG_HPCTL1_HP_CLAMP_IP |
+                       WM8900_REG_HPCTL1_HP_CLAMP_OP;
+               hpctl1 &= ~WM8900_REG_HPCTL1_HP_IPSTAGE_ENA;
+-              wm8900_write(codec, WM8900_REG_HPCTL1, hpctl1);
++              snd_soc_write(codec, WM8900_REG_HPCTL1, hpctl1);
+               break;
+       case SND_SOC_DAPM_POST_PMD:
+               /* Disable everything */
+-              wm8900_write(codec, WM8900_REG_HPCTL1, 0);
++              snd_soc_write(codec, WM8900_REG_HPCTL1, 0);
+               break;
+       default:
+@@ -439,7 +349,6 @@
+ SOC_ENUM("DAC Mute Rate", dac_mute_rate),
+ SOC_SINGLE("DAC Mono Switch", WM8900_REG_DACCTRL, 9, 1, 0),
+ SOC_ENUM("DAC Deemphasis", dac_deemphasis),
+-SOC_SINGLE("DAC Sloping Stopband Filter Switch", WM8900_REG_DACCTRL, 8, 1, 0),
+ SOC_SINGLE("DAC Sigma-Delta Modulator Clock Switch", WM8900_REG_DACCTRL,
+          12, 1, 0),
+@@ -723,7 +632,7 @@
+       struct snd_soc_codec *codec = socdev->card->codec;
+       u16 reg;
+-      reg = wm8900_read(codec, WM8900_REG_AUDIO1) & ~0x60;
++      reg = snd_soc_read(codec, WM8900_REG_AUDIO1) & ~0x60;
+       switch (params_format(params)) {
+       case SNDRV_PCM_FORMAT_S16_LE:
+@@ -741,7 +650,18 @@
+               return -EINVAL;
+       }
+-      wm8900_write(codec, WM8900_REG_AUDIO1, reg);
++      snd_soc_write(codec, WM8900_REG_AUDIO1, reg);
++
++      if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
++              reg = snd_soc_read(codec, WM8900_REG_DACCTRL);
++
++              if (params_rate(params) <= 24000)
++                      reg |= WM8900_REG_DACCTRL_DAC_SB_FILT;
++              else
++                      reg &= ~WM8900_REG_DACCTRL_DAC_SB_FILT;
++
++              snd_soc_write(codec, WM8900_REG_DACCTRL, reg);
++      }
+       return 0;
+ }
+@@ -778,11 +698,11 @@
+       }
+       if (target > 100000000)
+-              printk(KERN_WARNING "wm8900: FLL rate %d out of range, Fref=%d"
+-                     " Fout=%d\n", target, Fref, Fout);
++              printk(KERN_WARNING "wm8900: FLL rate %u out of range, Fref=%u"
++                     " Fout=%u\n", target, Fref, Fout);
+       if (div > 32) {
+               printk(KERN_ERR "wm8900: Invalid FLL division rate %u, "
+-                     "Fref=%d, Fout=%d, target=%d\n",
++                     "Fref=%u, Fout=%u, target=%u\n",
+                      div, Fref, Fout, target);
+               return -EINVAL;
+       }
+@@ -834,18 +754,18 @@
+               return 0;
+       /* The digital side should be disabled during any change. */
+-      reg = wm8900_read(codec, WM8900_REG_POWER1);
+-      wm8900_write(codec, WM8900_REG_POWER1,
++      reg = snd_soc_read(codec, WM8900_REG_POWER1);
++      snd_soc_write(codec, WM8900_REG_POWER1,
+                    reg & (~WM8900_REG_POWER1_FLL_ENA));
+       /* Disable the FLL? */
+       if (!freq_in || !freq_out) {
+-              reg = wm8900_read(codec, WM8900_REG_CLOCKING1);
+-              wm8900_write(codec, WM8900_REG_CLOCKING1,
++              reg = snd_soc_read(codec, WM8900_REG_CLOCKING1);
++              snd_soc_write(codec, WM8900_REG_CLOCKING1,
+                            reg & (~WM8900_REG_CLOCKING1_MCLK_SRC));
+-              reg = wm8900_read(codec, WM8900_REG_FLLCTL1);
+-              wm8900_write(codec, WM8900_REG_FLLCTL1,
++              reg = snd_soc_read(codec, WM8900_REG_FLLCTL1);
++              snd_soc_write(codec, WM8900_REG_FLLCTL1,
+                            reg & (~WM8900_REG_FLLCTL1_OSC_ENA));
+               wm8900->fll_in = freq_in;
+@@ -862,40 +782,40 @@
+       /* The osclilator *MUST* be enabled before we enable the
+        * digital circuit. */
+-      wm8900_write(codec, WM8900_REG_FLLCTL1,
++      snd_soc_write(codec, WM8900_REG_FLLCTL1,
+                    fll_div.fll_ratio | WM8900_REG_FLLCTL1_OSC_ENA);
+-      wm8900_write(codec, WM8900_REG_FLLCTL4, fll_div.n >> 5);
+-      wm8900_write(codec, WM8900_REG_FLLCTL5,
++      snd_soc_write(codec, WM8900_REG_FLLCTL4, fll_div.n >> 5);
++      snd_soc_write(codec, WM8900_REG_FLLCTL5,
+                    (fll_div.fllclk_div << 6) | (fll_div.n & 0x1f));
+       if (fll_div.k) {
+-              wm8900_write(codec, WM8900_REG_FLLCTL2,
++              snd_soc_write(codec, WM8900_REG_FLLCTL2,
+                            (fll_div.k >> 8) | 0x100);
+-              wm8900_write(codec, WM8900_REG_FLLCTL3, fll_div.k & 0xff);
++              snd_soc_write(codec, WM8900_REG_FLLCTL3, fll_div.k & 0xff);
+       } else
+-              wm8900_write(codec, WM8900_REG_FLLCTL2, 0);
++              snd_soc_write(codec, WM8900_REG_FLLCTL2, 0);
+       if (fll_div.fll_slow_lock_ref)
+-              wm8900_write(codec, WM8900_REG_FLLCTL6,
++              snd_soc_write(codec, WM8900_REG_FLLCTL6,
+                            WM8900_REG_FLLCTL6_FLL_SLOW_LOCK_REF);
+       else
+-              wm8900_write(codec, WM8900_REG_FLLCTL6, 0);
++              snd_soc_write(codec, WM8900_REG_FLLCTL6, 0);
+-      reg = wm8900_read(codec, WM8900_REG_POWER1);
+-      wm8900_write(codec, WM8900_REG_POWER1,
++      reg = snd_soc_read(codec, WM8900_REG_POWER1);
++      snd_soc_write(codec, WM8900_REG_POWER1,
+                    reg | WM8900_REG_POWER1_FLL_ENA);
+ reenable:
+-      reg = wm8900_read(codec, WM8900_REG_CLOCKING1);
+-      wm8900_write(codec, WM8900_REG_CLOCKING1,
++      reg = snd_soc_read(codec, WM8900_REG_CLOCKING1);
++      snd_soc_write(codec, WM8900_REG_CLOCKING1,
+                    reg | WM8900_REG_CLOCKING1_MCLK_SRC);
+       return 0;
+ }
+-static int wm8900_set_dai_pll(struct snd_soc_dai *codec_dai,
+-              int pll_id, unsigned int freq_in, unsigned int freq_out)
++static int wm8900_set_dai_pll(struct snd_soc_dai *codec_dai, int pll_id,
++              int source, unsigned int freq_in, unsigned int freq_out)
+ {
+       return wm8900_set_fll(codec_dai->codec, pll_id, freq_in, freq_out);
+ }
+@@ -908,38 +828,38 @@
+       switch (div_id) {
+       case WM8900_BCLK_DIV:
+-              reg = wm8900_read(codec, WM8900_REG_CLOCKING1);
+-              wm8900_write(codec, WM8900_REG_CLOCKING1,
++              reg = snd_soc_read(codec, WM8900_REG_CLOCKING1);
++              snd_soc_write(codec, WM8900_REG_CLOCKING1,
+                            div | (reg & WM8900_REG_CLOCKING1_BCLK_MASK));
+               break;
+       case WM8900_OPCLK_DIV:
+-              reg = wm8900_read(codec, WM8900_REG_CLOCKING1);
+-              wm8900_write(codec, WM8900_REG_CLOCKING1,
++              reg = snd_soc_read(codec, WM8900_REG_CLOCKING1);
++              snd_soc_write(codec, WM8900_REG_CLOCKING1,
+                            div | (reg & WM8900_REG_CLOCKING1_OPCLK_MASK));
+               break;
+       case WM8900_DAC_LRCLK:
+-              reg = wm8900_read(codec, WM8900_REG_AUDIO4);
+-              wm8900_write(codec, WM8900_REG_AUDIO4,
++              reg = snd_soc_read(codec, WM8900_REG_AUDIO4);
++              snd_soc_write(codec, WM8900_REG_AUDIO4,
+                            div | (reg & WM8900_LRC_MASK));
+               break;
+       case WM8900_ADC_LRCLK:
+-              reg = wm8900_read(codec, WM8900_REG_AUDIO3);
+-              wm8900_write(codec, WM8900_REG_AUDIO3,
++              reg = snd_soc_read(codec, WM8900_REG_AUDIO3);
++              snd_soc_write(codec, WM8900_REG_AUDIO3,
+                            div | (reg & WM8900_LRC_MASK));
+               break;
+       case WM8900_DAC_CLKDIV:
+-              reg = wm8900_read(codec, WM8900_REG_CLOCKING2);
+-              wm8900_write(codec, WM8900_REG_CLOCKING2,
++              reg = snd_soc_read(codec, WM8900_REG_CLOCKING2);
++              snd_soc_write(codec, WM8900_REG_CLOCKING2,
+                            div | (reg & WM8900_REG_CLOCKING2_DAC_CLKDIV));
+               break;
+       case WM8900_ADC_CLKDIV:
+-              reg = wm8900_read(codec, WM8900_REG_CLOCKING2);
+-              wm8900_write(codec, WM8900_REG_CLOCKING2,
++              reg = snd_soc_read(codec, WM8900_REG_CLOCKING2);
++              snd_soc_write(codec, WM8900_REG_CLOCKING2,
+                            div | (reg & WM8900_REG_CLOCKING2_ADC_CLKDIV));
+               break;
+       case WM8900_LRCLK_MODE:
+-              reg = wm8900_read(codec, WM8900_REG_DACCTRL);
+-              wm8900_write(codec, WM8900_REG_DACCTRL,
++              reg = snd_soc_read(codec, WM8900_REG_DACCTRL);
++              snd_soc_write(codec, WM8900_REG_DACCTRL,
+                            div | (reg & WM8900_REG_DACCTRL_AIF_LRCLKRATE));
+               break;
+       default:
+@@ -956,10 +876,10 @@
+       struct snd_soc_codec *codec = codec_dai->codec;
+       unsigned int clocking1, aif1, aif3, aif4;
+-      clocking1 = wm8900_read(codec, WM8900_REG_CLOCKING1);
+-      aif1 = wm8900_read(codec, WM8900_REG_AUDIO1);
+-      aif3 = wm8900_read(codec, WM8900_REG_AUDIO3);
+-      aif4 = wm8900_read(codec, WM8900_REG_AUDIO4);
++      clocking1 = snd_soc_read(codec, WM8900_REG_CLOCKING1);
++      aif1 = snd_soc_read(codec, WM8900_REG_AUDIO1);
++      aif3 = snd_soc_read(codec, WM8900_REG_AUDIO3);
++      aif4 = snd_soc_read(codec, WM8900_REG_AUDIO4);
+       /* set master/slave audio interface */
+       switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
+@@ -1055,10 +975,10 @@
+               return -EINVAL;
+       }
+-      wm8900_write(codec, WM8900_REG_CLOCKING1, clocking1);
+-      wm8900_write(codec, WM8900_REG_AUDIO1, aif1);
+-      wm8900_write(codec, WM8900_REG_AUDIO3, aif3);
+-      wm8900_write(codec, WM8900_REG_AUDIO4, aif4);
++      snd_soc_write(codec, WM8900_REG_CLOCKING1, clocking1);
++      snd_soc_write(codec, WM8900_REG_AUDIO1, aif1);
++      snd_soc_write(codec, WM8900_REG_AUDIO3, aif3);
++      snd_soc_write(codec, WM8900_REG_AUDIO4, aif4);
+       return 0;
+ }
+@@ -1068,14 +988,14 @@
+       struct snd_soc_codec *codec = codec_dai->codec;
+       u16 reg;
+-      reg = wm8900_read(codec, WM8900_REG_DACCTRL);
++      reg = snd_soc_read(codec, WM8900_REG_DACCTRL);
+       if (mute)
+               reg |= WM8900_REG_DACCTRL_MUTE;
+       else
+               reg &= ~WM8900_REG_DACCTRL_MUTE;
+-      wm8900_write(codec, WM8900_REG_DACCTRL, reg);
++      snd_soc_write(codec, WM8900_REG_DACCTRL, reg);
+       return 0;
+ }
+@@ -1124,11 +1044,11 @@
+       switch (level) {
+       case SND_SOC_BIAS_ON:
+               /* Enable thermal shutdown */
+-              reg = wm8900_read(codec, WM8900_REG_GPIO);
+-              wm8900_write(codec, WM8900_REG_GPIO,
++              reg = snd_soc_read(codec, WM8900_REG_GPIO);
++              snd_soc_write(codec, WM8900_REG_GPIO,
+                            reg | WM8900_REG_GPIO_TEMP_ENA);
+-              reg = wm8900_read(codec, WM8900_REG_ADDCTL);
+-              wm8900_write(codec, WM8900_REG_ADDCTL,
++              reg = snd_soc_read(codec, WM8900_REG_ADDCTL);
++              snd_soc_write(codec, WM8900_REG_ADDCTL,
+                            reg | WM8900_REG_ADDCTL_TEMP_SD);
+               break;
+@@ -1139,69 +1059,69 @@
+               /* Charge capacitors if initial power up */
+               if (codec->bias_level == SND_SOC_BIAS_OFF) {
+                       /* STARTUP_BIAS_ENA on */
+-                      wm8900_write(codec, WM8900_REG_POWER1,
++                      snd_soc_write(codec, WM8900_REG_POWER1,
+                                    WM8900_REG_POWER1_STARTUP_BIAS_ENA);
+                       /* Startup bias mode */
+-                      wm8900_write(codec, WM8900_REG_ADDCTL,
++                      snd_soc_write(codec, WM8900_REG_ADDCTL,
+                                    WM8900_REG_ADDCTL_BIAS_SRC |
+                                    WM8900_REG_ADDCTL_VMID_SOFTST);
+                       /* VMID 2x50k */
+-                      wm8900_write(codec, WM8900_REG_POWER1,
++                      snd_soc_write(codec, WM8900_REG_POWER1,
+                                    WM8900_REG_POWER1_STARTUP_BIAS_ENA | 0x1);
+                       /* Allow capacitors to charge */
+                       schedule_timeout_interruptible(msecs_to_jiffies(400));
+                       /* Enable bias */
+-                      wm8900_write(codec, WM8900_REG_POWER1,
++                      snd_soc_write(codec, WM8900_REG_POWER1,
+                                    WM8900_REG_POWER1_STARTUP_BIAS_ENA |
+                                    WM8900_REG_POWER1_BIAS_ENA | 0x1);
+-                      wm8900_write(codec, WM8900_REG_ADDCTL, 0);
++                      snd_soc_write(codec, WM8900_REG_ADDCTL, 0);
+-                      wm8900_write(codec, WM8900_REG_POWER1,
++                      snd_soc_write(codec, WM8900_REG_POWER1,
+                                    WM8900_REG_POWER1_BIAS_ENA | 0x1);
+               }
+-              reg = wm8900_read(codec, WM8900_REG_POWER1);
+-              wm8900_write(codec, WM8900_REG_POWER1,
++              reg = snd_soc_read(codec, WM8900_REG_POWER1);
++              snd_soc_write(codec, WM8900_REG_POWER1,
+                            (reg & WM8900_REG_POWER1_FLL_ENA) |
+                            WM8900_REG_POWER1_BIAS_ENA | 0x1);
+-              wm8900_write(codec, WM8900_REG_POWER2,
++              snd_soc_write(codec, WM8900_REG_POWER2,
+                            WM8900_REG_POWER2_SYSCLK_ENA);
+-              wm8900_write(codec, WM8900_REG_POWER3, 0);
++              snd_soc_write(codec, WM8900_REG_POWER3, 0);
+               break;
+       case SND_SOC_BIAS_OFF:
+               /* Startup bias enable */
+-              reg = wm8900_read(codec, WM8900_REG_POWER1);
+-              wm8900_write(codec, WM8900_REG_POWER1,
++              reg = snd_soc_read(codec, WM8900_REG_POWER1);
++              snd_soc_write(codec, WM8900_REG_POWER1,
+                            reg & WM8900_REG_POWER1_STARTUP_BIAS_ENA);
+-              wm8900_write(codec, WM8900_REG_ADDCTL,
++              snd_soc_write(codec, WM8900_REG_ADDCTL,
+                            WM8900_REG_ADDCTL_BIAS_SRC |
+                            WM8900_REG_ADDCTL_VMID_SOFTST);
+               /* Discharge caps */
+-              wm8900_write(codec, WM8900_REG_POWER1,
++              snd_soc_write(codec, WM8900_REG_POWER1,
+                            WM8900_REG_POWER1_STARTUP_BIAS_ENA);
+               schedule_timeout_interruptible(msecs_to_jiffies(500));
+               /* Remove clamp */
+-              wm8900_write(codec, WM8900_REG_HPCTL1, 0);
++              snd_soc_write(codec, WM8900_REG_HPCTL1, 0);
+               /* Power down */
+-              wm8900_write(codec, WM8900_REG_ADDCTL, 0);
+-              wm8900_write(codec, WM8900_REG_POWER1, 0);
+-              wm8900_write(codec, WM8900_REG_POWER2, 0);
+-              wm8900_write(codec, WM8900_REG_POWER3, 0);
++              snd_soc_write(codec, WM8900_REG_ADDCTL, 0);
++              snd_soc_write(codec, WM8900_REG_POWER1, 0);
++              snd_soc_write(codec, WM8900_REG_POWER2, 0);
++              snd_soc_write(codec, WM8900_REG_POWER3, 0);
+               /* Need to let things settle before stopping the clock
+                * to ensure that restart works, see "Stopping the
+                * master clock" in the datasheet. */
+               schedule_timeout_interruptible(msecs_to_jiffies(1));
+-              wm8900_write(codec, WM8900_REG_POWER2,
++              snd_soc_write(codec, WM8900_REG_POWER2,
+                            WM8900_REG_POWER2_SYSCLK_ENA);
+               break;
+       }
+@@ -1264,7 +1184,7 @@
+       if (cache) {
+               for (i = 0; i < WM8900_MAXREG; i++)
+-                      wm8900_write(codec, i, cache[i]);
++                      snd_soc_write(codec, i, cache[i]);
+               kfree(cache);
+       } else
+               dev_err(&pdev->dev, "Unable to allocate register cache\n");
+@@ -1297,16 +1217,20 @@
+       codec->name = "WM8900";
+       codec->owner = THIS_MODULE;
+-      codec->read = wm8900_read;
+-      codec->write = wm8900_write;
+       codec->dai = &wm8900_dai;
+       codec->num_dai = 1;
+-      codec->hw_write = (hw_write_t)i2c_master_send;
+       codec->control_data = i2c;
+       codec->set_bias_level = wm8900_set_bias_level;
++      codec->volatile_register = wm8900_volatile_register;
+       codec->dev = &i2c->dev;
+-      reg = wm8900_read(codec, WM8900_REG_ID);
++      ret = snd_soc_codec_set_cache_io(codec, 8, 16, SND_SOC_I2C);
++      if (ret != 0) {
++              dev_err(&i2c->dev, "Failed to set cache I/O: %d\n", ret);
++              goto err;
++      }
++
++      reg = snd_soc_read(codec, WM8900_REG_ID);
+       if (reg != 0x8900) {
+               dev_err(&i2c->dev, "Device is not a WM8900 - ID %x\n", reg);
+               ret = -ENODEV;
+@@ -1314,7 +1238,7 @@
+       }
+       /* Read back from the chip */
+-      reg = wm8900_chip_read(codec, WM8900_REG_POWER1);
++      reg = snd_soc_read(codec, WM8900_REG_POWER1);
+       reg = (reg >> 12) & 0xf;
+       dev_info(&i2c->dev, "WM8900 revision %d\n", reg);
+@@ -1324,29 +1248,29 @@
+       wm8900_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
+       /* Latch the volume update bits */
+-      wm8900_write(codec, WM8900_REG_LINVOL,
+-                   wm8900_read(codec, WM8900_REG_LINVOL) | 0x100);
+-      wm8900_write(codec, WM8900_REG_RINVOL,
+-                   wm8900_read(codec, WM8900_REG_RINVOL) | 0x100);
+-      wm8900_write(codec, WM8900_REG_LOUT1CTL,
+-                   wm8900_read(codec, WM8900_REG_LOUT1CTL) | 0x100);
+-      wm8900_write(codec, WM8900_REG_ROUT1CTL,
+-                   wm8900_read(codec, WM8900_REG_ROUT1CTL) | 0x100);
+-      wm8900_write(codec, WM8900_REG_LOUT2CTL,
+-                   wm8900_read(codec, WM8900_REG_LOUT2CTL) | 0x100);
+-      wm8900_write(codec, WM8900_REG_ROUT2CTL,
+-                   wm8900_read(codec, WM8900_REG_ROUT2CTL) | 0x100);
+-      wm8900_write(codec, WM8900_REG_LDAC_DV,
+-                   wm8900_read(codec, WM8900_REG_LDAC_DV) | 0x100);
+-      wm8900_write(codec, WM8900_REG_RDAC_DV,
+-                   wm8900_read(codec, WM8900_REG_RDAC_DV) | 0x100);
+-      wm8900_write(codec, WM8900_REG_LADC_DV,
+-                   wm8900_read(codec, WM8900_REG_LADC_DV) | 0x100);
+-      wm8900_write(codec, WM8900_REG_RADC_DV,
+-                   wm8900_read(codec, WM8900_REG_RADC_DV) | 0x100);
++      snd_soc_write(codec, WM8900_REG_LINVOL,
++                    snd_soc_read(codec, WM8900_REG_LINVOL) | 0x100);
++      snd_soc_write(codec, WM8900_REG_RINVOL,
++                    snd_soc_read(codec, WM8900_REG_RINVOL) | 0x100);
++      snd_soc_write(codec, WM8900_REG_LOUT1CTL,
++                    snd_soc_read(codec, WM8900_REG_LOUT1CTL) | 0x100);
++      snd_soc_write(codec, WM8900_REG_ROUT1CTL,
++                    snd_soc_read(codec, WM8900_REG_ROUT1CTL) | 0x100);
++      snd_soc_write(codec, WM8900_REG_LOUT2CTL,
++                    snd_soc_read(codec, WM8900_REG_LOUT2CTL) | 0x100);
++      snd_soc_write(codec, WM8900_REG_ROUT2CTL,
++                    snd_soc_read(codec, WM8900_REG_ROUT2CTL) | 0x100);
++      snd_soc_write(codec, WM8900_REG_LDAC_DV,
++                    snd_soc_read(codec, WM8900_REG_LDAC_DV) | 0x100);
++      snd_soc_write(codec, WM8900_REG_RDAC_DV,
++                    snd_soc_read(codec, WM8900_REG_RDAC_DV) | 0x100);
++      snd_soc_write(codec, WM8900_REG_LADC_DV,
++                    snd_soc_read(codec, WM8900_REG_LADC_DV) | 0x100);
++      snd_soc_write(codec, WM8900_REG_RADC_DV,
++                    snd_soc_read(codec, WM8900_REG_RADC_DV) | 0x100);
+       /* Set the DAC and mixer output bias */
+-      wm8900_write(codec, WM8900_REG_OUTBIASCTL, 0x81);
++      snd_soc_write(codec, WM8900_REG_OUTBIASCTL, 0x81);
+       wm8900_dai.dev = &i2c->dev;
+@@ -1388,6 +1312,21 @@
+       return 0;
+ }
++#ifdef CONFIG_PM
++static int wm8900_i2c_suspend(struct i2c_client *client, pm_message_t msg)
++{
++      return snd_soc_suspend_device(&client->dev);
++}
++
++static int wm8900_i2c_resume(struct i2c_client *client)
++{
++      return snd_soc_resume_device(&client->dev);
++}
++#else
++#define wm8900_i2c_suspend NULL
++#define wm8900_i2c_resume NULL
++#endif
++
+ static const struct i2c_device_id wm8900_i2c_id[] = {
+       { "wm8900", 0 },
+       { }
+@@ -1401,6 +1340,8 @@
+       },
+       .probe = wm8900_i2c_probe,
+       .remove = __devexit_p(wm8900_i2c_remove),
++      .suspend = wm8900_i2c_suspend,
++      .resume = wm8900_i2c_resume,
+       .id_table = wm8900_i2c_id,
+ };
+Index: linux-2.6.30/sound/soc/codecs/wm8903.c
+===================================================================
+--- linux-2.6.30.orig/sound/soc/codecs/wm8903.c        2011-02-01 16:39:20.000000000 +0100
++++ linux-2.6.30/sound/soc/codecs/wm8903.c     2011-02-01 16:40:30.189047317 +0100
+@@ -217,7 +217,6 @@
+       int sysclk;
+       /* Reference counts */
+-      int charge_pump_users;
+       int class_w_users;
+       int playback_active;
+       int capture_active;
+@@ -226,94 +225,18 @@
+       struct snd_pcm_substream *slave_substream;
+ };
+-
+-static unsigned int wm8903_read_reg_cache(struct snd_soc_codec *codec,
+-                                               unsigned int reg)
+-{
+-      u16 *cache = codec->reg_cache;
+-
+-      BUG_ON(reg >= ARRAY_SIZE(wm8903_reg_defaults));
+-
+-      return cache[reg];
+-}
+-
+-static unsigned int wm8903_hw_read(struct snd_soc_codec *codec, u8 reg)
+-{
+-      struct i2c_msg xfer[2];
+-      u16 data;
+-      int ret;
+-      struct i2c_client *client = codec->control_data;
+-
+-      /* Write register */
+-      xfer[0].addr = client->addr;
+-      xfer[0].flags = 0;
+-      xfer[0].len = 1;
+-      xfer[0].buf = &reg;
+-
+-      /* Read data */
+-      xfer[1].addr = client->addr;
+-      xfer[1].flags = I2C_M_RD;
+-      xfer[1].len = 2;
+-      xfer[1].buf = (u8 *)&data;
+-
+-      ret = i2c_transfer(client->adapter, xfer, 2);
+-      if (ret != 2) {
+-              pr_err("i2c_transfer returned %d\n", ret);
+-              return 0;
+-      }
+-
+-      return (data >> 8) | ((data & 0xff) << 8);
+-}
+-
+-static unsigned int wm8903_read(struct snd_soc_codec *codec,
+-                              unsigned int reg)
++static int wm8903_volatile_register(unsigned int reg)
+ {
+       switch (reg) {
+       case WM8903_SW_RESET_AND_ID:
+       case WM8903_REVISION_NUMBER:
+       case WM8903_INTERRUPT_STATUS_1:
+       case WM8903_WRITE_SEQUENCER_4:
+-              return wm8903_hw_read(codec, reg);
+-
+-      default:
+-              return wm8903_read_reg_cache(codec, reg);
+-      }
+-}
+-
+-static void wm8903_write_reg_cache(struct snd_soc_codec *codec,
+-                                 u16 reg, unsigned int value)
+-{
+-      u16 *cache = codec->reg_cache;
+-
+-      BUG_ON(reg >= ARRAY_SIZE(wm8903_reg_defaults));
+-
+-      switch (reg) {
+-      case WM8903_SW_RESET_AND_ID:
+-      case WM8903_REVISION_NUMBER:
+-              break;
++              return 1;
+       default:
+-              cache[reg] = value;
+-              break;
+-      }
+-}
+-
+-static int wm8903_write(struct snd_soc_codec *codec, unsigned int reg,
+-                      unsigned int value)
+-{
+-      u8 data[3];
+-
+-      wm8903_write_reg_cache(codec, reg, value);
+-
+-      /* Data format is 1 byte of address followed by 2 bytes of data */
+-      data[0] = reg;
+-      data[1] = (value >> 8) & 0xff;
+-      data[2] = value & 0xff;
+-
+-      if (codec->hw_write(codec->control_data, data, 3) == 2)
+               return 0;
+-      else
+-              return -EIO;
++      }
+ }
+ static int wm8903_run_sequence(struct snd_soc_codec *codec, unsigned int start)
+@@ -324,13 +247,13 @@
+       BUG_ON(start > 48);
+       /* Enable the sequencer */
+-      reg[0] = wm8903_read(codec, WM8903_WRITE_SEQUENCER_0);
++      reg[0] = snd_soc_read(codec, WM8903_WRITE_SEQUENCER_0);
+       reg[0] |= WM8903_WSEQ_ENA;
+-      wm8903_write(codec, WM8903_WRITE_SEQUENCER_0, reg[0]);
++      snd_soc_write(codec, WM8903_WRITE_SEQUENCER_0, reg[0]);
+       dev_dbg(&i2c->dev, "Starting sequence at %d\n", start);
+-      wm8903_write(codec, WM8903_WRITE_SEQUENCER_3,
++      snd_soc_write(codec, WM8903_WRITE_SEQUENCER_3,
+                    start | WM8903_WSEQ_START);
+       /* Wait for it to complete.  If we have the interrupt wired up then
+@@ -340,13 +263,13 @@
+       do {
+               msleep(10);
+-              reg[4] = wm8903_read(codec, WM8903_WRITE_SEQUENCER_4);
++              reg[4] = snd_soc_read(codec, WM8903_WRITE_SEQUENCER_4);
+       } while (reg[4] & WM8903_WSEQ_BUSY);
+       dev_dbg(&i2c->dev, "Sequence complete\n");
+       /* Disable the sequencer again */
+-      wm8903_write(codec, WM8903_WRITE_SEQUENCER_0,
++      snd_soc_write(codec, WM8903_WRITE_SEQUENCER_0,
+                    reg[0] & ~WM8903_WSEQ_ENA);
+       return 0;
+@@ -358,12 +281,12 @@
+       /* There really ought to be something better we can do here :/ */
+       for (i = 0; i < ARRAY_SIZE(wm8903_reg_defaults); i++)
+-              cache[i] = wm8903_hw_read(codec, i);
++              cache[i] = codec->hw_read(codec, i);
+ }
+ static void wm8903_reset(struct snd_soc_codec *codec)
+ {
+-      wm8903_write(codec, WM8903_SW_RESET_AND_ID, 0);
++      snd_soc_write(codec, WM8903_SW_RESET_AND_ID, 0);
+       memcpy(codec->reg_cache, wm8903_reg_defaults,
+              sizeof(wm8903_reg_defaults));
+ }
+@@ -373,6 +296,15 @@
+ #define WM8903_OUTPUT_INT   0x2
+ #define WM8903_OUTPUT_IN    0x1
++static int wm8903_cp_event(struct snd_soc_dapm_widget *w,
++                         struct snd_kcontrol *kcontrol, int event)
++{
++      WARN_ON(event != SND_SOC_DAPM_POST_PMU);
++      mdelay(4);
++
++      return 0;
++}
++
+ /*
+  * Event for headphone and line out amplifier power changes.  Special
+  * power up/down sequences are required in order to maximise pop/click
+@@ -382,19 +314,20 @@
+                              struct snd_kcontrol *kcontrol, int event)
+ {
+       struct snd_soc_codec *codec = w->codec;
+-      struct wm8903_priv *wm8903 = codec->private_data;
+-      struct i2c_client *i2c = codec->control_data;
+       u16 val;
+       u16 reg;
++      u16 dcs_reg;
++      u16 dcs_bit;
+       int shift;
+-      u16 cp_reg = wm8903_read(codec, WM8903_CHARGE_PUMP_0);
+       switch (w->reg) {
+       case WM8903_POWER_MANAGEMENT_2:
+               reg = WM8903_ANALOGUE_HP_0;
++              dcs_bit = 0 + w->shift;
+               break;
+       case WM8903_POWER_MANAGEMENT_3:
+               reg = WM8903_ANALOGUE_LINEOUT_0;
++              dcs_bit = 2 + w->shift;
+               break;
+       default:
+               BUG();
+@@ -414,67 +347,52 @@
+       }
+       if (event & SND_SOC_DAPM_PRE_PMU) {
+-              val = wm8903_read(codec, reg);
++              val = snd_soc_read(codec, reg);
+               /* Short the output */
+               val &= ~(WM8903_OUTPUT_SHORT << shift);
+-              wm8903_write(codec, reg, val);
+-
+-              wm8903->charge_pump_users++;
+-
+-              dev_dbg(&i2c->dev, "Charge pump use count now %d\n",
+-                      wm8903->charge_pump_users);
+-
+-              if (wm8903->charge_pump_users == 1) {
+-                      dev_dbg(&i2c->dev, "Enabling charge pump\n");
+-                      wm8903_write(codec, WM8903_CHARGE_PUMP_0,
+-                                   cp_reg | WM8903_CP_ENA);
+-                      mdelay(4);
+-              }
++              snd_soc_write(codec, reg, val);
+       }
+       if (event & SND_SOC_DAPM_POST_PMU) {
+-              val = wm8903_read(codec, reg);
++              val = snd_soc_read(codec, reg);
+               val |= (WM8903_OUTPUT_IN << shift);
+-              wm8903_write(codec, reg, val);
++              snd_soc_write(codec, reg, val);
+               val |= (WM8903_OUTPUT_INT << shift);
+-              wm8903_write(codec, reg, val);
++              snd_soc_write(codec, reg, val);
+               /* Turn on the output ENA_OUTP */
+               val |= (WM8903_OUTPUT_OUT << shift);
+-              wm8903_write(codec, reg, val);
++              snd_soc_write(codec, reg, val);
++
++              /* Enable the DC servo */
++              dcs_reg = snd_soc_read(codec, WM8903_DC_SERVO_0);
++              dcs_reg |= dcs_bit;
++              snd_soc_write(codec, WM8903_DC_SERVO_0, dcs_reg);
+               /* Remove the short */
+               val |= (WM8903_OUTPUT_SHORT << shift);
+-              wm8903_write(codec, reg, val);
++              snd_soc_write(codec, reg, val);
+       }
+       if (event & SND_SOC_DAPM_PRE_PMD) {
+-              val = wm8903_read(codec, reg);
++              val = snd_soc_read(codec, reg);
+               /* Short the output */
+               val &= ~(WM8903_OUTPUT_SHORT << shift);
+-              wm8903_write(codec, reg, val);
++              snd_soc_write(codec, reg, val);
++
++              /* Disable the DC servo */
++              dcs_reg = snd_soc_read(codec, WM8903_DC_SERVO_0);
++              dcs_reg &= ~dcs_bit;
++              snd_soc_write(codec, WM8903_DC_SERVO_0, dcs_reg);
+               /* Then disable the intermediate and output stages */
+               val &= ~((WM8903_OUTPUT_OUT | WM8903_OUTPUT_INT |
+                         WM8903_OUTPUT_IN) << shift);
+-              wm8903_write(codec, reg, val);
+-      }
+-
+-      if (event & SND_SOC_DAPM_POST_PMD) {
+-              wm8903->charge_pump_users--;
+-
+-              dev_dbg(&i2c->dev, "Charge pump use count now %d\n",
+-                      wm8903->charge_pump_users);
+-
+-              if (wm8903->charge_pump_users == 0) {
+-                      dev_dbg(&i2c->dev, "Disabling charge pump\n");
+-                      wm8903_write(codec, WM8903_CHARGE_PUMP_0,
+-                                   cp_reg & ~WM8903_CP_ENA);
+-              }
++              snd_soc_write(codec, reg, val);
+       }
+       return 0;
+@@ -498,13 +416,13 @@
+       u16 reg;
+       int ret;
+-      reg = wm8903_read(codec, WM8903_CLASS_W_0);
++      reg = snd_soc_read(codec, WM8903_CLASS_W_0);
+       /* Turn it off if we're about to enable bypass */
+       if (ucontrol->value.integer.value[0]) {
+               if (wm8903->class_w_users == 0) {
+                       dev_dbg(&i2c->dev, "Disabling Class W\n");
+-                      wm8903_write(codec, WM8903_CLASS_W_0, reg &
++                      snd_soc_write(codec, WM8903_CLASS_W_0, reg &
+                                    ~(WM8903_CP_DYN_FREQ | WM8903_CP_DYN_V));
+               }
+               wm8903->class_w_users++;
+@@ -517,7 +435,7 @@
+       if (!ucontrol->value.integer.value[0]) {
+               if (wm8903->class_w_users == 1) {
+                       dev_dbg(&i2c->dev, "Enabling Class W\n");
+-                      wm8903_write(codec, WM8903_CLASS_W_0, reg |
++                      snd_soc_write(codec, WM8903_CLASS_W_0, reg |
+                                    WM8903_CP_DYN_FREQ | WM8903_CP_DYN_V);
+               }
+               wm8903->class_w_users--;
+@@ -539,6 +457,7 @@
+ /* ALSA can only do steps of .01dB */
+ static const DECLARE_TLV_DB_SCALE(digital_tlv, -7200, 75, 1);
++static const DECLARE_TLV_DB_SCALE(digital_sidetone_tlv, -3600, 300, 0);
+ static const DECLARE_TLV_DB_SCALE(out_tlv, -5700, 100, 0);
+ static const DECLARE_TLV_DB_SCALE(drc_tlv_thresh, 0, 75, 0);
+@@ -657,6 +576,16 @@
+       SOC_ENUM_SINGLE(WM8903_ANALOGUE_RIGHT_INPUT_1, 4, 3, rinput_mux_text);
++static const char *sidetone_text[] = {
++      "None", "Left", "Right"
++};
++
++static const struct soc_enum lsidetone_enum =
++      SOC_ENUM_SINGLE(WM8903_DAC_DIGITAL_0, 2, 3, sidetone_text);
++
++static const struct soc_enum rsidetone_enum =
++      SOC_ENUM_SINGLE(WM8903_DAC_DIGITAL_0, 0, 3, sidetone_text);
++
+ static const struct snd_kcontrol_new wm8903_snd_controls[] = {
+ /* Input PGAs - No TLV since the scale depends on PGA mode */
+@@ -700,6 +629,9 @@
+ SOC_ENUM("ADC Companding Mode", adc_companding),
+ SOC_SINGLE("ADC Companding Switch", WM8903_AUDIO_INTERFACE_0, 3, 1, 0),
++SOC_DOUBLE_TLV("Digital Sidetone Volume", WM8903_DAC_DIGITAL_0, 4, 8,
++             12, 0, digital_sidetone_tlv),
++
+ /* DAC */
+ SOC_DOUBLE_R_TLV("Digital Playback Volume", WM8903_DAC_DIGITAL_VOLUME_LEFT,
+                WM8903_DAC_DIGITAL_VOLUME_RIGHT, 1, 120, 0, digital_tlv),
+@@ -707,8 +639,6 @@
+ SOC_ENUM("DAC Mute Mode", mute_mode),
+ SOC_SINGLE("DAC Mono Switch", WM8903_DAC_DIGITAL_1, 12, 1, 0),
+ SOC_ENUM("DAC De-emphasis", dac_deemphasis),
+-SOC_SINGLE("DAC Sloping Stopband Filter Switch",
+-         WM8903_DAC_DIGITAL_1, 11, 1, 0),
+ SOC_ENUM("DAC Companding Mode", dac_companding),
+ SOC_SINGLE("DAC Companding Switch", WM8903_AUDIO_INTERFACE_0, 1, 1, 0),
+@@ -762,6 +692,12 @@
+ static const struct snd_kcontrol_new rinput_inv_mux =
+       SOC_DAPM_ENUM("Right Inverting Input Mux", rinput_inv_enum);
++static const struct snd_kcontrol_new lsidetone_mux =
++      SOC_DAPM_ENUM("DACL Sidetone Mux", lsidetone_enum);
++
++static const struct snd_kcontrol_new rsidetone_mux =
++      SOC_DAPM_ENUM("DACR Sidetone Mux", rsidetone_enum);
++
+ static const struct snd_kcontrol_new left_output_mixer[] = {
+ SOC_DAPM_SINGLE("DACL Switch", WM8903_ANALOGUE_LEFT_MIX_0, 3, 1, 0),
+ SOC_DAPM_SINGLE("DACR Switch", WM8903_ANALOGUE_LEFT_MIX_0, 2, 1, 0),
+@@ -828,6 +764,9 @@
+ SND_SOC_DAPM_ADC("ADCL", "Left HiFi Capture", WM8903_POWER_MANAGEMENT_6, 1, 0),
+ SND_SOC_DAPM_ADC("ADCR", "Right HiFi Capture", WM8903_POWER_MANAGEMENT_6, 0, 0),
++SND_SOC_DAPM_MUX("DACL Sidetone", SND_SOC_NOPM, 0, 0, &lsidetone_mux),
++SND_SOC_DAPM_MUX("DACR Sidetone", SND_SOC_NOPM, 0, 0, &rsidetone_mux),
++
+ SND_SOC_DAPM_DAC("DACL", "Left Playback", WM8903_POWER_MANAGEMENT_6, 3, 0),
+ SND_SOC_DAPM_DAC("DACR", "Right Playback", WM8903_POWER_MANAGEMENT_6, 2, 0),
+@@ -844,26 +783,29 @@
+ SND_SOC_DAPM_PGA_E("Left Headphone Output PGA", WM8903_POWER_MANAGEMENT_2,
+                  1, 0, NULL, 0, wm8903_output_event,
+                  SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU |
+-                 SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD),
++                 SND_SOC_DAPM_PRE_PMD),
+ SND_SOC_DAPM_PGA_E("Right Headphone Output PGA", WM8903_POWER_MANAGEMENT_2,
+                  0, 0, NULL, 0, wm8903_output_event,
+                  SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU |
+-                 SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD),
++                 SND_SOC_DAPM_PRE_PMD),
+ SND_SOC_DAPM_PGA_E("Left Line Output PGA", WM8903_POWER_MANAGEMENT_3, 1, 0,
+                  NULL, 0, wm8903_output_event,
+                  SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU |
+-                 SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD),
++                 SND_SOC_DAPM_PRE_PMD),
+ SND_SOC_DAPM_PGA_E("Right Line Output PGA", WM8903_POWER_MANAGEMENT_3, 0, 0,
+                  NULL, 0, wm8903_output_event,
+                  SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU |
+-                 SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD),
++                 SND_SOC_DAPM_PRE_PMD),
+ SND_SOC_DAPM_PGA("Left Speaker PGA", WM8903_POWER_MANAGEMENT_5, 1, 0,
+                NULL, 0),
+ SND_SOC_DAPM_PGA("Right Speaker PGA", WM8903_POWER_MANAGEMENT_5, 0, 0,
+                NULL, 0),
++SND_SOC_DAPM_SUPPLY("Charge Pump", WM8903_CHARGE_PUMP_0, 0, 0,
++                  wm8903_cp_event, SND_SOC_DAPM_POST_PMU),
++SND_SOC_DAPM_SUPPLY("CLK_DSP", WM8903_CLOCK_RATES_2, 1, 0, NULL, 0),
+ };
+ static const struct snd_soc_dapm_route intercon[] = {
+@@ -909,7 +851,19 @@
+       { "Right Input PGA", NULL, "Right Input Mode Mux" },
+       { "ADCL", NULL, "Left Input PGA" },
++      { "ADCL", NULL, "CLK_DSP" },
+       { "ADCR", NULL, "Right Input PGA" },
++      { "ADCR", NULL, "CLK_DSP" },
++
++      { "DACL Sidetone", "Left", "ADCL" },
++      { "DACL Sidetone", "Right", "ADCR" },
++      { "DACR Sidetone", "Left", "ADCL" },
++      { "DACR Sidetone", "Right", "ADCR" },
++
++      { "DACL", NULL, "DACL Sidetone" },
++      { "DACL", NULL, "CLK_DSP" },
++      { "DACR", NULL, "DACR Sidetone" },
++      { "DACR", NULL, "CLK_DSP" },
+       { "Left Output Mixer", "Left Bypass Switch", "Left Input PGA" },
+       { "Left Output Mixer", "Right Bypass Switch", "Right Input PGA" },
+@@ -951,6 +905,11 @@
+       { "ROP", NULL, "Right Speaker PGA" },
+       { "RON", NULL, "Right Speaker PGA" },
++
++      { "Left Headphone Output PGA", NULL, "Charge Pump" },
++      { "Right Headphone Output PGA", NULL, "Charge Pump" },
++      { "Left Line Output PGA", NULL, "Charge Pump" },
++      { "Right Line Output PGA", NULL, "Charge Pump" },
+ };
+ static int wm8903_add_widgets(struct snd_soc_codec *codec)
+@@ -974,50 +933,55 @@
+       switch (level) {
+       case SND_SOC_BIAS_ON:
+       case SND_SOC_BIAS_PREPARE:
+-              reg = wm8903_read(codec, WM8903_VMID_CONTROL_0);
++              reg = snd_soc_read(codec, WM8903_VMID_CONTROL_0);
+               reg &= ~(WM8903_VMID_RES_MASK);
+               reg |= WM8903_VMID_RES_50K;
+-              wm8903_write(codec, WM8903_VMID_CONTROL_0, reg);
++              snd_soc_write(codec, WM8903_VMID_CONTROL_0, reg);
+               break;
+       case SND_SOC_BIAS_STANDBY:
+               if (codec->bias_level == SND_SOC_BIAS_OFF) {
+-                      wm8903_write(codec, WM8903_CLOCK_RATES_2,
++                      snd_soc_write(codec, WM8903_CLOCK_RATES_2,
+                                    WM8903_CLK_SYS_ENA);
++                      /* Change DC servo dither level in startup sequence */
++                      snd_soc_write(codec, WM8903_WRITE_SEQUENCER_0, 0x11);
++                      snd_soc_write(codec, WM8903_WRITE_SEQUENCER_1, 0x1257);
++                      snd_soc_write(codec, WM8903_WRITE_SEQUENCER_2, 0x2);
++
+                       wm8903_run_sequence(codec, 0);
+                       wm8903_sync_reg_cache(codec, codec->reg_cache);
+                       /* Enable low impedence charge pump output */
+-                      reg = wm8903_read(codec,
++                      reg = snd_soc_read(codec,
+                                         WM8903_CONTROL_INTERFACE_TEST_1);
+-                      wm8903_write(codec, WM8903_CONTROL_INTERFACE_TEST_1,
++                      snd_soc_write(codec, WM8903_CONTROL_INTERFACE_TEST_1,
+                                    reg | WM8903_TEST_KEY);
+-                      reg2 = wm8903_read(codec, WM8903_CHARGE_PUMP_TEST_1);
+-                      wm8903_write(codec, WM8903_CHARGE_PUMP_TEST_1,
++                      reg2 = snd_soc_read(codec, WM8903_CHARGE_PUMP_TEST_1);
++                      snd_soc_write(codec, WM8903_CHARGE_PUMP_TEST_1,
+                                    reg2 | WM8903_CP_SW_KELVIN_MODE_MASK);
+-                      wm8903_write(codec, WM8903_CONTROL_INTERFACE_TEST_1,
++                      snd_soc_write(codec, WM8903_CONTROL_INTERFACE_TEST_1,
+                                    reg);
+                       /* By default no bypass paths are enabled so
+                        * enable Class W support.
+                        */
+                       dev_dbg(&i2c->dev, "Enabling Class W\n");
+-                      wm8903_write(codec, WM8903_CLASS_W_0, reg |
++                      snd_soc_write(codec, WM8903_CLASS_W_0, reg |
+                                    WM8903_CP_DYN_FREQ | WM8903_CP_DYN_V);
+               }
+-              reg = wm8903_read(codec, WM8903_VMID_CONTROL_0);
++              reg = snd_soc_read(codec, WM8903_VMID_CONTROL_0);
+               reg &= ~(WM8903_VMID_RES_MASK);
+               reg |= WM8903_VMID_RES_250K;
+-              wm8903_write(codec, WM8903_VMID_CONTROL_0, reg);
++              snd_soc_write(codec, WM8903_VMID_CONTROL_0, reg);
+               break;
+       case SND_SOC_BIAS_OFF:
+               wm8903_run_sequence(codec, 32);
+-              reg = wm8903_read(codec, WM8903_CLOCK_RATES_2);
++              reg = snd_soc_read(codec, WM8903_CLOCK_RATES_2);
+               reg &= ~WM8903_CLK_SYS_ENA;
+-              wm8903_write(codec, WM8903_CLOCK_RATES_2, reg);
++              snd_soc_write(codec, WM8903_CLOCK_RATES_2, reg);
+               break;
+       }
+@@ -1041,7 +1005,7 @@
+                             unsigned int fmt)
+ {
+       struct snd_soc_codec *codec = codec_dai->codec;
+-      u16 aif1 = wm8903_read(codec, WM8903_AUDIO_INTERFACE_1);
++      u16 aif1 = snd_soc_read(codec, WM8903_AUDIO_INTERFACE_1);
+       aif1 &= ~(WM8903_LRCLK_DIR | WM8903_BCLK_DIR | WM8903_AIF_FMT_MASK |
+                 WM8903_AIF_LRCLK_INV | WM8903_AIF_BCLK_INV);
+@@ -1119,7 +1083,7 @@
+               return -EINVAL;
+       }
+-      wm8903_write(codec, WM8903_AUDIO_INTERFACE_1, aif1);
++      snd_soc_write(codec, WM8903_AUDIO_INTERFACE_1, aif1);
+       return 0;
+ }
+@@ -1129,14 +1093,14 @@
+       struct snd_soc_codec *codec = codec_dai->codec;
+       u16 reg;
+-      reg = wm8903_read(codec, WM8903_DAC_DIGITAL_1);
++      reg = snd_soc_read(codec, WM8903_DAC_DIGITAL_1);
+       if (mute)
+               reg |= WM8903_DAC_MUTE;
+       else
+               reg &= ~WM8903_DAC_MUTE;
+-      wm8903_write(codec, WM8903_DAC_DIGITAL_1, reg);
++      snd_soc_write(codec, WM8903_DAC_DIGITAL_1, reg);
+       return 0;
+ }
+@@ -1273,14 +1237,8 @@
+       if (wm8903->master_substream) {
+               master_runtime = wm8903->master_substream->runtime;
+-              dev_dbg(&i2c->dev, "Constraining to %d bits at %dHz\n",
+-                      master_runtime->sample_bits,
+-                      master_runtime->rate);
+-
+-              snd_pcm_hw_constraint_minmax(substream->runtime,
+-                                           SNDRV_PCM_HW_PARAM_RATE,
+-                                           master_runtime->rate,
+-                                           master_runtime->rate);
++              dev_dbg(&i2c->dev, "Constraining to %d bits\n",
++                      master_runtime->sample_bits);
+               snd_pcm_hw_constraint_minmax(substream->runtime,
+                                            SNDRV_PCM_HW_PARAM_SAMPLE_BITS,
+@@ -1332,17 +1290,24 @@
+       int cur_val;
+       int clk_sys;
+-      u16 aif1 = wm8903_read(codec, WM8903_AUDIO_INTERFACE_1);
+-      u16 aif2 = wm8903_read(codec, WM8903_AUDIO_INTERFACE_2);
+-      u16 aif3 = wm8903_read(codec, WM8903_AUDIO_INTERFACE_3);
+-      u16 clock0 = wm8903_read(codec, WM8903_CLOCK_RATES_0);
+-      u16 clock1 = wm8903_read(codec, WM8903_CLOCK_RATES_1);
++      u16 aif1 = snd_soc_read(codec, WM8903_AUDIO_INTERFACE_1);
++      u16 aif2 = snd_soc_read(codec, WM8903_AUDIO_INTERFACE_2);
++      u16 aif3 = snd_soc_read(codec, WM8903_AUDIO_INTERFACE_3);
++      u16 clock0 = snd_soc_read(codec, WM8903_CLOCK_RATES_0);
++      u16 clock1 = snd_soc_read(codec, WM8903_CLOCK_RATES_1);
++      u16 dac_digital1 = snd_soc_read(codec, WM8903_DAC_DIGITAL_1);
+       if (substream == wm8903->slave_substream) {
+               dev_dbg(&i2c->dev, "Ignoring hw_params for slave substream\n");
+               return 0;
+       }
++      /* Enable sloping stopband filter for low sample rates */
++      if (fs <= 24000)
++              dac_digital1 |= WM8903_DAC_SB_FILT;
++      else
++              dac_digital1 &= ~WM8903_DAC_SB_FILT;
++
+       /* Configure sample rate logic for DSP - choose nearest rate */
+       dsp_config = 0;
+       best_val = abs(sample_rates[dsp_config].rate - fs);
+@@ -1462,11 +1427,12 @@
+       aif2 |= bclk_divs[bclk_div].div;
+       aif3 |= bclk / fs;
+-      wm8903_write(codec, WM8903_CLOCK_RATES_0, clock0);
+-      wm8903_write(codec, WM8903_CLOCK_RATES_1, clock1);
+-      wm8903_write(codec, WM8903_AUDIO_INTERFACE_1, aif1);
+-      wm8903_write(codec, WM8903_AUDIO_INTERFACE_2, aif2);
+-      wm8903_write(codec, WM8903_AUDIO_INTERFACE_3, aif3);
++      snd_soc_write(codec, WM8903_CLOCK_RATES_0, clock0);
++      snd_soc_write(codec, WM8903_CLOCK_RATES_1, clock1);
++      snd_soc_write(codec, WM8903_AUDIO_INTERFACE_1, aif1);
++      snd_soc_write(codec, WM8903_AUDIO_INTERFACE_2, aif2);
++      snd_soc_write(codec, WM8903_AUDIO_INTERFACE_3, aif3);
++      snd_soc_write(codec, WM8903_DAC_DIGITAL_1, dac_digital1);
+       return 0;
+ }
+@@ -1519,6 +1485,7 @@
+                .formats = WM8903_FORMATS,
+        },
+       .ops = &wm8903_dai_ops,
++      .symmetric_rates = 1,
+ };
+ EXPORT_SYMBOL_GPL(wm8903_dai);
+@@ -1550,7 +1517,7 @@
+       if (tmp_cache) {
+               for (i = 2; i < ARRAY_SIZE(wm8903_reg_defaults); i++)
+                       if (tmp_cache[i] != reg_cache[i])
+-                              wm8903_write(codec, i, tmp_cache[i]);
++                              snd_soc_write(codec, i, tmp_cache[i]);
+       } else {
+               dev_err(&i2c->dev, "Failed to allocate temporary cache\n");
+       }
+@@ -1581,9 +1548,6 @@
+       codec->dev = &i2c->dev;
+       codec->name = "WM8903";
+       codec->owner = THIS_MODULE;
+-      codec->read = wm8903_read;
+-      codec->write = wm8903_write;
+-      codec->hw_write = (hw_write_t)i2c_master_send;
+       codec->bias_level = SND_SOC_BIAS_OFF;
+       codec->set_bias_level = wm8903_set_bias_level;
+       codec->dai = &wm8903_dai;
+@@ -1591,18 +1555,25 @@
+       codec->reg_cache_size = ARRAY_SIZE(wm8903->reg_cache);
+       codec->reg_cache = &wm8903->reg_cache[0];
+       codec->private_data = wm8903;
++      codec->volatile_register = wm8903_volatile_register;
+       i2c_set_clientdata(i2c, codec);
+       codec->control_data = i2c;
+-      val = wm8903_hw_read(codec, WM8903_SW_RESET_AND_ID);
++      ret = snd_soc_codec_set_cache_io(codec, 8, 16, SND_SOC_I2C);
++      if (ret != 0) {
++              dev_err(&i2c->dev, "Failed to set cache I/O: %d\n", ret);
++              goto err;
++      }
++
++      val = snd_soc_read(codec, WM8903_SW_RESET_AND_ID);
+       if (val != wm8903_reg_defaults[WM8903_SW_RESET_AND_ID]) {
+               dev_err(&i2c->dev,
+                       "Device with ID register %x is not a WM8903\n", val);
+               return -ENODEV;
+       }
+-      val = wm8903_read(codec, WM8903_REVISION_NUMBER);
++      val = snd_soc_read(codec, WM8903_REVISION_NUMBER);
+       dev_info(&i2c->dev, "WM8903 revision %d\n",
+                val & WM8903_CHIP_REV_MASK);
+@@ -1612,35 +1583,35 @@
+       wm8903_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
+       /* Latch volume update bits */
+-      val = wm8903_read(codec, WM8903_ADC_DIGITAL_VOLUME_LEFT);
++      val = snd_soc_read(codec, WM8903_ADC_DIGITAL_VOLUME_LEFT);
+       val |= WM8903_ADCVU;
+-      wm8903_write(codec, WM8903_ADC_DIGITAL_VOLUME_LEFT, val);
+-      wm8903_write(codec, WM8903_ADC_DIGITAL_VOLUME_RIGHT, val);
++      snd_soc_write(codec, WM8903_ADC_DIGITAL_VOLUME_LEFT, val);
++      snd_soc_write(codec, WM8903_ADC_DIGITAL_VOLUME_RIGHT, val);
+-      val = wm8903_read(codec, WM8903_DAC_DIGITAL_VOLUME_LEFT);
++      val = snd_soc_read(codec, WM8903_DAC_DIGITAL_VOLUME_LEFT);
+       val |= WM8903_DACVU;
+-      wm8903_write(codec, WM8903_DAC_DIGITAL_VOLUME_LEFT, val);
+-      wm8903_write(codec, WM8903_DAC_DIGITAL_VOLUME_RIGHT, val);
++      snd_soc_write(codec, WM8903_DAC_DIGITAL_VOLUME_LEFT, val);
++      snd_soc_write(codec, WM8903_DAC_DIGITAL_VOLUME_RIGHT, val);
+-      val = wm8903_read(codec, WM8903_ANALOGUE_OUT1_LEFT);
++      val = snd_soc_read(codec, WM8903_ANALOGUE_OUT1_LEFT);
+       val |= WM8903_HPOUTVU;
+-      wm8903_write(codec, WM8903_ANALOGUE_OUT1_LEFT, val);
+-      wm8903_write(codec, WM8903_ANALOGUE_OUT1_RIGHT, val);
++      snd_soc_write(codec, WM8903_ANALOGUE_OUT1_LEFT, val);
++      snd_soc_write(codec, WM8903_ANALOGUE_OUT1_RIGHT, val);
+-      val = wm8903_read(codec, WM8903_ANALOGUE_OUT2_LEFT);
++      val = snd_soc_read(codec, WM8903_ANALOGUE_OUT2_LEFT);
+       val |= WM8903_LINEOUTVU;
+-      wm8903_write(codec, WM8903_ANALOGUE_OUT2_LEFT, val);
+-      wm8903_write(codec, WM8903_ANALOGUE_OUT2_RIGHT, val);
++      snd_soc_write(codec, WM8903_ANALOGUE_OUT2_LEFT, val);
++      snd_soc_write(codec, WM8903_ANALOGUE_OUT2_RIGHT, val);
+-      val = wm8903_read(codec, WM8903_ANALOGUE_OUT3_LEFT);
++      val = snd_soc_read(codec, WM8903_ANALOGUE_OUT3_LEFT);
+       val |= WM8903_SPKVU;
+-      wm8903_write(codec, WM8903_ANALOGUE_OUT3_LEFT, val);
+-      wm8903_write(codec, WM8903_ANALOGUE_OUT3_RIGHT, val);
++      snd_soc_write(codec, WM8903_ANALOGUE_OUT3_LEFT, val);
++      snd_soc_write(codec, WM8903_ANALOGUE_OUT3_RIGHT, val);
+       /* Enable DAC soft mute by default */
+-      val = wm8903_read(codec, WM8903_DAC_DIGITAL_1);
++      val = snd_soc_read(codec, WM8903_DAC_DIGITAL_1);
+       val |= WM8903_DAC_MUTEMODE;
+-      wm8903_write(codec, WM8903_DAC_DIGITAL_1, val);
++      snd_soc_write(codec, WM8903_DAC_DIGITAL_1, val);
+       wm8903_dai.dev = &i2c->dev;
+       wm8903_codec = codec;
+@@ -1684,6 +1655,21 @@
+       return 0;
+ }
++#ifdef CONFIG_PM
++static int wm8903_i2c_suspend(struct i2c_client *client, pm_message_t msg)
++{
++      return snd_soc_suspend_device(&client->dev);
++}
++
++static int wm8903_i2c_resume(struct i2c_client *client)
++{
++      return snd_soc_resume_device(&client->dev);
++}
++#else
++#define wm8903_i2c_suspend NULL
++#define wm8903_i2c_resume NULL
++#endif
++
+ /* i2c codec control layer */
+ static const struct i2c_device_id wm8903_i2c_id[] = {
+        { "wm8903", 0 },
+@@ -1698,6 +1684,8 @@
+       },
+       .probe    = wm8903_i2c_probe,
+       .remove   = __devexit_p(wm8903_i2c_remove),
++      .suspend  = wm8903_i2c_suspend,
++      .resume   = wm8903_i2c_resume,
+       .id_table = wm8903_i2c_id,
+ };
+Index: linux-2.6.30/sound/soc/codecs/wm8971.c
+===================================================================
+--- linux-2.6.30.orig/sound/soc/codecs/wm8971.c        2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/sound/soc/codecs/wm8971.c     2011-02-01 16:40:30.189047317 +0100
+@@ -59,44 +59,7 @@
+       0x0079, 0x0079, 0x0079,          /* 40 */
+ };
+-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)
++#define wm8971_reset(c)       snd_soc_write(c, WM8971_RESET, 0)
+ /* WM8971 Controls */
+ static const char *wm8971_bass[] = { "Linear Control", "Adaptive Boost" };
+@@ -521,7 +484,7 @@
+               return -EINVAL;
+       }
+-      wm8971_write(codec, WM8971_IFACE, iface);
++      snd_soc_write(codec, WM8971_IFACE, iface);
+       return 0;
+ }
+@@ -533,8 +496,8 @@
+       struct snd_soc_device *socdev = rtd->socdev;
+       struct snd_soc_codec *codec = socdev->card->codec;
+       struct wm8971_priv *wm8971 = codec->private_data;
+-      u16 iface = wm8971_read_reg_cache(codec, WM8971_IFACE) & 0x1f3;
+-      u16 srate = wm8971_read_reg_cache(codec, WM8971_SRATE) & 0x1c0;
++      u16 iface = snd_soc_read(codec, WM8971_IFACE) & 0x1f3;
++      u16 srate = snd_soc_read(codec, WM8971_SRATE) & 0x1c0;
+       int coeff = get_coeff(wm8971->sysclk, params_rate(params));
+       /* bit size */
+@@ -553,9 +516,9 @@
+       }
+       /* set iface & srate */
+-      wm8971_write(codec, WM8971_IFACE, iface);
++      snd_soc_write(codec, WM8971_IFACE, iface);
+       if (coeff >= 0)
+-              wm8971_write(codec, WM8971_SRATE, srate |
++              snd_soc_write(codec, WM8971_SRATE, srate |
+                       (coeff_div[coeff].sr << 1) | coeff_div[coeff].usb);
+       return 0;
+@@ -564,33 +527,33 @@
+ static int wm8971_mute(struct snd_soc_dai *dai, int mute)
+ {
+       struct snd_soc_codec *codec = dai->codec;
+-      u16 mute_reg = wm8971_read_reg_cache(codec, WM8971_ADCDAC) & 0xfff7;
++      u16 mute_reg = snd_soc_read(codec, WM8971_ADCDAC) & 0xfff7;
+       if (mute)
+-              wm8971_write(codec, WM8971_ADCDAC, mute_reg | 0x8);
++              snd_soc_write(codec, WM8971_ADCDAC, mute_reg | 0x8);
+       else
+-              wm8971_write(codec, WM8971_ADCDAC, mute_reg);
++              snd_soc_write(codec, WM8971_ADCDAC, mute_reg);
+       return 0;
+ }
+ static int wm8971_set_bias_level(struct snd_soc_codec *codec,
+       enum snd_soc_bias_level level)
+ {
+-      u16 pwr_reg = wm8971_read_reg_cache(codec, WM8971_PWR1) & 0xfe3e;
++      u16 pwr_reg = snd_soc_read(codec, WM8971_PWR1) & 0xfe3e;
+       switch (level) {
+       case SND_SOC_BIAS_ON:
+               /* set vmid to 50k and unmute dac */
+-              wm8971_write(codec, WM8971_PWR1, pwr_reg | 0x00c1);
++              snd_soc_write(codec, WM8971_PWR1, pwr_reg | 0x00c1);
+               break;
+       case SND_SOC_BIAS_PREPARE:
+               break;
+       case SND_SOC_BIAS_STANDBY:
+               /* mute dac and set vmid to 500k, enable VREF */
+-              wm8971_write(codec, WM8971_PWR1, pwr_reg | 0x0140);
++              snd_soc_write(codec, WM8971_PWR1, pwr_reg | 0x0140);
+               break;
+       case SND_SOC_BIAS_OFF:
+-              wm8971_write(codec, WM8971_PWR1, 0x0001);
++              snd_soc_write(codec, WM8971_PWR1, 0x0001);
+               break;
+       }
+       codec->bias_level = level;
+@@ -667,8 +630,8 @@
+       /* charge wm8971 caps */
+       if (codec->suspend_bias_level == SND_SOC_BIAS_ON) {
+-              reg = wm8971_read_reg_cache(codec, WM8971_PWR1) & 0xfe3e;
+-              wm8971_write(codec, WM8971_PWR1, reg | 0x01c0);
++              reg = snd_soc_read(codec, WM8971_PWR1) & 0xfe3e;
++              snd_soc_write(codec, WM8971_PWR1, reg | 0x01c0);
+               codec->bias_level = SND_SOC_BIAS_ON;
+               queue_delayed_work(wm8971_workq, &codec->delayed_work,
+                       msecs_to_jiffies(1000));
+@@ -677,15 +640,14 @@
+       return 0;
+ }
+-static int wm8971_init(struct snd_soc_device *socdev)
++static int wm8971_init(struct snd_soc_device *socdev,
++                     enum snd_soc_control_type control)
+ {
+       struct snd_soc_codec *codec = socdev->card->codec;
+       int reg, ret = 0;
+       codec->name = "WM8971";
+       codec->owner = THIS_MODULE;
+-      codec->read = wm8971_read_reg_cache;
+-      codec->write = wm8971_write;
+       codec->set_bias_level = wm8971_set_bias_level;
+       codec->dai = &wm8971_dai;
+       codec->reg_cache_size = ARRAY_SIZE(wm8971_reg);
+@@ -695,42 +657,48 @@
+       if (codec->reg_cache == NULL)
+               return -ENOMEM;
++      ret = snd_soc_codec_set_cache_io(codec, 7, 9, control);
++      if (ret < 0) {
++              printk(KERN_ERR "wm8971: failed to set cache I/O: %d\n", ret);
++              goto err;
++      }
++
+       wm8971_reset(codec);
+       /* register pcms */
+       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
+       if (ret < 0) {
+               printk(KERN_ERR "wm8971: failed to create pcms\n");
+-              goto pcm_err;
++              goto err;
+       }
+       /* charge output caps - set vmid to 5k for quick power up */
+-      reg = wm8971_read_reg_cache(codec, WM8971_PWR1) & 0xfe3e;
+-      wm8971_write(codec, WM8971_PWR1, reg | 0x01c0);
++      reg = snd_soc_read(codec, WM8971_PWR1) & 0xfe3e;
++      snd_soc_write(codec, WM8971_PWR1, reg | 0x01c0);
+       codec->bias_level = SND_SOC_BIAS_STANDBY;
+       queue_delayed_work(wm8971_workq, &codec->delayed_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);
++      reg = snd_soc_read(codec, WM8971_LDAC);
++      snd_soc_write(codec, WM8971_LDAC, reg | 0x0100);
++      reg = snd_soc_read(codec, WM8971_RDAC);
++      snd_soc_write(codec, WM8971_RDAC, reg | 0x0100);
++
++      reg = snd_soc_read(codec, WM8971_LOUT1V);
++      snd_soc_write(codec, WM8971_LOUT1V, reg | 0x0100);
++      reg = snd_soc_read(codec, WM8971_ROUT1V);
++      snd_soc_write(codec, WM8971_ROUT1V, reg | 0x0100);
++
++      reg = snd_soc_read(codec, WM8971_LOUT2V);
++      snd_soc_write(codec, WM8971_LOUT2V, reg | 0x0100);
++      reg = snd_soc_read(codec, WM8971_ROUT2V);
++      snd_soc_write(codec, WM8971_ROUT2V, reg | 0x0100);
++
++      reg = snd_soc_read(codec, WM8971_LINVOL);
++      snd_soc_write(codec, WM8971_LINVOL, reg | 0x0100);
++      reg = snd_soc_read(codec, WM8971_RINVOL);
++      snd_soc_write(codec, WM8971_RINVOL, reg | 0x0100);
+       snd_soc_add_controls(codec, wm8971_snd_controls,
+                               ARRAY_SIZE(wm8971_snd_controls));
+@@ -745,7 +713,7 @@
+ card_err:
+       snd_soc_free_pcms(socdev);
+       snd_soc_dapm_free(socdev);
+-pcm_err:
++err:
+       kfree(codec->reg_cache);
+       return ret;
+ }
+@@ -767,7 +735,7 @@
+       codec->control_data = i2c;
+-      ret = wm8971_init(socdev);
++      ret = wm8971_init(socdev, SND_SOC_I2C);
+       if (ret < 0)
+               pr_err("failed to initialise WM8971\n");
+@@ -877,7 +845,6 @@
+ #if defined (CONFIG_I2C) || defined (CONFIG_I2C_MODULE)
+       if (setup->i2c_address) {
+-              codec->hw_write = (hw_write_t)i2c_master_send;
+               ret = wm8971_add_i2c_device(pdev, setup);
+       }
+ #endif
+Index: linux-2.6.30/sound/soc/codecs/wm8990.c
+===================================================================
+--- linux-2.6.30.orig/sound/soc/codecs/wm8990.c        2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/sound/soc/codecs/wm8990.c     2011-02-01 16:40:30.189047317 +0100
+@@ -108,53 +108,7 @@
+       0x0000,     /* R63 - Driver internal */
+ };
+-/*
+- * read wm8990 register cache
+- */
+-static inline unsigned int wm8990_read_reg_cache(struct snd_soc_codec *codec,
+-      unsigned int reg)
+-{
+-      u16 *cache = codec->reg_cache;
+-      BUG_ON(reg >= ARRAY_SIZE(wm8990_reg));
+-      return cache[reg];
+-}
+-
+-/*
+- * write wm8990 register cache
+- */
+-static inline void wm8990_write_reg_cache(struct snd_soc_codec *codec,
+-      unsigned int reg, unsigned int value)
+-{
+-      u16 *cache = codec->reg_cache;
+-
+-      /* Reset register and reserved registers are uncached */
+-      if (reg == 0 || reg >= ARRAY_SIZE(wm8990_reg))
+-              return;
+-
+-      cache[reg] = value;
+-}
+-
+-/*
+- * write to the wm8990 register space
+- */
+-static int wm8990_write(struct snd_soc_codec *codec, unsigned int reg,
+-      unsigned int value)
+-{
+-      u8 data[3];
+-
+-      data[0] = reg & 0xFF;
+-      data[1] = (value >> 8) & 0xFF;
+-      data[2] = value & 0xFF;
+-
+-      wm8990_write_reg_cache(codec, reg, value);
+-
+-      if (codec->hw_write(codec->control_data, data, 3) == 2)
+-              return 0;
+-      else
+-              return -EIO;
+-}
+-
+-#define wm8990_reset(c) wm8990_write(c, WM8990_RESET, 0)
++#define wm8990_reset(c) snd_soc_write(c, WM8990_RESET, 0)
+ static const DECLARE_TLV_DB_LINEAR(rec_mix_tlv, -1500, 600);
+@@ -187,8 +141,8 @@
+               return ret;
+       /* now hit the volume update bits (always bit 8) */
+-      val = wm8990_read_reg_cache(codec, reg);
+-      return wm8990_write(codec, reg, val | 0x0100);
++      val = snd_soc_read(codec, reg);
++      return snd_soc_write(codec, reg, val | 0x0100);
+ }
+ #define SOC_WM899X_OUTPGA_SINGLE_R_TLV(xname, reg, shift, max, invert,\
+@@ -427,8 +381,8 @@
+ {
+       u16 reg, fakepower;
+-      reg = wm8990_read_reg_cache(w->codec, WM8990_POWER_MANAGEMENT_2);
+-      fakepower = wm8990_read_reg_cache(w->codec, WM8990_INTDRIVBITS);
++      reg = snd_soc_read(w->codec, WM8990_POWER_MANAGEMENT_2);
++      fakepower = snd_soc_read(w->codec, WM8990_INTDRIVBITS);
+       if (fakepower & ((1 << WM8990_INMIXL_PWR_BIT) |
+               (1 << WM8990_AINLMUX_PWR_BIT))) {
+@@ -443,7 +397,7 @@
+       } else {
+               reg &= ~WM8990_AINL_ENA;
+       }
+-      wm8990_write(w->codec, WM8990_POWER_MANAGEMENT_2, reg);
++      snd_soc_write(w->codec, WM8990_POWER_MANAGEMENT_2, reg);
+       return 0;
+ }
+@@ -457,7 +411,7 @@
+       switch (reg_shift) {
+       case WM8990_SPEAKER_MIXER | (WM8990_LDSPK_BIT << 8) :
+-              reg = wm8990_read_reg_cache(w->codec, WM8990_OUTPUT_MIXER1);
++              reg = snd_soc_read(w->codec, WM8990_OUTPUT_MIXER1);
+               if (reg & WM8990_LDLO) {
+                       printk(KERN_WARNING
+                       "Cannot set as Output Mixer 1 LDLO Set\n");
+@@ -465,7 +419,7 @@
+               }
+               break;
+       case WM8990_SPEAKER_MIXER | (WM8990_RDSPK_BIT << 8):
+-              reg = wm8990_read_reg_cache(w->codec, WM8990_OUTPUT_MIXER2);
++              reg = snd_soc_read(w->codec, WM8990_OUTPUT_MIXER2);
+               if (reg & WM8990_RDRO) {
+                       printk(KERN_WARNING
+                       "Cannot set as Output Mixer 2 RDRO Set\n");
+@@ -473,7 +427,7 @@
+               }
+               break;
+       case WM8990_OUTPUT_MIXER1 | (WM8990_LDLO_BIT << 8):
+-              reg = wm8990_read_reg_cache(w->codec, WM8990_SPEAKER_MIXER);
++              reg = snd_soc_read(w->codec, WM8990_SPEAKER_MIXER);
+               if (reg & WM8990_LDSPK) {
+                       printk(KERN_WARNING
+                       "Cannot set as Speaker Mixer LDSPK Set\n");
+@@ -481,7 +435,7 @@
+               }
+               break;
+       case WM8990_OUTPUT_MIXER2 | (WM8990_RDRO_BIT << 8):
+-              reg = wm8990_read_reg_cache(w->codec, WM8990_SPEAKER_MIXER);
++              reg = snd_soc_read(w->codec, WM8990_SPEAKER_MIXER);
+               if (reg & WM8990_RDSPK) {
+                       printk(KERN_WARNING
+                       "Cannot set as Speaker Mixer RDSPK Set\n");
+@@ -998,7 +952,7 @@
+       if ((Ndiv < 6) || (Ndiv > 12))
+               printk(KERN_WARNING
+-              "WM8990 N value outwith recommended range! N = %d\n", Ndiv);
++              "WM8990 N value outwith recommended range! N = %u\n", Ndiv);
+       pll_div->n = Ndiv;
+       Nmod = target % source;
+@@ -1018,8 +972,8 @@
+       pll_div->k = K;
+ }
+-static int wm8990_set_dai_pll(struct snd_soc_dai *codec_dai,
+-              int pll_id, unsigned int freq_in, unsigned int freq_out)
++static int wm8990_set_dai_pll(struct snd_soc_dai *codec_dai, int pll_id,
++              int source, unsigned int freq_in, unsigned int freq_out)
+ {
+       u16 reg;
+       struct snd_soc_codec *codec = codec_dai->codec;
+@@ -1029,24 +983,24 @@
+               pll_factors(&pll_div, freq_out * 4, freq_in);
+               /* Turn on PLL */
+-              reg = wm8990_read_reg_cache(codec, WM8990_POWER_MANAGEMENT_2);
++              reg = snd_soc_read(codec, WM8990_POWER_MANAGEMENT_2);
+               reg |= WM8990_PLL_ENA;
+-              wm8990_write(codec, WM8990_POWER_MANAGEMENT_2, reg);
++              snd_soc_write(codec, WM8990_POWER_MANAGEMENT_2, reg);
+               /* sysclk comes from PLL */
+-              reg = wm8990_read_reg_cache(codec, WM8990_CLOCKING_2);
+-              wm8990_write(codec, WM8990_CLOCKING_2, reg | WM8990_SYSCLK_SRC);
++              reg = snd_soc_read(codec, WM8990_CLOCKING_2);
++              snd_soc_write(codec, WM8990_CLOCKING_2, reg | WM8990_SYSCLK_SRC);
+               /* set up N , fractional mode and pre-divisor if neccessary */
+-              wm8990_write(codec, WM8990_PLL1, pll_div.n | WM8990_SDM |
++              snd_soc_write(codec, WM8990_PLL1, pll_div.n | WM8990_SDM |
+                       (pll_div.div2?WM8990_PRESCALE:0));
+-              wm8990_write(codec, WM8990_PLL2, (u8)(pll_div.k>>8));
+-              wm8990_write(codec, WM8990_PLL3, (u8)(pll_div.k & 0xFF));
++              snd_soc_write(codec, WM8990_PLL2, (u8)(pll_div.k>>8));
++              snd_soc_write(codec, WM8990_PLL3, (u8)(pll_div.k & 0xFF));
+       } else {
+               /* Turn on PLL */
+-              reg = wm8990_read_reg_cache(codec, WM8990_POWER_MANAGEMENT_2);
++              reg = snd_soc_read(codec, WM8990_POWER_MANAGEMENT_2);
+               reg &= ~WM8990_PLL_ENA;
+-              wm8990_write(codec, WM8990_POWER_MANAGEMENT_2, reg);
++              snd_soc_write(codec, WM8990_POWER_MANAGEMENT_2, reg);
+       }
+       return 0;
+ }
+@@ -1073,8 +1027,8 @@
+       struct snd_soc_codec *codec = codec_dai->codec;
+       u16 audio1, audio3;
+-      audio1 = wm8990_read_reg_cache(codec, WM8990_AUDIO_INTERFACE_1);
+-      audio3 = wm8990_read_reg_cache(codec, WM8990_AUDIO_INTERFACE_3);
++      audio1 = snd_soc_read(codec, WM8990_AUDIO_INTERFACE_1);
++      audio3 = snd_soc_read(codec, WM8990_AUDIO_INTERFACE_3);
+       /* set master/slave audio interface */
+       switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
+@@ -1115,8 +1069,8 @@
+               return -EINVAL;
+       }
+-      wm8990_write(codec, WM8990_AUDIO_INTERFACE_1, audio1);
+-      wm8990_write(codec, WM8990_AUDIO_INTERFACE_3, audio3);
++      snd_soc_write(codec, WM8990_AUDIO_INTERFACE_1, audio1);
++      snd_soc_write(codec, WM8990_AUDIO_INTERFACE_3, audio3);
+       return 0;
+ }
+@@ -1128,24 +1082,24 @@
+       switch (div_id) {
+       case WM8990_MCLK_DIV:
+-              reg = wm8990_read_reg_cache(codec, WM8990_CLOCKING_2) &
++              reg = snd_soc_read(codec, WM8990_CLOCKING_2) &
+                       ~WM8990_MCLK_DIV_MASK;
+-              wm8990_write(codec, WM8990_CLOCKING_2, reg | div);
++              snd_soc_write(codec, WM8990_CLOCKING_2, reg | div);
+               break;
+       case WM8990_DACCLK_DIV:
+-              reg = wm8990_read_reg_cache(codec, WM8990_CLOCKING_2) &
++              reg = snd_soc_read(codec, WM8990_CLOCKING_2) &
+                       ~WM8990_DAC_CLKDIV_MASK;
+-              wm8990_write(codec, WM8990_CLOCKING_2, reg | div);
++              snd_soc_write(codec, WM8990_CLOCKING_2, reg | div);
+               break;
+       case WM8990_ADCCLK_DIV:
+-              reg = wm8990_read_reg_cache(codec, WM8990_CLOCKING_2) &
++              reg = snd_soc_read(codec, WM8990_CLOCKING_2) &
+                       ~WM8990_ADC_CLKDIV_MASK;
+-              wm8990_write(codec, WM8990_CLOCKING_2, reg | div);
++              snd_soc_write(codec, WM8990_CLOCKING_2, reg | div);
+               break;
+       case WM8990_BCLK_DIV:
+-              reg = wm8990_read_reg_cache(codec, WM8990_CLOCKING_1) &
++              reg = snd_soc_read(codec, WM8990_CLOCKING_1) &
+                       ~WM8990_BCLK_DIV_MASK;
+-              wm8990_write(codec, WM8990_CLOCKING_1, reg | div);
++              snd_soc_write(codec, WM8990_CLOCKING_1, reg | div);
+               break;
+       default:
+               return -EINVAL;
+@@ -1164,7 +1118,7 @@
+       struct snd_soc_pcm_runtime *rtd = substream->private_data;
+       struct snd_soc_device *socdev = rtd->socdev;
+       struct snd_soc_codec *codec = socdev->card->codec;
+-      u16 audio1 = wm8990_read_reg_cache(codec, WM8990_AUDIO_INTERFACE_1);
++      u16 audio1 = snd_soc_read(codec, WM8990_AUDIO_INTERFACE_1);
+       audio1 &= ~WM8990_AIF_WL_MASK;
+       /* bit size */
+@@ -1182,7 +1136,7 @@
+               break;
+       }
+-      wm8990_write(codec, WM8990_AUDIO_INTERFACE_1, audio1);
++      snd_soc_write(codec, WM8990_AUDIO_INTERFACE_1, audio1);
+       return 0;
+ }
+@@ -1191,12 +1145,12 @@
+       struct snd_soc_codec *codec = dai->codec;
+       u16 val;
+-      val  = wm8990_read_reg_cache(codec, WM8990_DAC_CTRL) & ~WM8990_DAC_MUTE;
++      val  = snd_soc_read(codec, WM8990_DAC_CTRL) & ~WM8990_DAC_MUTE;
+       if (mute)
+-              wm8990_write(codec, WM8990_DAC_CTRL, val | WM8990_DAC_MUTE);
++              snd_soc_write(codec, WM8990_DAC_CTRL, val | WM8990_DAC_MUTE);
+       else
+-              wm8990_write(codec, WM8990_DAC_CTRL, val);
++              snd_soc_write(codec, WM8990_DAC_CTRL, val);
+       return 0;
+ }
+@@ -1212,21 +1166,21 @@
+       case SND_SOC_BIAS_PREPARE:
+               /* VMID=2*50k */
+-              val = wm8990_read_reg_cache(codec, WM8990_POWER_MANAGEMENT_1) &
++              val = snd_soc_read(codec, WM8990_POWER_MANAGEMENT_1) &
+                       ~WM8990_VMID_MODE_MASK;
+-              wm8990_write(codec, WM8990_POWER_MANAGEMENT_1, val | 0x2);
++              snd_soc_write(codec, WM8990_POWER_MANAGEMENT_1, val | 0x2);
+               break;
+       case SND_SOC_BIAS_STANDBY:
+               if (codec->bias_level == SND_SOC_BIAS_OFF) {
+                       /* Enable all output discharge bits */
+-                      wm8990_write(codec, WM8990_ANTIPOP1, WM8990_DIS_LLINE |
++                      snd_soc_write(codec, WM8990_ANTIPOP1, WM8990_DIS_LLINE |
+                               WM8990_DIS_RLINE | WM8990_DIS_OUT3 |
+                               WM8990_DIS_OUT4 | WM8990_DIS_LOUT |
+                               WM8990_DIS_ROUT);
+                       /* Enable POBCTRL, SOFT_ST, VMIDTOG and BUFDCOPEN */
+-                      wm8990_write(codec, WM8990_ANTIPOP2, WM8990_SOFTST |
++                      snd_soc_write(codec, WM8990_ANTIPOP2, WM8990_SOFTST |
+                                    WM8990_BUFDCOPEN | WM8990_POBCTRL |
+                                    WM8990_VMIDTOG);
+@@ -1234,83 +1188,83 @@
+                       msleep(msecs_to_jiffies(300));
+                       /* Disable VMIDTOG */
+-                      wm8990_write(codec, WM8990_ANTIPOP2, WM8990_SOFTST |
++                      snd_soc_write(codec, WM8990_ANTIPOP2, WM8990_SOFTST |
+                                    WM8990_BUFDCOPEN | WM8990_POBCTRL);
+                       /* disable all output discharge bits */
+-                      wm8990_write(codec, WM8990_ANTIPOP1, 0);
++                      snd_soc_write(codec, WM8990_ANTIPOP1, 0);
+                       /* Enable outputs */
+-                      wm8990_write(codec, WM8990_POWER_MANAGEMENT_1, 0x1b00);
++                      snd_soc_write(codec, WM8990_POWER_MANAGEMENT_1, 0x1b00);
+                       msleep(msecs_to_jiffies(50));
+                       /* Enable VMID at 2x50k */
+-                      wm8990_write(codec, WM8990_POWER_MANAGEMENT_1, 0x1f02);
++                      snd_soc_write(codec, WM8990_POWER_MANAGEMENT_1, 0x1f02);
+                       msleep(msecs_to_jiffies(100));
+                       /* Enable VREF */
+-                      wm8990_write(codec, WM8990_POWER_MANAGEMENT_1, 0x1f03);
++                      snd_soc_write(codec, WM8990_POWER_MANAGEMENT_1, 0x1f03);
+                       msleep(msecs_to_jiffies(600));
+                       /* Enable BUFIOEN */
+-                      wm8990_write(codec, WM8990_ANTIPOP2, WM8990_SOFTST |
++                      snd_soc_write(codec, WM8990_ANTIPOP2, WM8990_SOFTST |
+                                    WM8990_BUFDCOPEN | WM8990_POBCTRL |
+                                    WM8990_BUFIOEN);
+                       /* Disable outputs */
+-                      wm8990_write(codec, WM8990_POWER_MANAGEMENT_1, 0x3);
++                      snd_soc_write(codec, WM8990_POWER_MANAGEMENT_1, 0x3);
+                       /* disable POBCTRL, SOFT_ST and BUFDCOPEN */
+-                      wm8990_write(codec, WM8990_ANTIPOP2, WM8990_BUFIOEN);
++                      snd_soc_write(codec, WM8990_ANTIPOP2, WM8990_BUFIOEN);
+                       /* Enable workaround for ADC clocking issue. */
+-                      wm8990_write(codec, WM8990_EXT_ACCESS_ENA, 0x2);
+-                      wm8990_write(codec, WM8990_EXT_CTL1, 0xa003);
+-                      wm8990_write(codec, WM8990_EXT_ACCESS_ENA, 0);
++                      snd_soc_write(codec, WM8990_EXT_ACCESS_ENA, 0x2);
++                      snd_soc_write(codec, WM8990_EXT_CTL1, 0xa003);
++                      snd_soc_write(codec, WM8990_EXT_ACCESS_ENA, 0);
+               }
+               /* VMID=2*250k */
+-              val = wm8990_read_reg_cache(codec, WM8990_POWER_MANAGEMENT_1) &
++              val = snd_soc_read(codec, WM8990_POWER_MANAGEMENT_1) &
+                       ~WM8990_VMID_MODE_MASK;
+-              wm8990_write(codec, WM8990_POWER_MANAGEMENT_1, val | 0x4);
++              snd_soc_write(codec, WM8990_POWER_MANAGEMENT_1, val | 0x4);
+               break;
+       case SND_SOC_BIAS_OFF:
+               /* Enable POBCTRL and SOFT_ST */
+-              wm8990_write(codec, WM8990_ANTIPOP2, WM8990_SOFTST |
++              snd_soc_write(codec, WM8990_ANTIPOP2, WM8990_SOFTST |
+                       WM8990_POBCTRL | WM8990_BUFIOEN);
+               /* Enable POBCTRL, SOFT_ST and BUFDCOPEN */
+-              wm8990_write(codec, WM8990_ANTIPOP2, WM8990_SOFTST |
++              snd_soc_write(codec, WM8990_ANTIPOP2, WM8990_SOFTST |
+                       WM8990_BUFDCOPEN | WM8990_POBCTRL |
+                       WM8990_BUFIOEN);
+               /* mute DAC */
+-              val = wm8990_read_reg_cache(codec, WM8990_DAC_CTRL);
+-              wm8990_write(codec, WM8990_DAC_CTRL, val | WM8990_DAC_MUTE);
++              val = snd_soc_read(codec, WM8990_DAC_CTRL);
++              snd_soc_write(codec, WM8990_DAC_CTRL, val | WM8990_DAC_MUTE);
+               /* Enable any disabled outputs */
+-              wm8990_write(codec, WM8990_POWER_MANAGEMENT_1, 0x1f03);
++              snd_soc_write(codec, WM8990_POWER_MANAGEMENT_1, 0x1f03);
+               /* Disable VMID */
+-              wm8990_write(codec, WM8990_POWER_MANAGEMENT_1, 0x1f01);
++              snd_soc_write(codec, WM8990_POWER_MANAGEMENT_1, 0x1f01);
+               msleep(msecs_to_jiffies(300));
+               /* Enable all output discharge bits */
+-              wm8990_write(codec, WM8990_ANTIPOP1, WM8990_DIS_LLINE |
++              snd_soc_write(codec, WM8990_ANTIPOP1, WM8990_DIS_LLINE |
+                       WM8990_DIS_RLINE | WM8990_DIS_OUT3 |
+                       WM8990_DIS_OUT4 | WM8990_DIS_LOUT |
+                       WM8990_DIS_ROUT);
+               /* Disable VREF */
+-              wm8990_write(codec, WM8990_POWER_MANAGEMENT_1, 0x0);
++              snd_soc_write(codec, WM8990_POWER_MANAGEMENT_1, 0x0);
+               /* disable POBCTRL, SOFT_ST and BUFDCOPEN */
+-              wm8990_write(codec, WM8990_ANTIPOP2, 0x0);
++              snd_soc_write(codec, WM8990_ANTIPOP2, 0x0);
+               break;
+       }
+@@ -1411,8 +1365,6 @@
+       codec->name = "WM8990";
+       codec->owner = THIS_MODULE;
+-      codec->read = wm8990_read_reg_cache;
+-      codec->write = wm8990_write;
+       codec->set_bias_level = wm8990_set_bias_level;
+       codec->dai = &wm8990_dai;
+       codec->num_dai = 2;
+@@ -1422,6 +1374,12 @@
+       if (codec->reg_cache == NULL)
+               return -ENOMEM;
++      ret = snd_soc_codec_set_cache_io(codec, 8, 16, SND_SOC_I2C);
++      if (ret < 0) {
++              printk(KERN_ERR "wm8990: failed to set cache I/O: %d\n", ret);
++              goto pcm_err;
++      }
++
+       wm8990_reset(codec);
+       /* register pcms */
+@@ -1435,18 +1393,18 @@
+       codec->bias_level = SND_SOC_BIAS_OFF;
+       wm8990_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
+-      reg = wm8990_read_reg_cache(codec, WM8990_AUDIO_INTERFACE_4);
+-      wm8990_write(codec, WM8990_AUDIO_INTERFACE_4, reg | WM8990_ALRCGPIO1);
++      reg = snd_soc_read(codec, WM8990_AUDIO_INTERFACE_4);
++      snd_soc_write(codec, WM8990_AUDIO_INTERFACE_4, reg | WM8990_ALRCGPIO1);
+-      reg = wm8990_read_reg_cache(codec, WM8990_GPIO1_GPIO2) &
++      reg = snd_soc_read(codec, WM8990_GPIO1_GPIO2) &
+               ~WM8990_GPIO1_SEL_MASK;
+-      wm8990_write(codec, WM8990_GPIO1_GPIO2, reg | 1);
++      snd_soc_write(codec, WM8990_GPIO1_GPIO2, reg | 1);
+-      reg = wm8990_read_reg_cache(codec, WM8990_POWER_MANAGEMENT_2);
+-      wm8990_write(codec, WM8990_POWER_MANAGEMENT_2, reg | WM8990_OPCLK_ENA);
++      reg = snd_soc_read(codec, WM8990_POWER_MANAGEMENT_2);
++      snd_soc_write(codec, WM8990_POWER_MANAGEMENT_2, reg | WM8990_OPCLK_ENA);
+-      wm8990_write(codec, WM8990_LEFT_OUTPUT_VOLUME, 0x50 | (1<<8));
+-      wm8990_write(codec, WM8990_RIGHT_OUTPUT_VOLUME, 0x50 | (1<<8));
++      snd_soc_write(codec, WM8990_LEFT_OUTPUT_VOLUME, 0x50 | (1<<8));
++      snd_soc_write(codec, WM8990_RIGHT_OUTPUT_VOLUME, 0x50 | (1<<8));
+       snd_soc_add_controls(codec, wm8990_snd_controls,
+                               ARRAY_SIZE(wm8990_snd_controls));
+Index: linux-2.6.30/sound/soc/codecs/wm9705.c
+===================================================================
+--- linux-2.6.30.orig/sound/soc/codecs/wm9705.c        2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/sound/soc/codecs/wm9705.c     2011-02-01 16:40:30.193007582 +0100
+@@ -282,14 +282,14 @@
+                       .channels_min = 1,
+                       .channels_max = 2,
+                       .rates = WM9705_AC97_RATES,
+-                      .formats = SNDRV_PCM_FMTBIT_S16_LE,
++                      .formats = SND_SOC_STD_AC97_FMTS,
+               },
+               .capture = {
+                       .stream_name = "HiFi Capture",
+                       .channels_min = 1,
+                       .channels_max = 2,
+                       .rates = WM9705_AC97_RATES,
+-                      .formats = SNDRV_PCM_FMTBIT_S16_LE,
++                      .formats = SND_SOC_STD_AC97_FMTS,
+               },
+               .ops = &wm9705_dai_ops,
+       },
+@@ -406,7 +406,7 @@
+       ret = snd_soc_init_card(socdev);
+       if (ret < 0) {
+               printk(KERN_ERR "wm9705: failed to register card\n");
+-              goto pcm_err;
++              goto reset_err;
+       }
+       return 0;
+Index: linux-2.6.30/sound/soc/codecs/wm9712.c
+===================================================================
+--- linux-2.6.30.orig/sound/soc/codecs/wm9712.c        2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/sound/soc/codecs/wm9712.c     2011-02-01 16:40:30.193007582 +0100
+@@ -534,13 +534,13 @@
+               .channels_min = 1,
+               .channels_max = 2,
+               .rates = WM9712_AC97_RATES,
+-              .formats = SNDRV_PCM_FMTBIT_S16_LE,},
++              .formats = SND_SOC_STD_AC97_FMTS,},
+       .capture = {
+               .stream_name = "HiFi Capture",
+               .channels_min = 1,
+               .channels_max = 2,
+               .rates = WM9712_AC97_RATES,
+-              .formats = SNDRV_PCM_FMTBIT_S16_LE,},
++              .formats = SND_SOC_STD_AC97_FMTS,},
+       .ops = &wm9712_dai_ops_hifi,
+ },
+ {
+@@ -550,7 +550,7 @@
+               .channels_min = 1,
+               .channels_max = 1,
+               .rates = WM9712_AC97_RATES,
+-              .formats = SNDRV_PCM_FMTBIT_S16_LE,},
++              .formats = SND_SOC_STD_AC97_FMTS,},
+       .ops = &wm9712_dai_ops_aux,
+ }
+ };
+@@ -585,6 +585,8 @@
+       }
+       soc_ac97_ops.reset(codec->ac97);
++      if (soc_ac97_ops.warm_reset)
++              soc_ac97_ops.warm_reset(codec->ac97);
+       if (ac97_read(codec, 0) != wm9712_reg[0])
+               goto err;
+       return 0;
+Index: linux-2.6.30/sound/soc/codecs/wm9713.c
+===================================================================
+--- linux-2.6.30.orig/sound/soc/codecs/wm9713.c        2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/sound/soc/codecs/wm9713.c     2011-02-01 16:40:30.193007582 +0100
+@@ -189,6 +189,26 @@
+ SOC_SINGLE("3D Depth", AC97_REC_GAIN_MIC, 0, 15, 1),
+ };
++static int wm9713_voice_shutdown(struct snd_soc_dapm_widget *w,
++                               struct snd_kcontrol *kcontrol, int event)
++{
++      struct snd_soc_codec *codec = w->codec;
++      u16 status, rate;
++
++      BUG_ON(event != SND_SOC_DAPM_PRE_PMD);
++
++      /* Gracefully shut down the voice interface. */
++      status = ac97_read(codec, AC97_EXTENDED_MID) | 0x1000;
++      rate = ac97_read(codec, AC97_HANDSET_RATE) & 0xF0FF;
++      ac97_write(codec, AC97_HANDSET_RATE, rate | 0x0200);
++      schedule_timeout_interruptible(msecs_to_jiffies(1));
++      ac97_write(codec, AC97_HANDSET_RATE, rate | 0x0F00);
++      ac97_write(codec, AC97_EXTENDED_MID, status);
++
++      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
+@@ -400,7 +420,8 @@
+ SND_SOC_DAPM_MIXER("HP Mixer", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_MIXER("Line 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_E("Voice DAC", "Voice Playback", AC97_EXTENDED_MID, 12, 1,
++                 wm9713_voice_shutdown, SND_SOC_DAPM_PRE_PMD),
+ SND_SOC_DAPM_DAC("Aux DAC", "Aux Playback", AC97_EXTENDED_MID, 11, 1),
+ SND_SOC_DAPM_PGA("Left ADC", AC97_EXTENDED_MID, 5, 1, NULL, 0),
+ SND_SOC_DAPM_PGA("Right ADC", AC97_EXTENDED_MID, 4, 1, NULL, 0),
+@@ -689,7 +710,7 @@
+       Ndiv = target / source;
+       if ((Ndiv < 5) || (Ndiv > 12))
+               printk(KERN_WARNING
+-                      "WM9713 PLL N value %d out of recommended range!\n",
++                      "WM9713 PLL N value %u out of recommended range!\n",
+                       Ndiv);
+       pll_div->n = Ndiv;
+@@ -779,8 +800,8 @@
+       return 0;
+ }
+-static int wm9713_set_dai_pll(struct snd_soc_dai *codec_dai,
+-              int pll_id, unsigned int freq_in, unsigned int freq_out)
++static int wm9713_set_dai_pll(struct snd_soc_dai *codec_dai, int pll_id,
++              int source, unsigned int freq_in, unsigned int freq_out)
+ {
+       struct snd_soc_codec *codec = codec_dai->codec;
+       return wm9713_set_pll(codec, pll_id, freq_in, freq_out);
+@@ -936,21 +957,6 @@
+       return 0;
+ }
+-static void wm9713_voiceshutdown(struct snd_pcm_substream *substream,
+-                               struct snd_soc_dai *dai)
+-{
+-      struct snd_soc_codec *codec = dai->codec;
+-      u16 status, rate;
+-
+-      /* Gracefully shut down the voice interface. */
+-      status = ac97_read(codec, AC97_EXTENDED_STATUS) | 0x1000;
+-      rate = ac97_read(codec, AC97_HANDSET_RATE) & 0xF0FF;
+-      ac97_write(codec, AC97_HANDSET_RATE, rate | 0x0200);
+-      schedule_timeout_interruptible(msecs_to_jiffies(1));
+-      ac97_write(codec, AC97_HANDSET_RATE, rate | 0x0F00);
+-      ac97_write(codec, AC97_EXTENDED_MID, status);
+-}
+-
+ static int ac97_hifi_prepare(struct snd_pcm_substream *substream,
+                            struct snd_soc_dai *dai)
+ {
+@@ -1019,7 +1025,6 @@
+ static struct snd_soc_dai_ops wm9713_dai_ops_voice = {
+       .hw_params      = wm9713_pcm_hw_params,
+-      .shutdown       = wm9713_voiceshutdown,
+       .set_clkdiv     = wm9713_set_dai_clkdiv,
+       .set_pll        = wm9713_set_dai_pll,
+       .set_fmt        = wm9713_set_dai_fmt,
+@@ -1035,13 +1040,13 @@
+               .channels_min = 1,
+               .channels_max = 2,
+               .rates = WM9713_RATES,
+-              .formats = SNDRV_PCM_FMTBIT_S16_LE,},
++              .formats = SND_SOC_STD_AC97_FMTS,},
+       .capture = {
+               .stream_name = "HiFi Capture",
+               .channels_min = 1,
+               .channels_max = 2,
+               .rates = WM9713_RATES,
+-              .formats = SNDRV_PCM_FMTBIT_S16_LE,},
++              .formats = SND_SOC_STD_AC97_FMTS,},
+       .ops = &wm9713_dai_ops_hifi,
+       },
+       {
+@@ -1051,7 +1056,7 @@
+               .channels_min = 1,
+               .channels_max = 1,
+               .rates = WM9713_RATES,
+-              .formats = SNDRV_PCM_FMTBIT_S16_LE,},
++              .formats = SND_SOC_STD_AC97_FMTS,},
+       .ops = &wm9713_dai_ops_aux,
+       },
+       {
+@@ -1069,6 +1074,7 @@
+               .rates = WM9713_PCM_RATES,
+               .formats = WM9713_PCM_FORMATS,},
+       .ops = &wm9713_dai_ops_voice,
++      .symmetric_rates = 1,
+       },
+ };
+ EXPORT_SYMBOL_GPL(wm9713_dai);
+Index: linux-2.6.30/sound/soc/soc-cache.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.30/sound/soc/soc-cache.c 2011-02-01 16:40:30.193007582 +0100
+@@ -0,0 +1,258 @@
++/*
++ * soc-cache.c  --  ASoC register cache helpers
++ *
++ * Copyright 2009 Wolfson Microelectronics PLC.
++ *
++ * Author: Mark Brown <broonie@opensource.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/i2c.h>
++#include <linux/spi/spi.h>
++#include <sound/soc.h>
++
++static unsigned int snd_soc_7_9_read(struct snd_soc_codec *codec,
++                                   unsigned int reg)
++{
++      u16 *cache = codec->reg_cache;
++      if (reg >= codec->reg_cache_size)
++              return -1;
++      return cache[reg];
++}
++
++static int snd_soc_7_9_write(struct snd_soc_codec *codec, unsigned int reg,
++                           unsigned int value)
++{
++      u16 *cache = codec->reg_cache;
++      u8 data[2];
++      int ret;
++
++      BUG_ON(codec->volatile_register);
++
++      data[0] = (reg << 1) | ((value >> 8) & 0x0001);
++      data[1] = value & 0x00ff;
++
++      if (reg < codec->reg_cache_size)
++              cache[reg] = value;
++      ret = codec->hw_write(codec->control_data, data, 2);
++      if (ret == 2)
++              return 0;
++      if (ret < 0)
++              return ret;
++      else
++              return -EIO;
++}
++
++#if defined(CONFIG_SPI_MASTER)
++static int snd_soc_7_9_spi_write(void *control_data, const char *data,
++                               int len)
++{
++      struct spi_device *spi = control_data;
++      struct spi_transfer t;
++      struct spi_message m;
++      u8 msg[2];
++
++      if (len <= 0)
++              return 0;
++
++      msg[0] = data[0];
++      msg[1] = data[1];
++
++      spi_message_init(&m);
++      memset(&t, 0, (sizeof t));
++
++      t.tx_buf = &msg[0];
++      t.len = len;
++
++      spi_message_add_tail(&t, &m);
++      spi_sync(spi, &m);
++
++      return len;
++}
++#else
++#define snd_soc_7_9_spi_write NULL
++#endif
++
++static int snd_soc_8_8_write(struct snd_soc_codec *codec, unsigned int reg,
++                           unsigned int value)
++{
++      u8 *cache = codec->reg_cache;
++      u8 data[2];
++
++      BUG_ON(codec->volatile_register);
++
++      data[0] = reg & 0xff;
++      data[1] = value & 0xff;
++
++      if (reg < codec->reg_cache_size)
++              cache[reg] = value;
++
++      if (codec->hw_write(codec->control_data, data, 2) == 2)
++              return 0;
++      else
++              return -EIO;
++}
++
++static unsigned int snd_soc_8_8_read(struct snd_soc_codec *codec,
++                                   unsigned int reg)
++{
++      u8 *cache = codec->reg_cache;
++      if (reg >= codec->reg_cache_size)
++              return -1;
++      return cache[reg];
++}
++
++static int snd_soc_8_16_write(struct snd_soc_codec *codec, unsigned int reg,
++                            unsigned int value)
++{
++      u16 *reg_cache = codec->reg_cache;
++      u8 data[3];
++
++      data[0] = reg;
++      data[1] = (value >> 8) & 0xff;
++      data[2] = value & 0xff;
++
++      if (!snd_soc_codec_volatile_register(codec, reg))
++              reg_cache[reg] = value;
++
++      if (codec->hw_write(codec->control_data, data, 3) == 3)
++              return 0;
++      else
++              return -EIO;
++}
++
++static unsigned int snd_soc_8_16_read(struct snd_soc_codec *codec,
++                                    unsigned int reg)
++{
++      u16 *cache = codec->reg_cache;
++
++      if (reg >= codec->reg_cache_size ||
++          snd_soc_codec_volatile_register(codec, reg))
++              return codec->hw_read(codec, reg);
++      else
++              return cache[reg];
++}
++
++#if defined(CONFIG_I2C) || (defined(CONFIG_I2C_MODULE) && defined(MODULE))
++static unsigned int snd_soc_8_16_read_i2c(struct snd_soc_codec *codec,
++                                        unsigned int r)
++{
++      struct i2c_msg xfer[2];
++      u8 reg = r;
++      u16 data;
++      int ret;
++      struct i2c_client *client = codec->control_data;
++
++      /* Write register */
++      xfer[0].addr = client->addr;
++      xfer[0].flags = 0;
++      xfer[0].len = 1;
++      xfer[0].buf = &reg;
++
++      /* Read data */
++      xfer[1].addr = client->addr;
++      xfer[1].flags = I2C_M_RD;
++      xfer[1].len = 2;
++      xfer[1].buf = (u8 *)&data;
++
++      ret = i2c_transfer(client->adapter, xfer, 2);
++      if (ret != 2) {
++              dev_err(&client->dev, "i2c_transfer() returned %d\n", ret);
++              return 0;
++      }
++
++      return (data >> 8) | ((data & 0xff) << 8);
++}
++#else
++#define snd_soc_8_16_read_i2c NULL
++#endif
++
++static struct {
++      int addr_bits;
++      int data_bits;
++      int (*write)(struct snd_soc_codec *codec, unsigned int, unsigned int);
++      int (*spi_write)(void *, const char *, int);
++      unsigned int (*read)(struct snd_soc_codec *, unsigned int);
++      unsigned int (*i2c_read)(struct snd_soc_codec *, unsigned int);
++} io_types[] = {
++      {
++              .addr_bits = 7, .data_bits = 9,
++              .write = snd_soc_7_9_write, .read = snd_soc_7_9_read,
++              .spi_write = snd_soc_7_9_spi_write 
++      },
++      {
++              .addr_bits = 8, .data_bits = 8,
++              .write = snd_soc_8_8_write, .read = snd_soc_8_8_read,
++      },
++      {
++              .addr_bits = 8, .data_bits = 16,
++              .write = snd_soc_8_16_write, .read = snd_soc_8_16_read,
++              .i2c_read = snd_soc_8_16_read_i2c,
++      },
++};
++
++/**
++ * snd_soc_codec_set_cache_io: Set up standard I/O functions.
++ *
++ * @codec: CODEC to configure.
++ * @type: Type of cache.
++ * @addr_bits: Number of bits of register address data.
++ * @data_bits: Number of bits of data per register.
++ * @control: Control bus used.
++ *
++ * Register formats are frequently shared between many I2C and SPI
++ * devices.  In order to promote code reuse the ASoC core provides
++ * some standard implementations of CODEC read and write operations
++ * which can be set up using this function.
++ *
++ * The caller is responsible for allocating and initialising the
++ * actual cache.
++ *
++ * Note that at present this code cannot be used by CODECs with
++ * volatile registers.
++ */
++int snd_soc_codec_set_cache_io(struct snd_soc_codec *codec,
++                             int addr_bits, int data_bits,
++                             enum snd_soc_control_type control)
++{
++      int i;
++
++      for (i = 0; i < ARRAY_SIZE(io_types); i++)
++              if (io_types[i].addr_bits == addr_bits &&
++                  io_types[i].data_bits == data_bits)
++                      break;
++      if (i == ARRAY_SIZE(io_types)) {
++              printk(KERN_ERR
++                     "No I/O functions for %d bit address %d bit data\n",
++                     addr_bits, data_bits);
++              return -EINVAL;
++      }
++
++      codec->write = io_types[i].write;
++      codec->read = io_types[i].read;
++
++      switch (control) {
++      case SND_SOC_CUSTOM:
++              break;
++
++      case SND_SOC_I2C:
++#if defined(CONFIG_I2C) || (defined(CONFIG_I2C_MODULE) && defined(MODULE))
++              codec->hw_write = (hw_write_t)i2c_master_send;
++#endif
++              if (io_types[i].i2c_read)
++                      codec->hw_read = io_types[i].i2c_read;
++              break;
++
++      case SND_SOC_SPI:
++              if (io_types[i].spi_write)
++                      codec->hw_write = io_types[i].spi_write;
++              break;
++      }
++
++      return 0;
++}
++EXPORT_SYMBOL_GPL(snd_soc_codec_set_cache_io);
+Index: linux-2.6.30/sound/soc/soc-core.c
+===================================================================
+--- linux-2.6.30.orig/sound/soc/soc-core.c     2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/sound/soc/soc-core.c  2011-02-01 16:40:30.193007582 +0100
+@@ -28,6 +28,7 @@
+ #include <linux/bitops.h>
+ #include <linux/debugfs.h>
+ #include <linux/platform_device.h>
++#include <sound/ac97_codec.h>
+ #include <sound/core.h>
+ #include <sound/pcm.h>
+ #include <sound/pcm_params.h>
+@@ -113,6 +114,35 @@
+ }
+ #endif
++static int soc_pcm_apply_symmetry(struct snd_pcm_substream *substream)
++{
++      struct snd_soc_pcm_runtime *rtd = substream->private_data;
++      struct snd_soc_device *socdev = rtd->socdev;
++      struct snd_soc_card *card = socdev->card;
++      struct snd_soc_dai_link *machine = rtd->dai;
++      struct snd_soc_dai *cpu_dai = machine->cpu_dai;
++      struct snd_soc_dai *codec_dai = machine->codec_dai;
++      int ret;
++
++      if (codec_dai->symmetric_rates || cpu_dai->symmetric_rates ||
++          machine->symmetric_rates) {
++              dev_dbg(card->dev, "Symmetry forces %dHz rate\n", 
++                      machine->rate);
++
++              ret = snd_pcm_hw_constraint_minmax(substream->runtime,
++                                                 SNDRV_PCM_HW_PARAM_RATE,
++                                                 machine->rate,
++                                                 machine->rate);
++              if (ret < 0) {
++                      dev_err(card->dev,
++                              "Unable to apply rate symmetry constraint: %d\n", ret);
++                      return ret;
++              }
++      }
++
++      return 0;
++}
++
+ /*
+  * 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
+@@ -221,6 +251,13 @@
+               goto machine_err;
+       }
++      /* Symmetry only applies if we've already got an active stream. */
++      if (cpu_dai->active || codec_dai->active) {
++              ret = soc_pcm_apply_symmetry(substream);
++              if (ret != 0)
++                      goto machine_err;
++      }
++
+       pr_debug("asoc: %s <-> %s info:\n", codec_dai->name, cpu_dai->name);
+       pr_debug("asoc: rate mask 0x%x\n", runtime->hw.rates);
+       pr_debug("asoc: min ch %d max ch %d\n", runtime->hw.channels_min,
+@@ -263,7 +300,6 @@
+ {
+       struct snd_soc_card *card = container_of(work, struct snd_soc_card,
+                                                delayed_work.work);
+-      struct snd_soc_device *socdev = card->socdev;
+       struct snd_soc_codec *codec = card->codec;
+       struct snd_soc_dai *codec_dai;
+       int i;
+@@ -279,27 +315,10 @@
+               /* are we waiting on this codec DAI stream */
+               if (codec_dai->pop_wait == 1) {
+-
+-                      /* Reduce power if no longer active */
+-                      if (codec->active == 0) {
+-                              pr_debug("pop wq D1 %s %s\n", codec->name,
+-                                       codec_dai->playback.stream_name);
+-                              snd_soc_dapm_set_bias_level(socdev,
+-                                      SND_SOC_BIAS_PREPARE);
+-                      }
+-
+                       codec_dai->pop_wait = 0;
+                       snd_soc_dapm_stream_event(codec,
+                               codec_dai->playback.stream_name,
+                               SND_SOC_DAPM_STREAM_STOP);
+-
+-                      /* Fall into standby if no longer active */
+-                      if (codec->active == 0) {
+-                              pr_debug("pop wq D3 %s %s\n", codec->name,
+-                                       codec_dai->playback.stream_name);
+-                              snd_soc_dapm_set_bias_level(socdev,
+-                                      SND_SOC_BIAS_STANDBY);
+-                      }
+               }
+       }
+       mutex_unlock(&pcm_mutex);
+@@ -363,10 +382,6 @@
+               snd_soc_dapm_stream_event(codec,
+                       codec_dai->capture.stream_name,
+                       SND_SOC_DAPM_STREAM_STOP);
+-
+-              if (codec->active == 0 && codec_dai->pop_wait == 0)
+-                      snd_soc_dapm_set_bias_level(socdev,
+-                                              SND_SOC_BIAS_STANDBY);
+       }
+       mutex_unlock(&pcm_mutex);
+@@ -431,36 +446,16 @@
+               cancel_delayed_work(&card->delayed_work);
+       }
+-      /* do we need to power up codec */
+-      if (codec->bias_level != SND_SOC_BIAS_ON) {
+-              snd_soc_dapm_set_bias_level(socdev,
+-                                          SND_SOC_BIAS_PREPARE);
+-
+-              if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
+-                      snd_soc_dapm_stream_event(codec,
+-                                      codec_dai->playback.stream_name,
+-                                      SND_SOC_DAPM_STREAM_START);
+-              else
+-                      snd_soc_dapm_stream_event(codec,
+-                                      codec_dai->capture.stream_name,
+-                                      SND_SOC_DAPM_STREAM_START);
+-
+-              snd_soc_dapm_set_bias_level(socdev, SND_SOC_BIAS_ON);
+-              snd_soc_dai_digital_mute(codec_dai, 0);
+-
+-      } else {
+-              /* codec already powered - power on widgets */
+-              if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
+-                      snd_soc_dapm_stream_event(codec,
+-                                      codec_dai->playback.stream_name,
+-                                      SND_SOC_DAPM_STREAM_START);
+-              else
+-                      snd_soc_dapm_stream_event(codec,
+-                                      codec_dai->capture.stream_name,
+-                                      SND_SOC_DAPM_STREAM_START);
++      if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
++              snd_soc_dapm_stream_event(codec,
++                                        codec_dai->playback.stream_name,
++                                        SND_SOC_DAPM_STREAM_START);
++      else
++              snd_soc_dapm_stream_event(codec,
++                                        codec_dai->capture.stream_name,
++                                        SND_SOC_DAPM_STREAM_START);
+-              snd_soc_dai_digital_mute(codec_dai, 0);
+-      }
++      snd_soc_dai_digital_mute(codec_dai, 0);
+ out:
+       mutex_unlock(&pcm_mutex);
+@@ -521,6 +516,8 @@
+               }
+       }
++      machine->rate = params_rate(params);
++
+ out:
+       mutex_unlock(&pcm_mutex);
+       return ret;
+@@ -623,8 +620,9 @@
+ #ifdef CONFIG_PM
+ /* powers down audio subsystem for suspend */
+-static int soc_suspend(struct platform_device *pdev, pm_message_t state)
++static int soc_suspend(struct device *dev)
+ {
++      struct platform_device *pdev = to_platform_device(dev);
+       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
+       struct snd_soc_card *card = socdev->card;
+       struct snd_soc_platform *platform = card->platform;
+@@ -632,6 +630,12 @@
+       struct snd_soc_codec *codec = card->codec;
+       int i;
++      /* If the initialization of this soc device failed, there is no codec
++       * associated with it. Just bail out in this case.
++       */
++      if (!codec)
++              return 0;
++
+       /* Due to the resume being scheduled into a workqueue we could
+       * suspend before that's finished - wait for it to complete.
+        */
+@@ -654,7 +658,7 @@
+               snd_pcm_suspend_all(card->dai_link[i].pcm);
+       if (card->suspend_pre)
+-              card->suspend_pre(pdev, state);
++              card->suspend_pre(pdev, PMSG_SUSPEND);
+       for (i = 0; i < card->num_links; i++) {
+               struct snd_soc_dai  *cpu_dai = card->dai_link[i].cpu_dai;
+@@ -680,7 +684,7 @@
+       }
+       if (codec_dev->suspend)
+-              codec_dev->suspend(pdev, state);
++              codec_dev->suspend(pdev, PMSG_SUSPEND);
+       for (i = 0; i < card->num_links; i++) {
+               struct snd_soc_dai *cpu_dai = card->dai_link[i].cpu_dai;
+@@ -689,7 +693,7 @@
+       }
+       if (card->suspend_post)
+-              card->suspend_post(pdev, state);
++              card->suspend_post(pdev, PMSG_SUSPEND);
+       return 0;
+ }
+@@ -763,8 +767,9 @@
+ }
+ /* powers up audio subsystem after a suspend */
+-static int soc_resume(struct platform_device *pdev)
++static int soc_resume(struct device *dev)
+ {
++      struct platform_device *pdev = to_platform_device(dev);
+       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
+       struct snd_soc_card *card = socdev->card;
+       struct snd_soc_dai *cpu_dai = card->dai_link[0].cpu_dai;
+@@ -786,6 +791,44 @@
+       return 0;
+ }
++/**
++ * snd_soc_suspend_device: Notify core of device suspend
++ *
++ * @dev: Device being suspended.
++ *
++ * In order to ensure that the entire audio subsystem is suspended in a
++ * coordinated fashion ASoC devices should suspend themselves when
++ * called by ASoC.  When the standard kernel suspend process asks the
++ * device to suspend it should call this function to initiate a suspend
++ * of the entire ASoC card.
++ *
++ * \note Currently this function is stubbed out.
++ */
++int snd_soc_suspend_device(struct device *dev)
++{
++      return 0;
++}
++EXPORT_SYMBOL_GPL(snd_soc_suspend_device);
++
++/**
++ * snd_soc_resume_device: Notify core of device resume
++ *
++ * @dev: Device being resumed.
++ *
++ * In order to ensure that the entire audio subsystem is resumed in a
++ * coordinated fashion ASoC devices should resume themselves when called
++ * by ASoC.  When the standard kernel resume process asks the device
++ * to resume it should call this function.  Once all the components of
++ * the card have notified that they are ready to be resumed the card
++ * will be resumed.
++ *
++ * \note Currently this function is stubbed out.
++ */
++int snd_soc_resume_device(struct device *dev)
++{
++      return 0;
++}
++EXPORT_SYMBOL_GPL(snd_soc_resume_device);
+ #else
+ #define soc_suspend   NULL
+ #define soc_resume    NULL
+@@ -979,16 +1022,39 @@
+       return 0;
+ }
++static int soc_poweroff(struct device *dev)
++{
++      struct platform_device *pdev = to_platform_device(dev);
++      struct snd_soc_device *socdev = platform_get_drvdata(pdev);
++      struct snd_soc_card *card = socdev->card;
++
++      if (!card->instantiated)
++              return 0;
++
++      /* Flush out pmdown_time work - we actually do want to run it
++       * now, we're shutting down so no imminent restart. */
++      run_delayed_work(&card->delayed_work);
++
++      snd_soc_dapm_shutdown(socdev);
++
++      return 0;
++}
++
++static struct dev_pm_ops soc_pm_ops = {
++      .suspend = soc_suspend,
++      .resume = soc_resume,
++      .poweroff = soc_poweroff,
++};
++
+ /* ASoC platform driver */
+ static struct platform_driver soc_driver = {
+       .driver         = {
+               .name           = "soc-audio",
+               .owner          = THIS_MODULE,
++              .pm             = &soc_pm_ops,
+       },
+       .probe          = soc_probe,
+       .remove         = soc_remove,
+-      .suspend        = soc_suspend,
+-      .resume         = soc_resume,
+ };
+ /* create a new pcm */
+@@ -1060,6 +1126,23 @@
+       return ret;
+ }
++/**
++ * snd_soc_codec_volatile_register: Report if a register is volatile.
++ *
++ * @codec: CODEC to query.
++ * @reg: Register to query.
++ *
++ * Boolean function indiciating if a CODEC register is volatile.
++ */
++int snd_soc_codec_volatile_register(struct snd_soc_codec *codec, int reg)
++{
++      if (codec->volatile_register)
++              return codec->volatile_register(reg);
++      else
++              return 0;
++}
++EXPORT_SYMBOL_GPL(snd_soc_codec_volatile_register);
++
+ /* codec register dump */
+ static ssize_t soc_codec_reg_show(struct snd_soc_codec *codec, char *buf)
+ {
+@@ -1073,6 +1156,9 @@
+       count += sprintf(buf, "%s registers\n", codec->name);
+       for (i = 0; i < codec->reg_cache_size; i += step) {
++              if (codec->readable_register && !codec->readable_register(i))
++                      continue;
++
+               count += sprintf(buf + count, "%2x: ", i);
+               if (count >= PAGE_SIZE - 1)
+                       break;
+@@ -1168,25 +1254,49 @@
+ static void soc_init_codec_debugfs(struct snd_soc_codec *codec)
+ {
++      char codec_root[128];
++
++      if (codec->dev)
++              snprintf(codec_root, sizeof(codec_root),
++                      "%s.%s", codec->name, dev_name(codec->dev));
++      else
++              snprintf(codec_root, sizeof(codec_root),
++                      "%s", codec->name);
++
++      codec->debugfs_codec_root = debugfs_create_dir(codec_root,
++                                                     debugfs_root);
++      if (!codec->debugfs_codec_root) {
++              printk(KERN_WARNING
++                     "ASoC: Failed to create codec debugfs directory\n");
++              return;
++      }
++
+       codec->debugfs_reg = debugfs_create_file("codec_reg", 0644,
+-                                               debugfs_root, codec,
+-                                               &codec_reg_fops);
++                                               codec->debugfs_codec_root,
++                                               codec, &codec_reg_fops);
+       if (!codec->debugfs_reg)
+               printk(KERN_WARNING
+                      "ASoC: Failed to create codec register debugfs file\n");
+       codec->debugfs_pop_time = debugfs_create_u32("dapm_pop_time", 0744,
+-                                                   debugfs_root,
++                                                   codec->debugfs_codec_root,
+                                                    &codec->pop_time);
+       if (!codec->debugfs_pop_time)
+               printk(KERN_WARNING
+                      "Failed to create pop time debugfs file\n");
++
++      codec->debugfs_dapm = debugfs_create_dir("dapm",
++                                               codec->debugfs_codec_root);
++      if (!codec->debugfs_dapm)
++              printk(KERN_WARNING
++                     "Failed to create DAPM debugfs directory\n");
++
++      snd_soc_dapm_debugfs_init(codec);
+ }
+ static void soc_cleanup_codec_debugfs(struct snd_soc_codec *codec)
+ {
+-      debugfs_remove(codec->debugfs_pop_time);
+-      debugfs_remove(codec->debugfs_reg);
++      debugfs_remove_recursive(codec->debugfs_codec_root);
+ }
+ #else
+@@ -1262,10 +1372,10 @@
+  * 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)
++                              unsigned int mask, unsigned int value)
+ {
+       int change;
+-      unsigned short old, new;
++      unsigned int old, new;
+       mutex_lock(&io_mutex);
+       old = snd_soc_read(codec, reg);
+@@ -1292,10 +1402,10 @@
+  * 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)
++                              unsigned int mask, unsigned int value)
+ {
+       int change;
+-      unsigned short old, new;
++      unsigned int old, new;
+       mutex_lock(&io_mutex);
+       old = snd_soc_read(codec, reg);
+@@ -1334,6 +1444,7 @@
+               return ret;
+       }
++      codec->socdev = socdev;
+       codec->card->dev = socdev->dev;
+       codec->card->private_data = codec;
+       strncpy(codec->card->driver, codec->name, sizeof(codec->card->driver));
+@@ -1378,14 +1489,20 @@
+                               continue;
+                       }
+               }
+-              if (card->dai_link[i].codec_dai->ac97_control)
++              if (card->dai_link[i].codec_dai->ac97_control) {
+                       ac97 = 1;
++                      snd_ac97_dev_add_pdata(codec->ac97,
++                              card->dai_link[i].cpu_dai->ac97_pdata);
++              }
+       }
+       snprintf(codec->card->shortname, sizeof(codec->card->shortname),
+                "%s",  card->name);
+       snprintf(codec->card->longname, sizeof(codec->card->longname),
+                "%s (%s)", card->name, codec->name);
++      /* Make sure all DAPM widgets are instantiated */
++      snd_soc_dapm_new_widgets(codec);
++
+       ret = snd_card_register(codec->card);
+       if (ret < 0) {
+               printk(KERN_ERR "asoc: failed to register soundcard for %s\n",
+@@ -1580,7 +1697,7 @@
+ {
+       struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+       struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
+-      unsigned short val, bitmask;
++      unsigned int val, bitmask;
+       for (bitmask = 1; bitmask < e->max; bitmask <<= 1)
+               ;
+@@ -1609,8 +1726,8 @@
+ {
+       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;
++      unsigned int val;
++      unsigned int mask, bitmask;
+       for (bitmask = 1; bitmask < e->max; bitmask <<= 1)
+               ;
+@@ -1646,7 +1763,7 @@
+ {
+       struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+       struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
+-      unsigned short reg_val, val, mux;
++      unsigned int reg_val, val, mux;
+       reg_val = snd_soc_read(codec, e->reg);
+       val = (reg_val >> e->shift_l) & e->mask;
+@@ -1685,8 +1802,8 @@
+ {
+       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;
++      unsigned int val;
++      unsigned int mask;
+       if (ucontrol->value.enumerated.item[0] > e->max - 1)
+               return -EINVAL;
+@@ -1744,7 +1861,7 @@
+ {
+       int max = kcontrol->private_value;
+-      if (max == 1)
++      if (max == 1 && !strstr(kcontrol->id.name, " Volume"))
+               uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
+       else
+               uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
+@@ -1774,7 +1891,7 @@
+       unsigned int shift = mc->shift;
+       unsigned int rshift = mc->rshift;
+-      if (max == 1)
++      if (max == 1 && !strstr(kcontrol->id.name, " Volume"))
+               uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
+       else
+               uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
+@@ -1846,7 +1963,7 @@
+       int max = mc->max;
+       unsigned int mask = (1 << fls(max)) - 1;
+       unsigned int invert = mc->invert;
+-      unsigned short val, val2, val_mask;
++      unsigned int val, val2, val_mask;
+       val = (ucontrol->value.integer.value[0] & mask);
+       if (invert)
+@@ -1881,7 +1998,7 @@
+               (struct soc_mixer_control *)kcontrol->private_value;
+       int max = mc->max;
+-      if (max == 1)
++      if (max == 1 && !strstr(kcontrol->id.name, " Volume"))
+               uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
+       else
+               uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
+@@ -1912,7 +2029,7 @@
+       unsigned int reg2 = mc->rreg;
+       unsigned int shift = mc->shift;
+       int max = mc->max;
+-      unsigned int mask = (1<<fls(max))-1;
++      unsigned int mask = (1 << fls(max)) - 1;
+       unsigned int invert = mc->invert;
+       ucontrol->value.integer.value[0] =
+@@ -1952,7 +2069,7 @@
+       unsigned int mask = (1 << fls(max)) - 1;
+       unsigned int invert = mc->invert;
+       int err;
+-      unsigned short val, val2, val_mask;
++      unsigned int val, val2, val_mask;
+       val_mask = mask << shift;
+       val = (ucontrol->value.integer.value[0] & mask);
+@@ -2044,7 +2161,7 @@
+       struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+       unsigned int reg = mc->reg;
+       int min = mc->min;
+-      unsigned short val;
++      unsigned int val;
+       val = (ucontrol->value.integer.value[0]+min) & 0xff;
+       val |= ((ucontrol->value.integer.value[1]+min) & 0xff) << 8;
+@@ -2065,7 +2182,7 @@
+ int snd_soc_dai_set_sysclk(struct snd_soc_dai *dai, int clk_id,
+       unsigned int freq, int dir)
+ {
+-      if (dai->ops->set_sysclk)
++      if (dai->ops && dai->ops->set_sysclk)
+               return dai->ops->set_sysclk(dai, clk_id, freq, dir);
+       else
+               return -EINVAL;
+@@ -2085,7 +2202,7 @@
+ int snd_soc_dai_set_clkdiv(struct snd_soc_dai *dai,
+       int div_id, int div)
+ {
+-      if (dai->ops->set_clkdiv)
++      if (dai->ops && dai->ops->set_clkdiv)
+               return dai->ops->set_clkdiv(dai, div_id, div);
+       else
+               return -EINVAL;
+@@ -2096,16 +2213,18 @@
+  * snd_soc_dai_set_pll - configure DAI PLL.
+  * @dai: DAI
+  * @pll_id: DAI specific PLL ID
++ * @source: DAI specific source for the PLL
+  * @freq_in: PLL input clock frequency in Hz
+  * @freq_out: requested PLL output clock frequency in Hz
+  *
+  * Configures and enables PLL to generate output clock based on input clock.
+  */
+-int snd_soc_dai_set_pll(struct snd_soc_dai *dai,
+-      int pll_id, unsigned int freq_in, unsigned int freq_out)
++int snd_soc_dai_set_pll(struct snd_soc_dai *dai, int pll_id, int source,
++      unsigned int freq_in, unsigned int freq_out)
+ {
+-      if (dai->ops->set_pll)
+-              return dai->ops->set_pll(dai, pll_id, freq_in, freq_out);
++      if (dai->ops && dai->ops->set_pll)
++              return dai->ops->set_pll(dai, pll_id, source,
++                                       freq_in, freq_out);
+       else
+               return -EINVAL;
+ }
+@@ -2120,7 +2239,7 @@
+  */
+ int snd_soc_dai_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
+ {
+-      if (dai->ops->set_fmt)
++      if (dai->ops && dai->ops->set_fmt)
+               return dai->ops->set_fmt(dai, fmt);
+       else
+               return -EINVAL;
+@@ -2130,23 +2249,50 @@
+ /**
+  * snd_soc_dai_set_tdm_slot - configure DAI TDM.
+  * @dai: DAI
+- * @mask: DAI specific mask representing used slots.
++ * @tx_mask: bitmask representing active TX slots.
++ * @rx_mask: bitmask representing active RX slots.
+  * @slots: Number of slots in use.
++ * @slot_width: Width in bits for each slot.
+  *
+  * Configures a DAI for TDM operation. Both mask and slots are codec and DAI
+  * specific.
+  */
+ int snd_soc_dai_set_tdm_slot(struct snd_soc_dai *dai,
+-      unsigned int mask, int slots)
++      unsigned int tx_mask, unsigned int rx_mask, int slots, int slot_width)
+ {
+-      if (dai->ops->set_sysclk)
+-              return dai->ops->set_tdm_slot(dai, mask, slots);
++      if (dai->ops && dai->ops->set_tdm_slot)
++              return dai->ops->set_tdm_slot(dai, tx_mask, rx_mask,
++                              slots, slot_width);
+       else
+               return -EINVAL;
+ }
+ EXPORT_SYMBOL_GPL(snd_soc_dai_set_tdm_slot);
+ /**
++ * snd_soc_dai_set_channel_map - configure DAI audio channel map
++ * @dai: DAI
++ * @tx_num: how many TX channels
++ * @tx_slot: pointer to an array which imply the TX slot number channel
++ *           0~num-1 uses
++ * @rx_num: how many RX channels
++ * @rx_slot: pointer to an array which imply the RX slot number channel
++ *           0~num-1 uses
++ *
++ * configure the relationship between channel number and TDM slot number.
++ */
++int snd_soc_dai_set_channel_map(struct snd_soc_dai *dai,
++      unsigned int tx_num, unsigned int *tx_slot,
++      unsigned int rx_num, unsigned int *rx_slot)
++{
++      if (dai->ops && dai->ops->set_channel_map)
++              return dai->ops->set_channel_map(dai, tx_num, tx_slot,
++                      rx_num, rx_slot);
++      else
++              return -EINVAL;
++}
++EXPORT_SYMBOL_GPL(snd_soc_dai_set_channel_map);
++
++/**
+  * snd_soc_dai_set_tristate - configure DAI system or master clock.
+  * @dai: DAI
+  * @tristate: tristate enable
+@@ -2155,7 +2301,7 @@
+  */
+ int snd_soc_dai_set_tristate(struct snd_soc_dai *dai, int tristate)
+ {
+-      if (dai->ops->set_sysclk)
++      if (dai->ops && dai->ops->set_tristate)
+               return dai->ops->set_tristate(dai, tristate);
+       else
+               return -EINVAL;
+@@ -2171,7 +2317,7 @@
+  */
+ int snd_soc_dai_digital_mute(struct snd_soc_dai *dai, int mute)
+ {
+-      if (dai->ops->digital_mute)
++      if (dai->ops && dai->ops->digital_mute)
+               return dai->ops->digital_mute(dai, mute);
+       else
+               return -EINVAL;
+@@ -2352,6 +2498,39 @@
+ }
+ EXPORT_SYMBOL_GPL(snd_soc_unregister_platform);
++static u64 codec_format_map[] = {
++      SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S16_BE,
++      SNDRV_PCM_FMTBIT_U16_LE | SNDRV_PCM_FMTBIT_U16_BE,
++      SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S24_BE,
++      SNDRV_PCM_FMTBIT_U24_LE | SNDRV_PCM_FMTBIT_U24_BE,
++      SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_S32_BE,
++      SNDRV_PCM_FMTBIT_U32_LE | SNDRV_PCM_FMTBIT_U32_BE,
++      SNDRV_PCM_FMTBIT_S24_3LE | SNDRV_PCM_FMTBIT_U24_3BE,
++      SNDRV_PCM_FMTBIT_U24_3LE | SNDRV_PCM_FMTBIT_U24_3BE,
++      SNDRV_PCM_FMTBIT_S20_3LE | SNDRV_PCM_FMTBIT_S20_3BE,
++      SNDRV_PCM_FMTBIT_U20_3LE | SNDRV_PCM_FMTBIT_U20_3BE,
++      SNDRV_PCM_FMTBIT_S18_3LE | SNDRV_PCM_FMTBIT_S18_3BE,
++      SNDRV_PCM_FMTBIT_U18_3LE | SNDRV_PCM_FMTBIT_U18_3BE,
++      SNDRV_PCM_FMTBIT_FLOAT_LE | SNDRV_PCM_FMTBIT_FLOAT_BE,
++      SNDRV_PCM_FMTBIT_FLOAT64_LE | SNDRV_PCM_FMTBIT_FLOAT64_BE,
++      SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_LE
++      | SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_BE,
++};
++
++/* Fix up the DAI formats for endianness: codecs don't actually see
++ * the endianness of the data but we're using the CPU format
++ * definitions which do need to include endianness so we ensure that
++ * codec DAIs always have both big and little endian variants set.
++ */
++static void fixup_codec_formats(struct snd_soc_pcm_stream *stream)
++{
++      int i;
++
++      for (i = 0; i < ARRAY_SIZE(codec_format_map); i++)
++              if (stream->formats & codec_format_map[i])
++                      stream->formats |= codec_format_map[i];
++}
++
+ /**
+  * snd_soc_register_codec - Register a codec with the ASoC core
+  *
+@@ -2359,6 +2538,8 @@
+  */
+ int snd_soc_register_codec(struct snd_soc_codec *codec)
+ {
++      int i;
++
+       if (!codec->name)
+               return -EINVAL;
+@@ -2368,6 +2549,11 @@
+       INIT_LIST_HEAD(&codec->list);
++      for (i = 0; i < codec->num_dai; i++) {
++              fixup_codec_formats(&codec->dai[i].playback);
++              fixup_codec_formats(&codec->dai[i].capture);
++      }
++
+       mutex_lock(&client_mutex);
+       list_add(&codec->list, &codec_list);
+       snd_soc_instantiate_cards();
+Index: linux-2.6.30/sound/soc/soc-dapm.c
+===================================================================
+--- linux-2.6.30.orig/sound/soc/soc-dapm.c     2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/sound/soc/soc-dapm.c  2011-02-01 16:40:30.193007582 +0100
+@@ -12,7 +12,7 @@
+  *  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.
++ *      DACs/ADCs.
+  *    o Platform power domain - can support external components i.e. amps and
+  *      mic/meadphone insertion events.
+  *    o Automatic Mic Bias support
+@@ -37,6 +37,7 @@
+ #include <linux/bitops.h>
+ #include <linux/platform_device.h>
+ #include <linux/jiffies.h>
++#include <linux/debugfs.h>
+ #include <sound/core.h>
+ #include <sound/pcm.h>
+ #include <sound/pcm_params.h>
+@@ -52,23 +53,43 @@
+ /* 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_value_mux, snd_soc_dapm_dac,
+-      snd_soc_dapm_mixer, snd_soc_dapm_mixer_named_ctl, snd_soc_dapm_pga,
+-      snd_soc_dapm_adc, snd_soc_dapm_hp, snd_soc_dapm_spk, snd_soc_dapm_post
++      [snd_soc_dapm_pre] = 0,
++      [snd_soc_dapm_supply] = 1,
++      [snd_soc_dapm_micbias] = 2,
++      [snd_soc_dapm_aif_in] = 3,
++      [snd_soc_dapm_aif_out] = 3,
++      [snd_soc_dapm_mic] = 4,
++      [snd_soc_dapm_mux] = 5,
++      [snd_soc_dapm_value_mux] = 5,
++      [snd_soc_dapm_dac] = 6,
++      [snd_soc_dapm_mixer] = 7,
++      [snd_soc_dapm_mixer_named_ctl] = 7,
++      [snd_soc_dapm_pga] = 8,
++      [snd_soc_dapm_adc] = 9,
++      [snd_soc_dapm_hp] = 10,
++      [snd_soc_dapm_spk] = 10,
++      [snd_soc_dapm_post] = 11,
+ };
+ 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_named_ctl, snd_soc_dapm_mixer,
+-      snd_soc_dapm_dac, snd_soc_dapm_mic, snd_soc_dapm_micbias,
+-      snd_soc_dapm_mux, snd_soc_dapm_value_mux, snd_soc_dapm_post
++      [snd_soc_dapm_pre] = 0,
++      [snd_soc_dapm_adc] = 1,
++      [snd_soc_dapm_hp] = 2,
++      [snd_soc_dapm_spk] = 2,
++      [snd_soc_dapm_pga] = 4,
++      [snd_soc_dapm_mixer_named_ctl] = 5,
++      [snd_soc_dapm_mixer] = 5,
++      [snd_soc_dapm_dac] = 6,
++      [snd_soc_dapm_mic] = 7,
++      [snd_soc_dapm_micbias] = 8,
++      [snd_soc_dapm_mux] = 9,
++      [snd_soc_dapm_value_mux] = 9,
++      [snd_soc_dapm_aif_in] = 10,
++      [snd_soc_dapm_aif_out] = 10,
++      [snd_soc_dapm_supply] = 11,
++      [snd_soc_dapm_post] = 12,
+ };
+-static int dapm_status = 1;
+-module_param(dapm_status, int, 0);
+-MODULE_PARM_DESC(dapm_status, "enable DPM sysfs entries");
+-
+ static void pop_wait(u32 pop_time)
+ {
+       if (pop_time)
+@@ -96,6 +117,52 @@
+       return kmemdup(_widget, sizeof(*_widget), GFP_KERNEL);
+ }
++/**
++ * snd_soc_dapm_set_bias_level - set the bias level for the system
++ * @socdev: audio device
++ * @level: level to configure
++ *
++ * Configure the bias (power) levels for the SoC audio device.
++ *
++ * Returns 0 for success else error.
++ */
++static int snd_soc_dapm_set_bias_level(struct snd_soc_device *socdev,
++                                     enum snd_soc_bias_level level)
++{
++      struct snd_soc_card *card = socdev->card;
++      struct snd_soc_codec *codec = socdev->card->codec;
++      int ret = 0;
++
++      switch (level) {
++      case SND_SOC_BIAS_ON:
++              dev_dbg(socdev->dev, "Setting full bias\n");
++              break;
++      case SND_SOC_BIAS_PREPARE:
++              dev_dbg(socdev->dev, "Setting bias prepare\n");
++              break;
++      case SND_SOC_BIAS_STANDBY:
++              dev_dbg(socdev->dev, "Setting standby bias\n");
++              break;
++      case SND_SOC_BIAS_OFF:
++              dev_dbg(socdev->dev, "Setting bias off\n");
++              break;
++      default:
++              dev_err(socdev->dev, "Setting invalid bias %d\n", level);
++              return -EINVAL;
++      }
++
++      if (card->set_bias_level)
++              ret = card->set_bias_level(card, level);
++      if (ret == 0) {
++              if (codec->set_bias_level)
++                      ret = codec->set_bias_level(codec, level);
++              else
++                      codec->bias_level = level;
++      }
++
++      return ret;
++}
++
+ /* 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)
+@@ -165,6 +232,9 @@
+       case snd_soc_dapm_dac:
+       case snd_soc_dapm_micbias:
+       case snd_soc_dapm_vmid:
++      case snd_soc_dapm_supply:
++      case snd_soc_dapm_aif_in:
++      case snd_soc_dapm_aif_out:
+               p->connect = 1;
+       break;
+       /* does effect routing - dynamically connected */
+@@ -179,7 +249,7 @@
+       }
+ }
+-/* connect mux widget to it's interconnecting audio paths */
++/* connect mux widget to its 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,
+@@ -202,7 +272,7 @@
+       return -ENODEV;
+ }
+-/* connect mixer widget to it's interconnecting audio paths */
++/* connect mixer widget to its 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)
+@@ -227,7 +297,7 @@
+ static int dapm_update_bits(struct snd_soc_dapm_widget *widget)
+ {
+       int change, power;
+-      unsigned short old, new;
++      unsigned int old, new;
+       struct snd_soc_codec *codec = widget->codec;
+       /* check for valid widgets */
+@@ -357,8 +427,9 @@
+                               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);
++                              printk(KERN_ERR "asoc: failed to add dapm kcontrol %s: %d\n",
++                                     path->long_name,
++                                     ret);
+                               kfree(path->long_name);
+                               path->long_name = NULL;
+                               return ret;
+@@ -434,8 +505,17 @@
+       struct snd_soc_dapm_path *path;
+       int con = 0;
+-      if (widget->id == snd_soc_dapm_adc && widget->active)
+-              return 1;
++      if (widget->id == snd_soc_dapm_supply)
++              return 0;
++
++      switch (widget->id) {
++      case snd_soc_dapm_adc:
++      case snd_soc_dapm_aif_out:
++              if (widget->active)
++                      return 1;
++      default:
++              break;
++      }
+       if (widget->connected) {
+               /* connected pin ? */
+@@ -444,7 +524,7 @@
+               /* connected jack or spk ? */
+               if (widget->id == snd_soc_dapm_hp || widget->id == snd_soc_dapm_spk ||
+-                      widget->id == snd_soc_dapm_line)
++                  (widget->id == snd_soc_dapm_line && !list_empty(&widget->sources)))
+                       return 1;
+       }
+@@ -470,9 +550,18 @@
+       struct snd_soc_dapm_path *path;
+       int con = 0;
++      if (widget->id == snd_soc_dapm_supply)
++              return 0;
++
+       /* active stream ? */
+-      if (widget->id == snd_soc_dapm_dac && widget->active)
+-              return 1;
++      switch (widget->id) {
++      case snd_soc_dapm_dac:
++      case snd_soc_dapm_aif_in:
++              if (widget->active)
++                      return 1;
++      default:
++              break;
++      }
+       if (widget->connected) {
+               /* connected pin ? */
+@@ -484,7 +573,8 @@
+                       return 1;
+               /* connected jack ? */
+-              if (widget->id == snd_soc_dapm_mic || widget->id == snd_soc_dapm_line)
++              if (widget->id == snd_soc_dapm_mic ||
++                  (widget->id == snd_soc_dapm_line && !list_empty(&widget->sinks)))
+                       return 1;
+       }
+@@ -521,84 +611,12 @@
+ }
+ EXPORT_SYMBOL_GPL(dapm_reg_event);
+-/*
+- * Scan a single DAPM widget for a complete audio path and update the
+- * power status appropriately.
++/* Standard power change method, used to apply power changes to most
++ * widgets.
+  */
+-static int dapm_power_widget(struct snd_soc_codec *codec, int event,
+-                           struct snd_soc_dapm_widget *w)
++static int dapm_generic_apply_power(struct snd_soc_dapm_widget *w)
+ {
+-      int in, out, power_change, power, ret;
+-
+-      /* vmid - no action */
+-      if (w->id == snd_soc_dapm_vmid)
+-              return 0;
+-
+-      /* 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);
+-              return 0;
+-      }
+-
+-      /* 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);
+-              return 0;
+-      }
+-
+-      /* pre and post event widgets */
+-      if (w->id == snd_soc_dapm_pre) {
+-              if (!w->event)
+-                      return 0;
+-
+-              if (event == SND_SOC_DAPM_STREAM_START) {
+-                      ret = w->event(w,
+-                                     NULL, SND_SOC_DAPM_PRE_PMU);
+-                      if (ret < 0)
+-                              return ret;
+-              } else if (event == SND_SOC_DAPM_STREAM_STOP) {
+-                      ret = w->event(w,
+-                                     NULL, SND_SOC_DAPM_PRE_PMD);
+-                      if (ret < 0)
+-                              return ret;
+-              }
+-              return 0;
+-      }
+-      if (w->id == snd_soc_dapm_post) {
+-              if (!w->event)
+-                      return 0;
+-
+-              if (event == SND_SOC_DAPM_STREAM_START) {
+-                      ret = w->event(w,
+-                                     NULL, SND_SOC_DAPM_POST_PMU);
+-                      if (ret < 0)
+-                              return ret;
+-              } else if (event == SND_SOC_DAPM_STREAM_STOP) {
+-                      ret = w->event(w,
+-                                     NULL, SND_SOC_DAPM_POST_PMD);
+-                      if (ret < 0)
+-                              return ret;
+-              }
+-              return 0;
+-      }
+-
+-      /* 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;
+-
+-      if (!power_change)
+-              return 0;
++      int ret;
+       /* call any power change event handlers */
+       if (w->event)
+@@ -607,7 +625,7 @@
+                        w->name, w->event_flags);
+       /* power up pre event */
+-      if (power && w->event &&
++      if (w->power && w->event &&
+           (w->event_flags & SND_SOC_DAPM_PRE_PMU)) {
+               ret = w->event(w, NULL, SND_SOC_DAPM_PRE_PMU);
+               if (ret < 0)
+@@ -615,7 +633,7 @@
+       }
+       /* power down pre event */
+-      if (!power && w->event &&
++      if (!w->power && w->event &&
+           (w->event_flags & SND_SOC_DAPM_PRE_PMD)) {
+               ret = w->event(w, NULL, SND_SOC_DAPM_PRE_PMD);
+               if (ret < 0)
+@@ -623,17 +641,17 @@
+       }
+       /* Lower PGA volume to reduce pops */
+-      if (w->id == snd_soc_dapm_pga && !power)
+-              dapm_set_pga(w, power);
++      if (w->id == snd_soc_dapm_pga && !w->power)
++              dapm_set_pga(w, w->power);
+       dapm_update_bits(w);
+       /* Raise PGA volume to reduce pops */
+-      if (w->id == snd_soc_dapm_pga && power)
+-              dapm_set_pga(w, power);
++      if (w->id == snd_soc_dapm_pga && w->power)
++              dapm_set_pga(w, w->power);
+       /* power up post event */
+-      if (power && w->event &&
++      if (w->power && w->event &&
+           (w->event_flags & SND_SOC_DAPM_POST_PMU)) {
+               ret = w->event(w,
+                              NULL, SND_SOC_DAPM_POST_PMU);
+@@ -642,7 +660,7 @@
+       }
+       /* power down post event */
+-      if (!power && w->event &&
++      if (!w->power && w->event &&
+           (w->event_flags & SND_SOC_DAPM_POST_PMD)) {
+               ret = w->event(w, NULL, SND_SOC_DAPM_POST_PMD);
+               if (ret < 0)
+@@ -652,6 +670,278 @@
+       return 0;
+ }
++/* Generic check to see if a widget should be powered.
++ */
++static int dapm_generic_check_power(struct snd_soc_dapm_widget *w)
++{
++      int in, out;
++
++      in = is_connected_input_ep(w);
++      dapm_clear_walk(w->codec);
++      out = is_connected_output_ep(w);
++      dapm_clear_walk(w->codec);
++      return out != 0 && in != 0;
++}
++
++/* Check to see if an ADC has power */
++static int dapm_adc_check_power(struct snd_soc_dapm_widget *w)
++{
++      int in;
++
++      if (w->active) {
++              in = is_connected_input_ep(w);
++              dapm_clear_walk(w->codec);
++              return in != 0;
++      } else {
++              return dapm_generic_check_power(w);
++      }
++}
++
++/* Check to see if a DAC has power */
++static int dapm_dac_check_power(struct snd_soc_dapm_widget *w)
++{
++      int out;
++
++      if (w->active) {
++              out = is_connected_output_ep(w);
++              dapm_clear_walk(w->codec);
++              return out != 0;
++      } else {
++              return dapm_generic_check_power(w);
++      }
++}
++
++/* Check to see if a power supply is needed */
++static int dapm_supply_check_power(struct snd_soc_dapm_widget *w)
++{
++      struct snd_soc_dapm_path *path;
++      int power = 0;
++
++      /* Check if one of our outputs is connected */
++      list_for_each_entry(path, &w->sinks, list_source) {
++              if (path->connected &&
++                  !path->connected(path->source, path->sink))
++                      continue;
++
++              if (path->sink && path->sink->power_check &&
++                  path->sink->power_check(path->sink)) {
++                      power = 1;
++                      break;
++              }
++      }
++
++      dapm_clear_walk(w->codec);
++
++      return power;
++}
++
++static int dapm_seq_compare(struct snd_soc_dapm_widget *a,
++                          struct snd_soc_dapm_widget *b,
++                          int sort[])
++{
++      if (sort[a->id] != sort[b->id])
++              return sort[a->id] - sort[b->id];
++      if (a->reg != b->reg)
++              return a->reg - b->reg;
++
++      return 0;
++}
++
++/* Insert a widget in order into a DAPM power sequence. */
++static void dapm_seq_insert(struct snd_soc_dapm_widget *new_widget,
++                          struct list_head *list,
++                          int sort[])
++{
++      struct snd_soc_dapm_widget *w;
++
++      list_for_each_entry(w, list, power_list)
++              if (dapm_seq_compare(new_widget, w, sort) < 0) {
++                      list_add_tail(&new_widget->power_list, &w->power_list);
++                      return;
++              }
++
++      list_add_tail(&new_widget->power_list, list);
++}
++
++/* Apply the coalesced changes from a DAPM sequence */
++static void dapm_seq_run_coalesced(struct snd_soc_codec *codec,
++                                 struct list_head *pending)
++{
++      struct snd_soc_dapm_widget *w;
++      int reg, power, ret;
++      unsigned int value = 0;
++      unsigned int mask = 0;
++      unsigned int cur_mask;
++
++      reg = list_first_entry(pending, struct snd_soc_dapm_widget,
++                             power_list)->reg;
++
++      list_for_each_entry(w, pending, power_list) {
++              cur_mask = 1 << w->shift;
++              BUG_ON(reg != w->reg);
++
++              if (w->invert)
++                      power = !w->power;
++              else
++                      power = w->power;
++
++              mask |= cur_mask;
++              if (power)
++                      value |= cur_mask;
++
++              pop_dbg(codec->pop_time,
++                      "pop test : Queue %s: reg=0x%x, 0x%x/0x%x\n",
++                      w->name, reg, value, mask);
++
++              /* power up pre event */
++              if (w->power && w->event &&
++                  (w->event_flags & SND_SOC_DAPM_PRE_PMU)) {
++                      pop_dbg(codec->pop_time, "pop test : %s PRE_PMU\n",
++                              w->name);
++                      ret = w->event(w, NULL, SND_SOC_DAPM_PRE_PMU);
++                      if (ret < 0)
++                              pr_err("%s: pre event failed: %d\n",
++                                     w->name, ret);
++              }
++
++              /* power down pre event */
++              if (!w->power && w->event &&
++                  (w->event_flags & SND_SOC_DAPM_PRE_PMD)) {
++                      pop_dbg(codec->pop_time, "pop test : %s PRE_PMD\n",
++                              w->name);
++                      ret = w->event(w, NULL, SND_SOC_DAPM_PRE_PMD);
++                      if (ret < 0)
++                              pr_err("%s: pre event failed: %d\n",
++                                     w->name, ret);
++              }
++
++              /* Lower PGA volume to reduce pops */
++              if (w->id == snd_soc_dapm_pga && !w->power)
++                      dapm_set_pga(w, w->power);
++      }
++
++      if (reg >= 0) {
++              pop_dbg(codec->pop_time,
++                      "pop test : Applying 0x%x/0x%x to %x in %dms\n",
++                      value, mask, reg, codec->pop_time);
++              pop_wait(codec->pop_time);
++              snd_soc_update_bits(codec, reg, mask, value);
++      }
++
++      list_for_each_entry(w, pending, power_list) {
++              /* Raise PGA volume to reduce pops */
++              if (w->id == snd_soc_dapm_pga && w->power)
++                      dapm_set_pga(w, w->power);
++
++              /* power up post event */
++              if (w->power && w->event &&
++                  (w->event_flags & SND_SOC_DAPM_POST_PMU)) {
++                      pop_dbg(codec->pop_time, "pop test : %s POST_PMU\n",
++                              w->name);
++                      ret = w->event(w,
++                                     NULL, SND_SOC_DAPM_POST_PMU);
++                      if (ret < 0)
++                              pr_err("%s: post event failed: %d\n",
++                                     w->name, ret);
++              }
++
++              /* power down post event */
++              if (!w->power && w->event &&
++                  (w->event_flags & SND_SOC_DAPM_POST_PMD)) {
++                      pop_dbg(codec->pop_time, "pop test : %s POST_PMD\n",
++                              w->name);
++                      ret = w->event(w, NULL, SND_SOC_DAPM_POST_PMD);
++                      if (ret < 0)
++                              pr_err("%s: post event failed: %d\n",
++                                     w->name, ret);
++              }
++      }
++}
++
++/* Apply a DAPM power sequence.
++ *
++ * We walk over a pre-sorted list of widgets to apply power to.  In
++ * order to minimise the number of writes to the device required
++ * multiple widgets will be updated in a single write where possible.
++ * Currently anything that requires more than a single write is not
++ * handled.
++ */
++static void dapm_seq_run(struct snd_soc_codec *codec, struct list_head *list,
++                       int event, int sort[])
++{
++      struct snd_soc_dapm_widget *w, *n;
++      LIST_HEAD(pending);
++      int cur_sort = -1;
++      int cur_reg = SND_SOC_NOPM;
++      int ret;
++
++      list_for_each_entry_safe(w, n, list, power_list) {
++              ret = 0;
++
++              /* Do we need to apply any queued changes? */
++              if (sort[w->id] != cur_sort || w->reg != cur_reg) {
++                      if (!list_empty(&pending))
++                              dapm_seq_run_coalesced(codec, &pending);
++
++                      INIT_LIST_HEAD(&pending);
++                      cur_sort = -1;
++                      cur_reg = SND_SOC_NOPM;
++              }
++
++              switch (w->id) {
++              case snd_soc_dapm_pre:
++                      if (!w->event)
++                              list_for_each_entry_safe_continue(w, n, list,
++                                                                power_list);
++
++                      if (event == SND_SOC_DAPM_STREAM_START)
++                              ret = w->event(w,
++                                             NULL, SND_SOC_DAPM_PRE_PMU);
++                      else if (event == SND_SOC_DAPM_STREAM_STOP)
++                              ret = w->event(w,
++                                             NULL, SND_SOC_DAPM_PRE_PMD);
++                      break;
++
++              case snd_soc_dapm_post:
++                      if (!w->event)
++                              list_for_each_entry_safe_continue(w, n, list,
++                                                                power_list);
++
++                      if (event == SND_SOC_DAPM_STREAM_START)
++                              ret = w->event(w,
++                                             NULL, SND_SOC_DAPM_POST_PMU);
++                      else if (event == SND_SOC_DAPM_STREAM_STOP)
++                              ret = w->event(w,
++                                             NULL, SND_SOC_DAPM_POST_PMD);
++                      break;
++
++              case snd_soc_dapm_input:
++              case snd_soc_dapm_output:
++              case snd_soc_dapm_hp:
++              case snd_soc_dapm_mic:
++              case snd_soc_dapm_line:
++              case snd_soc_dapm_spk:
++                      /* No register support currently */
++                      ret = dapm_generic_apply_power(w);
++                      break;
++
++              default:
++                      /* Queue it up for application */
++                      cur_sort = sort[w->id];
++                      cur_reg = w->reg;
++                      list_move(&w->power_list, &pending);
++                      break;
++              }
++
++              if (ret < 0)
++                      pr_err("Failed to apply widget power: %d\n",
++                             ret);
++      }
++
++      if (!list_empty(&pending))
++              dapm_seq_run_coalesced(codec, &pending);
++}
++
+ /*
+  * Scan each dapm widget for complete audio path.
+  * A complete path is a route that has valid endpoints i.e.:-
+@@ -663,31 +953,97 @@
+  */
+ static int dapm_power_widgets(struct snd_soc_codec *codec, int event)
+ {
++      struct snd_soc_device *socdev = codec->socdev;
+       struct snd_soc_dapm_widget *w;
+-      int i, c = 1, *seq = NULL, ret = 0;
++      LIST_HEAD(up_list);
++      LIST_HEAD(down_list);
++      int ret = 0;
++      int power;
++      int sys_power = 0;
+-      /* 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;
+-      }
++      /* Check which widgets we need to power and store them in
++       * lists indicating if they should be powered up or down.
++       */
++      list_for_each_entry(w, &codec->dapm_widgets, list) {
++              switch (w->id) {
++              case snd_soc_dapm_pre:
++                      dapm_seq_insert(w, &down_list, dapm_down_seq);
++                      break;
++              case snd_soc_dapm_post:
++                      dapm_seq_insert(w, &up_list, dapm_up_seq);
++                      break;
+-      for (i = 0; i < c; i++) {
+-              list_for_each_entry(w, &codec->dapm_widgets, list) {
++              default:
++                      if (!w->power_check)
++                              continue;
+-                      /* is widget in stream order */
+-                      if (seq && seq[i] && w->id != seq[i])
++                      power = w->power_check(w);
++                      if (power)
++                              sys_power = 1;
++
++                      if (w->power == power)
+                               continue;
+-                      ret = dapm_power_widget(codec, event, w);
+-                      if (ret != 0)
+-                              return ret;
++                      if (power)
++                              dapm_seq_insert(w, &up_list, dapm_up_seq);
++                      else
++                              dapm_seq_insert(w, &down_list, dapm_down_seq);
++
++                      w->power = power;
++                      break;
++              }
++      }
++
++      /* If there are no DAPM widgets then try to figure out power from the
++       * event type.
++       */
++      if (list_empty(&codec->dapm_widgets)) {
++              switch (event) {
++              case SND_SOC_DAPM_STREAM_START:
++              case SND_SOC_DAPM_STREAM_RESUME:
++                      sys_power = 1;
++                      break;
++              case SND_SOC_DAPM_STREAM_NOP:
++                      sys_power = codec->bias_level != SND_SOC_BIAS_STANDBY;
++              default:
++                      break;
+               }
+       }
++      /* If we're changing to all on or all off then prepare */
++      if ((sys_power && codec->bias_level == SND_SOC_BIAS_STANDBY) ||
++          (!sys_power && codec->bias_level == SND_SOC_BIAS_ON)) {
++              ret = snd_soc_dapm_set_bias_level(socdev,
++                                                SND_SOC_BIAS_PREPARE);
++              if (ret != 0)
++                      pr_err("Failed to prepare bias: %d\n", ret);
++      }
++
++      /* Power down widgets first; try to avoid amplifying pops. */
++      dapm_seq_run(codec, &down_list, event, dapm_down_seq);
++
++      /* Now power up. */
++      dapm_seq_run(codec, &up_list, event, dapm_up_seq);
++
++      /* If we just powered the last thing off drop to standby bias */
++      if (codec->bias_level == SND_SOC_BIAS_PREPARE && !sys_power) {
++              ret = snd_soc_dapm_set_bias_level(socdev,
++                                                SND_SOC_BIAS_STANDBY);
++              if (ret != 0)
++                      pr_err("Failed to apply standby bias: %d\n", ret);
++      }
++
++      /* If we just powered up then move to active bias */
++      if (codec->bias_level == SND_SOC_BIAS_PREPARE && sys_power) {
++              ret = snd_soc_dapm_set_bias_level(socdev,
++                                                SND_SOC_BIAS_ON);
++              if (ret != 0)
++                      pr_err("Failed to apply active bias: %d\n", ret);
++      }
++
++      pop_dbg(codec->pop_time, "DAPM sequencing finished, waiting %dms\n",
++              codec->pop_time);
++
+       return 0;
+ }
+@@ -723,6 +1079,9 @@
+               case snd_soc_dapm_pga:
+               case snd_soc_dapm_mixer:
+               case snd_soc_dapm_mixer_named_ctl:
++              case snd_soc_dapm_supply:
++              case snd_soc_dapm_aif_in:
++              case snd_soc_dapm_aif_out:
+                       if (w->name) {
+                               in = is_connected_input_ep(w);
+                               dapm_clear_walk(w->codec);
+@@ -748,10 +1107,103 @@
+ }
+ #endif
++#ifdef CONFIG_DEBUG_FS
++static int dapm_widget_power_open_file(struct inode *inode, struct file *file)
++{
++      file->private_data = inode->i_private;
++      return 0;
++}
++
++static ssize_t dapm_widget_power_read_file(struct file *file,
++                                         char __user *user_buf,
++                                         size_t count, loff_t *ppos)
++{
++      struct snd_soc_dapm_widget *w = file->private_data;
++      char *buf;
++      int in, out;
++      ssize_t ret;
++      struct snd_soc_dapm_path *p = NULL;
++
++      buf = kmalloc(PAGE_SIZE, GFP_KERNEL);
++      if (!buf)
++              return -ENOMEM;
++
++      in = is_connected_input_ep(w);
++      dapm_clear_walk(w->codec);
++      out = is_connected_output_ep(w);
++      dapm_clear_walk(w->codec);
++
++      ret = snprintf(buf, PAGE_SIZE, "%s: %s  in %d out %d\n",
++                     w->name, w->power ? "On" : "Off", in, out);
++
++      if (w->sname)
++              ret += snprintf(buf + ret, PAGE_SIZE - ret, " stream %s %s\n",
++                              w->sname,
++                              w->active ? "active" : "inactive");
++
++      list_for_each_entry(p, &w->sources, list_sink) {
++              if (p->connected && !p->connected(w, p->sink))
++                      continue;
++
++              if (p->connect)
++                      ret += snprintf(buf + ret, PAGE_SIZE - ret,
++                                      " in  %s %s\n",
++                                      p->name ? p->name : "static",
++                                      p->source->name);
++      }
++      list_for_each_entry(p, &w->sinks, list_source) {
++              if (p->connected && !p->connected(w, p->sink))
++                      continue;
++
++              if (p->connect)
++                      ret += snprintf(buf + ret, PAGE_SIZE - ret,
++                                      " out %s %s\n",
++                                      p->name ? p->name : "static",
++                                      p->sink->name);
++      }
++
++      ret = simple_read_from_buffer(user_buf, count, ppos, buf, ret);
++
++      kfree(buf);
++      return ret;
++}
++
++static const struct file_operations dapm_widget_power_fops = {
++      .open = dapm_widget_power_open_file,
++      .read = dapm_widget_power_read_file,
++};
++
++void snd_soc_dapm_debugfs_init(struct snd_soc_codec *codec)
++{
++      struct snd_soc_dapm_widget *w;
++      struct dentry *d;
++
++      if (!codec->debugfs_dapm)
++              return;
++
++      list_for_each_entry(w, &codec->dapm_widgets, list) {
++              if (!w->name)
++                      continue;
++
++              d = debugfs_create_file(w->name, 0444,
++                                      codec->debugfs_dapm, w,
++                                      &dapm_widget_power_fops);
++              if (!d)
++                      printk(KERN_WARNING
++                             "ASoC: Failed to create %s debugfs file\n",
++                             w->name);
++      }
++}
++#else
++void snd_soc_dapm_debugfs_init(struct snd_soc_codec *codec)
++{
++}
++#endif
++
+ /* test and update the power status of a mux widget */
+ static int dapm_mux_update_power(struct snd_soc_dapm_widget *widget,
+-                               struct snd_kcontrol *kcontrol, int mask,
+-                               int mux, int val, struct soc_enum *e)
++                               struct snd_kcontrol *kcontrol, int change,
++                               int mux, struct soc_enum *e)
+ {
+       struct snd_soc_dapm_path *path;
+       int found = 0;
+@@ -760,7 +1212,7 @@
+           widget->id != snd_soc_dapm_value_mux)
+               return -ENODEV;
+-      if (!snd_soc_test_bits(widget->codec, e->reg, mask, val))
++      if (!change)
+               return 0;
+       /* find dapm widget path assoc with kcontrol */
+@@ -851,6 +1303,7 @@
+               case snd_soc_dapm_pga:
+               case snd_soc_dapm_mixer:
+               case snd_soc_dapm_mixer_named_ctl:
++              case snd_soc_dapm_supply:
+                       if (w->name)
+                               count += sprintf(buf + count, "%s: %s\n",
+                                       w->name, w->power ? "On":"Off");
+@@ -883,16 +1336,12 @@
+ int snd_soc_dapm_sys_add(struct device *dev)
+ {
+-      if (!dapm_status)
+-              return 0;
+       return device_create_file(dev, &dev_attr_dapm_widget);
+ }
+ static void snd_soc_dapm_sys_remove(struct device *dev)
+ {
+-      if (dapm_status) {
+-              device_remove_file(dev, &dev_attr_dapm_widget);
+-      }
++      device_remove_file(dev, &dev_attr_dapm_widget);
+ }
+ /* free all dapm widgets and resources */
+@@ -948,10 +1397,13 @@
+ EXPORT_SYMBOL_GPL(snd_soc_dapm_sync);
+ static int snd_soc_dapm_add_route(struct snd_soc_codec *codec,
+-      const char *sink, const char *control, const char *source)
++                                const struct snd_soc_dapm_route *route)
+ {
+       struct snd_soc_dapm_path *path;
+       struct snd_soc_dapm_widget *wsource = NULL, *wsink = NULL, *w;
++      const char *sink = route->sink;
++      const char *control = route->control;
++      const char *source = route->source;
+       int ret = 0;
+       /* find src and dest widgets */
+@@ -975,6 +1427,7 @@
+       path->source = wsource;
+       path->sink = wsink;
++      path->connected = route->connected;
+       INIT_LIST_HEAD(&path->list);
+       INIT_LIST_HEAD(&path->list_source);
+       INIT_LIST_HEAD(&path->list_sink);
+@@ -983,8 +1436,8 @@
+       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->id == snd_soc_dapm_output)
++                      wsource->id == snd_soc_dapm_line ||
++                      wsource->id == snd_soc_dapm_output)
+                       wsink->ext = 1;
+       }
+       if (wsource->id == snd_soc_dapm_output) {
+@@ -1015,6 +1468,9 @@
+       case snd_soc_dapm_vmid:
+       case snd_soc_dapm_pre:
+       case snd_soc_dapm_post:
++      case snd_soc_dapm_supply:
++      case snd_soc_dapm_aif_in:
++      case snd_soc_dapm_aif_out:
+               list_add(&path->list, &codec->dapm_paths);
+               list_add(&path->list_sink, &wsink->sources);
+               list_add(&path->list_source, &wsource->sinks);
+@@ -1072,8 +1528,7 @@
+       int i, ret;
+       for (i = 0; i < num; i++) {
+-              ret = snd_soc_dapm_add_route(codec, route->sink,
+-                                           route->control, route->source);
++              ret = snd_soc_dapm_add_route(codec, route);
+               if (ret < 0) {
+                       printk(KERN_ERR "Failed to add route %s->%s\n",
+                              route->source,
+@@ -1108,15 +1563,24 @@
+               case snd_soc_dapm_switch:
+               case snd_soc_dapm_mixer:
+               case snd_soc_dapm_mixer_named_ctl:
++                      w->power_check = dapm_generic_check_power;
+                       dapm_new_mixer(codec, w);
+                       break;
+               case snd_soc_dapm_mux:
+               case snd_soc_dapm_value_mux:
++                      w->power_check = dapm_generic_check_power;
+                       dapm_new_mux(codec, w);
+                       break;
+               case snd_soc_dapm_adc:
++              case snd_soc_dapm_aif_out:
++                      w->power_check = dapm_adc_check_power;
++                      break;
+               case snd_soc_dapm_dac:
++              case snd_soc_dapm_aif_in:
++                      w->power_check = dapm_dac_check_power;
++                      break;
+               case snd_soc_dapm_pga:
++                      w->power_check = dapm_generic_check_power;
+                       dapm_new_pga(codec, w);
+                       break;
+               case snd_soc_dapm_input:
+@@ -1126,6 +1590,10 @@
+               case snd_soc_dapm_hp:
+               case snd_soc_dapm_mic:
+               case snd_soc_dapm_line:
++                      w->power_check = dapm_generic_check_power;
++                      break;
++              case snd_soc_dapm_supply:
++                      w->power_check = dapm_supply_check_power;
+               case snd_soc_dapm_vmid:
+               case snd_soc_dapm_pre:
+               case snd_soc_dapm_post:
+@@ -1205,7 +1673,7 @@
+       int max = mc->max;
+       unsigned int mask = (1 << fls(max)) - 1;
+       unsigned int invert = mc->invert;
+-      unsigned short val, val2, val_mask;
++      unsigned int val, val2, val_mask;
+       int ret;
+       val = (ucontrol->value.integer.value[0] & mask);
+@@ -1269,7 +1737,7 @@
+ {
+       struct snd_soc_dapm_widget *widget = snd_kcontrol_chip(kcontrol);
+       struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
+-      unsigned short val, bitmask;
++      unsigned int val, bitmask;
+       for (bitmask = 1; bitmask < e->max; bitmask <<= 1)
+               ;
+@@ -1297,8 +1765,8 @@
+ {
+       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;
++      unsigned int val, mux, change;
++      unsigned int mask, bitmask;
+       int ret = 0;
+       for (bitmask = 1; bitmask < e->max; bitmask <<= 1)
+@@ -1317,20 +1785,21 @@
+       mutex_lock(&widget->codec->mutex);
+       widget->value = val;
+-      dapm_mux_update_power(widget, kcontrol, mask, mux, val, e);
+-      if (widget->event) {
+-              if (widget->event_flags & SND_SOC_DAPM_PRE_REG) {
+-                      ret = widget->event(widget,
+-                              kcontrol, 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,
+-                              kcontrol, SND_SOC_DAPM_POST_REG);
+-      } else
+-              ret = snd_soc_update_bits(widget->codec, e->reg, mask, val);
++      change = snd_soc_test_bits(widget->codec, e->reg, mask, val);
++      dapm_mux_update_power(widget, kcontrol, change, mux, e);
++
++      if (widget->event_flags & SND_SOC_DAPM_PRE_REG) {
++              ret = widget->event(widget,
++                                  kcontrol, 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,
++                                  kcontrol, SND_SOC_DAPM_POST_REG);
+ out:
+       mutex_unlock(&widget->codec->mutex);
+@@ -1339,6 +1808,54 @@
+ EXPORT_SYMBOL_GPL(snd_soc_dapm_put_enum_double);
+ /**
++ * snd_soc_dapm_get_enum_virt - Get virtual DAPM mux
++ * @kcontrol: mixer control
++ * @ucontrol: control element information
++ *
++ * Returns 0 for success.
++ */
++int snd_soc_dapm_get_enum_virt(struct snd_kcontrol *kcontrol,
++                             struct snd_ctl_elem_value *ucontrol)
++{
++      struct snd_soc_dapm_widget *widget = snd_kcontrol_chip(kcontrol);
++
++      ucontrol->value.enumerated.item[0] = widget->value;
++
++      return 0;
++}
++EXPORT_SYMBOL_GPL(snd_soc_dapm_get_enum_virt);
++
++/**
++ * snd_soc_dapm_put_enum_virt - Set virtual DAPM mux
++ * @kcontrol: mixer control
++ * @ucontrol: control element information
++ *
++ * Returns 0 for success.
++ */
++int snd_soc_dapm_put_enum_virt(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;
++      int change;
++      int ret = 0;
++
++      if (ucontrol->value.enumerated.item[0] >= e->max)
++              return -EINVAL;
++
++      mutex_lock(&widget->codec->mutex);
++
++      change = widget->value != ucontrol->value.enumerated.item[0];
++      widget->value = ucontrol->value.enumerated.item[0];
++      dapm_mux_update_power(widget, kcontrol, change, widget->value, e);
++
++      mutex_unlock(&widget->codec->mutex);
++      return ret;
++}
++EXPORT_SYMBOL_GPL(snd_soc_dapm_put_enum_virt);
++
++/**
+  * snd_soc_dapm_get_value_enum_double - dapm semi enumerated double mixer get
+  *                                    callback
+  * @kcontrol: mixer control
+@@ -1356,7 +1873,7 @@
+ {
+       struct snd_soc_dapm_widget *widget = snd_kcontrol_chip(kcontrol);
+       struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
+-      unsigned short reg_val, val, mux;
++      unsigned int reg_val, val, mux;
+       reg_val = snd_soc_read(widget->codec, e->reg);
+       val = (reg_val >> e->shift_l) & e->mask;
+@@ -1396,8 +1913,8 @@
+ {
+       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;
++      unsigned int val, mux, change;
++      unsigned int mask;
+       int ret = 0;
+       if (ucontrol->value.enumerated.item[0] > e->max - 1)
+@@ -1414,20 +1931,21 @@
+       mutex_lock(&widget->codec->mutex);
+       widget->value = val;
+-      dapm_mux_update_power(widget, kcontrol, mask, mux, val, e);
+-      if (widget->event) {
+-              if (widget->event_flags & SND_SOC_DAPM_PRE_REG) {
+-                      ret = widget->event(widget,
+-                              kcontrol, 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,
+-                              kcontrol, SND_SOC_DAPM_POST_REG);
+-      } else
+-              ret = snd_soc_update_bits(widget->codec, e->reg, mask, val);
++      change = snd_soc_test_bits(widget->codec, e->reg, mask, val);
++      dapm_mux_update_power(widget, kcontrol, change, mux, e);
++
++      if (widget->event_flags & SND_SOC_DAPM_PRE_REG) {
++              ret = widget->event(widget,
++                                  kcontrol, 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,
++                                  kcontrol, SND_SOC_DAPM_POST_REG);
+ out:
+       mutex_unlock(&widget->codec->mutex);
+@@ -1626,35 +2144,11 @@
+ EXPORT_SYMBOL_GPL(snd_soc_dapm_stream_event);
+ /**
+- * snd_soc_dapm_set_bias_level - set the bias level for the system
+- * @socdev: audio device
+- * @level: level to configure
+- *
+- * Configure the bias (power) levels for the SoC audio device.
+- *
+- * Returns 0 for success else error.
+- */
+-int snd_soc_dapm_set_bias_level(struct snd_soc_device *socdev,
+-                              enum snd_soc_bias_level level)
+-{
+-      struct snd_soc_card *card = socdev->card;
+-      struct snd_soc_codec *codec = socdev->card->codec;
+-      int ret = 0;
+-
+-      if (card->set_bias_level)
+-              ret = card->set_bias_level(card, level);
+-      if (ret == 0 && codec->set_bias_level)
+-              ret = codec->set_bias_level(codec, level);
+-
+-      return ret;
+-}
+-
+-/**
+  * snd_soc_dapm_enable_pin - enable pin.
+  * @codec: SoC codec
+  * @pin: pin name
+  *
+- * Enables input/output pin and it's parents or children widgets iff there is
++ * Enables input/output pin and its parents or children widgets iff there is
+  * a valid audio route and active audio stream.
+  * NOTE: snd_soc_dapm_sync() needs to be called after this for DAPM to
+  * do any widget power switching.
+@@ -1670,7 +2164,7 @@
+  * @codec: SoC codec
+  * @pin: pin name
+  *
+- * Disables input/output pin and it's parents or children widgets.
++ * Disables input/output pin and its parents or children widgets.
+  * NOTE: snd_soc_dapm_sync() needs to be called after this for DAPM to
+  * do any widget power switching.
+  */
+@@ -1737,6 +2231,36 @@
+ }
+ EXPORT_SYMBOL_GPL(snd_soc_dapm_free);
++/*
++ * snd_soc_dapm_shutdown - callback for system shutdown
++ */
++void snd_soc_dapm_shutdown(struct snd_soc_device *socdev)
++{
++      struct snd_soc_codec *codec = socdev->card->codec;
++      struct snd_soc_dapm_widget *w;
++      LIST_HEAD(down_list);
++      int powerdown = 0;
++
++      list_for_each_entry(w, &codec->dapm_widgets, list) {
++              if (w->power) {
++                      dapm_seq_insert(w, &down_list, dapm_down_seq);
++                      w->power = 0;
++                      powerdown = 1;
++              }
++      }
++
++      /* If there were no widgets to power down we're already in
++       * standby.
++       */
++      if (powerdown) {
++              snd_soc_dapm_set_bias_level(socdev, SND_SOC_BIAS_PREPARE);
++              dapm_seq_run(codec, &down_list, 0, dapm_down_seq);
++              snd_soc_dapm_set_bias_level(socdev, SND_SOC_BIAS_STANDBY);
++      }
++
++      snd_soc_dapm_set_bias_level(socdev, SND_SOC_BIAS_OFF);
++}
++
+ /* Module information */
+ MODULE_AUTHOR("Liam Girdwood, lrg@slimlogic.co.uk");
+ MODULE_DESCRIPTION("Dynamic Audio Power Management core for ALSA SoC");
+Index: linux-2.6.30/sound/soc/soc-jack.c
+===================================================================
+--- linux-2.6.30.orig/sound/soc/soc-jack.c     2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/sound/soc/soc-jack.c  2011-02-01 16:40:30.193007582 +0100
+@@ -73,14 +73,15 @@
+       oldstatus = jack->status;
+       jack->status &= ~mask;
+-      jack->status |= status;
++      jack->status |= status & mask;
+-      /* The DAPM sync is expensive enough to be worth skipping */
+-      if (jack->status == oldstatus)
++      /* The DAPM sync is expensive enough to be worth skipping.
++       * However, empty mask means pin synchronization is desired. */
++      if (mask && (jack->status == oldstatus))
+               goto out;
+       list_for_each_entry(pin, &jack->pins, list) {
+-              enable = pin->mask & status;
++              enable = pin->mask & jack->status;
+               if (pin->invert)
+                       enable = !enable;
+@@ -220,6 +221,9 @@
+               if (ret)
+                       goto err;
++              INIT_WORK(&gpios[i].work, gpio_work);
++              gpios[i].jack = jack;
++
+               ret = request_irq(gpio_to_irq(gpios[i].gpio),
+                               gpio_handler,
+                               IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
+@@ -228,8 +232,13 @@
+               if (ret)
+                       goto err;
+-              INIT_WORK(&gpios[i].work, gpio_work);
+-              gpios[i].jack = jack;
++#ifdef CONFIG_GPIO_SYSFS
++              /* Expose GPIO value over sysfs for diagnostic purposes */
++              gpio_export(gpios[i].gpio, false);
++#endif
++
++              /* Update initial jack status */
++              snd_soc_jack_gpio_detect(&gpios[i]);
+       }
+       return 0;
+@@ -258,6 +267,9 @@
+       int i;
+       for (i = 0; i < count; i++) {
++#ifdef CONFIG_GPIO_SYSFS
++              gpio_unexport(gpios[i].gpio);
++#endif
+               free_irq(gpio_to_irq(gpios[i].gpio), &gpios[i]);
+               gpio_free(gpios[i].gpio);
+               gpios[i].jack = NULL;
+Index: linux-2.6.30/arch/arm/configs/at91sam9g10ek_defconfig
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.30/arch/arm/configs/at91sam9g10ek_defconfig      2011-02-01 16:40:30.197007464 +0100
+@@ -0,0 +1,1523 @@
++#
++# Automatically generated make config: don't edit
++# Linux kernel version: 2.6.30
++# Mon Oct 19 16:44:23 2009
++#
++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_HAVE_LATENCYTOP_SUPPORT=y
++CONFIG_LOCKDEP_SUPPORT=y
++CONFIG_TRACE_IRQFLAGS_SUPPORT=y
++CONFIG_HARDIRQS_SW_RESEND=y
++CONFIG_GENERIC_IRQ_PROBE=y
++CONFIG_RWSEM_GENERIC_SPINLOCK=y
++# CONFIG_ARCH_HAS_ILOG2_U32 is not set
++# CONFIG_ARCH_HAS_ILOG2_U64 is not set
++CONFIG_GENERIC_HWEIGHT=y
++CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=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_AUDIT is not set
++
++#
++# RCU Subsystem
++#
++CONFIG_CLASSIC_RCU=y
++# CONFIG_TREE_RCU is not set
++# CONFIG_PREEMPT_RCU is not set
++# CONFIG_TREE_RCU_TRACE is not set
++# CONFIG_PREEMPT_RCU_TRACE is not set
++# CONFIG_IKCONFIG is not set
++CONFIG_LOG_BUF_SHIFT=14
++# CONFIG_GROUP_SCHED is not set
++# CONFIG_CGROUPS is not set
++CONFIG_SYSFS_DEPRECATED=y
++CONFIG_SYSFS_DEPRECATED_V2=y
++# CONFIG_RELAY is not set
++CONFIG_NAMESPACES=y
++# CONFIG_UTS_NS is not set
++# CONFIG_IPC_NS is not set
++# CONFIG_USER_NS is not set
++# CONFIG_PID_NS is not set
++# CONFIG_NET_NS is not set
++CONFIG_BLK_DEV_INITRD=y
++CONFIG_INITRAMFS_SOURCE=""
++CONFIG_RD_GZIP=y
++CONFIG_RD_BZIP2=y
++CONFIG_RD_LZMA=y
++CONFIG_CC_OPTIMIZE_FOR_SIZE=y
++CONFIG_SYSCTL=y
++CONFIG_ANON_INODES=y
++# CONFIG_EMBEDDED is not set
++CONFIG_UID16=y
++CONFIG_SYSCTL_SYSCALL=y
++CONFIG_KALLSYMS=y
++# CONFIG_KALLSYMS_EXTRA_PASS is not set
++CONFIG_STRIP_ASM_SYMS=y
++CONFIG_HOTPLUG=y
++CONFIG_PRINTK=y
++CONFIG_BUG=y
++CONFIG_ELF_CORE=y
++CONFIG_BASE_FULL=y
++CONFIG_FUTEX=y
++CONFIG_EPOLL=y
++CONFIG_SIGNALFD=y
++CONFIG_TIMERFD=y
++CONFIG_EVENTFD=y
++CONFIG_SHMEM=y
++CONFIG_AIO=y
++CONFIG_VM_EVENT_COUNTERS=y
++CONFIG_COMPAT_BRK=y
++CONFIG_SLAB=y
++# CONFIG_SLUB is not set
++# CONFIG_SLOB is not set
++# CONFIG_PROFILING is not set
++# CONFIG_MARKERS is not set
++CONFIG_HAVE_OPROFILE=y
++# CONFIG_KPROBES is not set
++CONFIG_HAVE_KPROBES=y
++CONFIG_HAVE_KRETPROBES=y
++CONFIG_HAVE_CLK=y
++# CONFIG_SLOW_WORK is not set
++CONFIG_HAVE_GENERIC_DMA_COHERENT=y
++CONFIG_SLABINFO=y
++CONFIG_RT_MUTEXES=y
++CONFIG_BASE_SMALL=0
++CONFIG_MODULES=y
++# CONFIG_MODULE_FORCE_LOAD is not set
++CONFIG_MODULE_UNLOAD=y
++# CONFIG_MODULE_FORCE_UNLOAD is not set
++# CONFIG_MODVERSIONS is not set
++# CONFIG_MODULE_SRCVERSION_ALL is not set
++CONFIG_BLOCK=y
++# CONFIG_LBD is not set
++# CONFIG_BLK_DEV_BSG is not set
++# CONFIG_BLK_DEV_INTEGRITY 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"
++CONFIG_FREEZER=y
++
++#
++# 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_CLPS711X is not set
++# CONFIG_ARCH_EBSA110 is not set
++# CONFIG_ARCH_EP93XX is not set
++# CONFIG_ARCH_GEMINI 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_KIRKWOOD is not set
++# CONFIG_ARCH_KS8695 is not set
++# CONFIG_ARCH_NS9XXX is not set
++# CONFIG_ARCH_LOKI is not set
++# CONFIG_ARCH_MV78XX0 is not set
++# CONFIG_ARCH_MXC is not set
++# CONFIG_ARCH_ORION5X is not set
++# CONFIG_ARCH_PNX4008 is not set
++# CONFIG_ARCH_PXA is not set
++# CONFIG_ARCH_MMP is not set
++# CONFIG_ARCH_RPC is not set
++# CONFIG_ARCH_SA1100 is not set
++# CONFIG_ARCH_S3C2410 is not set
++# CONFIG_ARCH_S3C64XX is not set
++# CONFIG_ARCH_SHARK is not set
++# CONFIG_ARCH_LH7A40X is not set
++# CONFIG_ARCH_DAVINCI is not set
++# CONFIG_ARCH_OMAP is not set
++# CONFIG_ARCH_MSM is not set
++# CONFIG_ARCH_W90X900 is not set
++
++#
++# Atmel AT91 System-on-Chip
++#
++# CONFIG_ARCH_AT91RM9200 is not set
++# CONFIG_ARCH_AT91SAM9260 is not set
++# CONFIG_ARCH_AT91SAM9261 is not set
++CONFIG_ARCH_AT91SAM9G10=y
++# CONFIG_ARCH_AT91SAM9263 is not set
++# CONFIG_ARCH_AT91SAM9RL is not set
++# CONFIG_ARCH_AT91SAM9G20 is not set
++# CONFIG_ARCH_AT91SAM9G45 is not set
++# CONFIG_ARCH_AT91CAP9 is not set
++# CONFIG_ARCH_AT572D940HF is not set
++# CONFIG_ARCH_AT91X40 is not set
++CONFIG_AT91_PMC_UNIT=y
++
++#
++# AT91SAM9G10 Board Type
++#
++CONFIG_MACH_AT91SAM9G10EK=y
++
++#
++# AT91 Board Options
++#
++# CONFIG_MTD_AT91_DATAFLASH_CARD is not set
++# CONFIG_MTD_NAND_ATMEL_BUSWIDTH_16 is not set
++
++#
++# AT91 Feature Selections
++#
++CONFIG_AT91_PROGRAMMABLE_CLOCKS=y
++# CONFIG_AT91_SLOW_CLOCK is not set
++CONFIG_AT91_TIMER_HZ=100
++CONFIG_AT91_EARLY_DBGU=y
++# CONFIG_AT91_EARLY_USART0 is not set
++# CONFIG_AT91_EARLY_USART1 is not set
++# CONFIG_AT91_EARLY_USART2 is not set
++# CONFIG_AT91_EARLY_USART3 is not set
++# CONFIG_AT91_EARLY_USART4 is not set
++# CONFIG_AT91_EARLY_USART5 is not set
++
++#
++# Processor Type
++#
++CONFIG_CPU_32=y
++CONFIG_CPU_ARM926T=y
++CONFIG_CPU_32v5=y
++CONFIG_CPU_ABRT_EV5TJ=y
++CONFIG_CPU_PABRT_NOIFAR=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
++# CONFIG_PCCARD is not set
++
++#
++# Kernel Features
++#
++# CONFIG_NO_HZ is not set
++# CONFIG_HIGH_RES_TIMERS is not set
++CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
++CONFIG_VMSPLIT_3G=y
++# CONFIG_VMSPLIT_2G is not set
++# CONFIG_VMSPLIT_1G is not set
++CONFIG_PAGE_OFFSET=0xC0000000
++# CONFIG_PREEMPT is not set
++CONFIG_HZ=100
++CONFIG_AEABI=y
++CONFIG_OABI_COMPAT=y
++# CONFIG_ARCH_HAS_HOLES_MEMORYMODEL is not set
++# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
++# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
++# CONFIG_HIGHMEM is not set
++CONFIG_SELECT_MEMORY_MODEL=y
++CONFIG_FLATMEM_MANUAL=y
++# CONFIG_DISCONTIGMEM_MANUAL is not set
++# CONFIG_SPARSEMEM_MANUAL is not set
++CONFIG_FLATMEM=y
++CONFIG_FLAT_NODE_MEM_MAP=y
++CONFIG_PAGEFLAGS_EXTENDED=y
++CONFIG_SPLIT_PTLOCK_CPUS=4096
++# CONFIG_PHYS_ADDR_T_64BIT is not set
++CONFIG_ZONE_DMA_FLAG=0
++CONFIG_VIRT_TO_BUS=y
++CONFIG_UNEVICTABLE_LRU=y
++CONFIG_HAVE_MLOCK=y
++CONFIG_HAVE_MLOCKED_PAGE_BIT=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="mem=64M console=ttyS0,115200 initrd=0x21100000,3145728 root=/dev/ram0 rw"
++# CONFIG_XIP_KERNEL is not set
++# CONFIG_KEXEC is not set
++
++#
++# CPU Power Management
++#
++# CONFIG_CPU_IDLE is not set
++
++#
++# Floating point emulation
++#
++
++#
++# At least one emulation must be selected
++#
++CONFIG_FPE_NWFPE=y
++# CONFIG_FPE_NWFPE_XP is not set
++# CONFIG_FPE_FASTFPE is not set
++# CONFIG_VFP is not set
++
++#
++# Userspace binary formats
++#
++CONFIG_BINFMT_ELF=y
++# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
++CONFIG_HAVE_AOUT=y
++# CONFIG_BINFMT_AOUT is not set
++# CONFIG_BINFMT_MISC is not set
++
++#
++# Power management options
++#
++CONFIG_PM=y
++# CONFIG_PM_DEBUG is not set
++CONFIG_PM_SLEEP=y
++CONFIG_SUSPEND=y
++CONFIG_SUSPEND_FREEZER=y
++# CONFIG_APM_EMULATION is not set
++CONFIG_ARCH_SUSPEND_POSSIBLE=y
++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 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_IPV6 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_NET_DSA is not set
++# CONFIG_VLAN_8021Q is not set
++# CONFIG_DECNET is not set
++# CONFIG_LLC2 is not set
++# CONFIG_IPX is not set
++# CONFIG_ATALK is not set
++# CONFIG_X25 is not set
++# CONFIG_LAPB is not set
++# CONFIG_ECONET is not set
++# CONFIG_WAN_ROUTER is not set
++# CONFIG_PHONET is not set
++# CONFIG_NET_SCHED is not set
++# CONFIG_DCB is not set
++
++#
++# Network testing
++#
++# CONFIG_NET_PKTGEN is not set
++# CONFIG_HAMRADIO is not set
++# CONFIG_CAN is not set
++# CONFIG_IRDA is not set
++# CONFIG_BT is not set
++# CONFIG_AF_RXRPC is not set
++CONFIG_WIRELESS=y
++CONFIG_CFG80211=y
++# CONFIG_CFG80211_REG_DEBUG is not set
++# CONFIG_WIRELESS_OLD_REGULATORY is not set
++CONFIG_WIRELESS_EXT=y
++CONFIG_WIRELESS_EXT_SYSFS=y
++CONFIG_LIB80211=y
++# CONFIG_LIB80211_DEBUG is not set
++CONFIG_MAC80211=y
++
++#
++# Rate control algorithm selection
++#
++CONFIG_MAC80211_RC_MINSTREL=y
++# CONFIG_MAC80211_RC_DEFAULT_PID is not set
++CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
++CONFIG_MAC80211_RC_DEFAULT="minstrel"
++# CONFIG_MAC80211_MESH is not set
++# CONFIG_MAC80211_LEDS is not set
++# CONFIG_MAC80211_DEBUG_MENU is not set
++# CONFIG_WIMAX 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_FIRMWARE_IN_KERNEL=y
++CONFIG_EXTRA_FIRMWARE=""
++# CONFIG_SYS_HYPERVISOR is not set
++# CONFIG_CONNECTOR is not set
++CONFIG_MTD=y
++# CONFIG_MTD_DEBUG is not set
++# CONFIG_MTD_CONCAT is not set
++CONFIG_MTD_PARTITIONS=y
++# CONFIG_MTD_TESTS is not set
++# CONFIG_MTD_REDBOOT_PARTS is not set
++CONFIG_MTD_CMDLINE_PARTS=y
++# CONFIG_MTD_AFS_PARTS is not set
++# CONFIG_MTD_AR7_PARTS is not set
++
++#
++# User Modules And Translation Layers
++#
++CONFIG_MTD_CHAR=y
++CONFIG_MTD_BLKDEVS=y
++CONFIG_MTD_BLOCK=y
++# CONFIG_FTL is not set
++# CONFIG_NFTL is not set
++# CONFIG_INFTL is not set
++# CONFIG_RFD_FTL is not set
++# CONFIG_SSFDC is not set
++# CONFIG_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=y
++# CONFIG_MTD_DATAFLASH_WRITE_VERIFY is not set
++# CONFIG_MTD_DATAFLASH_OTP 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_GPIO is not set
++CONFIG_MTD_NAND_IDS=y
++# CONFIG_MTD_NAND_DISKONCHIP is not set
++CONFIG_MTD_NAND_ATMEL=y
++CONFIG_MTD_NAND_ATMEL_ECC_SOFT=y
++# CONFIG_MTD_NAND_ATMEL_ECC_HW is not set
++# CONFIG_MTD_NAND_ATMEL_ECC_NONE is not set
++# CONFIG_MTD_NAND_NANDSIM is not set
++# CONFIG_MTD_NAND_PLATFORM is not set
++# CONFIG_MTD_ALAUDA is not set
++# CONFIG_MTD_ONENAND is not set
++
++#
++# LPDDR flash memory drivers
++#
++# CONFIG_MTD_LPDDR is not set
++
++#
++# 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=4
++CONFIG_BLK_DEV_RAM_SIZE=8192
++# CONFIG_BLK_DEV_XIP is not set
++# CONFIG_CDROM_PKTCDVD is not set
++# CONFIG_ATA_OVER_ETH is not set
++CONFIG_MISC_DEVICES=y
++# CONFIG_ATMEL_TCLIB is not set
++CONFIG_ATMEL_SSC=y
++# CONFIG_ENCLOSURE_SERVICES is not set
++# CONFIG_C2PORT is not set
++
++#
++# EEPROM support
++#
++# CONFIG_EEPROM_AT25 is not set
++CONFIG_EEPROM_93CX6=m
++CONFIG_HAVE_IDE=y
++# 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=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 is not set
++# CONFIG_SCSI_DH is not set
++# CONFIG_SCSI_OSD_INITIATOR is not set
++# CONFIG_ATA is not set
++# CONFIG_MD is not set
++CONFIG_NETDEVICES=y
++CONFIG_COMPAT_NET_DEV_OPS=y
++# CONFIG_DUMMY is not set
++# CONFIG_BONDING is not set
++# CONFIG_MACVLAN is not set
++# CONFIG_EQUALIZER is not set
++# CONFIG_TUN is not set
++# CONFIG_VETH is not set
++CONFIG_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_REALTEK_PHY is not set
++# CONFIG_NATIONAL_PHY is not set
++# CONFIG_STE10XP is not set
++# CONFIG_LSI_ET1011C_PHY is not set
++# CONFIG_FIXED_PHY is not set
++# CONFIG_MDIO_BITBANG is not set
++CONFIG_NET_ETHERNET=y
++CONFIG_MII=y
++# CONFIG_AX88796 is not set
++# CONFIG_SMC91X is not set
++CONFIG_DM9000=y
++CONFIG_DM9000_DEBUGLEVEL=4
++# CONFIG_DM9000_FORCE_SIMPLE_PHY_POLL is not set
++# CONFIG_ENC28J60 is not set
++# CONFIG_ETHOC is not set
++# CONFIG_SMC911X is not set
++# CONFIG_SMSC911X is not set
++# CONFIG_DNET is not set
++# CONFIG_IBM_NEW_EMAC_ZMII is not set
++# CONFIG_IBM_NEW_EMAC_RGMII is not set
++# CONFIG_IBM_NEW_EMAC_TAH is not set
++# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
++# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
++# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
++# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
++# CONFIG_B44 is not set
++# CONFIG_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_SPI is not set
++# CONFIG_LIBERTAS_DEBUG is not set
++# CONFIG_LIBERTAS_THINFIRM is not set
++# CONFIG_AT76C50X_USB is not set
++# CONFIG_USB_ZD1201 is not set
++# CONFIG_USB_NET_RNDIS_WLAN is not set
++CONFIG_RTL8187=m
++# CONFIG_MAC80211_HWSIM is not set
++# CONFIG_P54_COMMON is not set
++CONFIG_AR9170_USB=m
++# CONFIG_HOSTAP is not set
++# CONFIG_B43 is not set
++# CONFIG_B43LEGACY is not set
++CONFIG_ZD1211RW=m
++# CONFIG_ZD1211RW_DEBUG is not set
++CONFIG_RT2X00=m
++CONFIG_RT2500USB=m
++CONFIG_RT73USB=m
++CONFIG_RT2X00_LIB_USB=m
++CONFIG_RT2X00_LIB=m
++CONFIG_RT2X00_LIB_FIRMWARE=y
++CONFIG_RT2X00_LIB_CRYPTO=y
++CONFIG_RT2X00_LIB_RFKILL=y
++CONFIG_RT2X00_LIB_LEDS=y
++# CONFIG_RT2X00_DEBUG is not set
++
++#
++# Enable WiMAX (Networking options) to see the WiMAX drivers
++#
++
++#
++# USB Network Adapters
++#
++# CONFIG_USB_CATC is not set
++# CONFIG_USB_KAWETH is not set
++# CONFIG_USB_PEGASUS is not set
++# CONFIG_USB_RTL8150 is not set
++# CONFIG_USB_USBNET is not set
++# CONFIG_WAN is not set
++# CONFIG_PPP is not set
++# CONFIG_SLIP is not set
++# CONFIG_NETCONSOLE is not set
++# CONFIG_NETPOLL is not set
++# CONFIG_NET_POLL_CONTROLLER is not set
++# CONFIG_ISDN is not set
++
++#
++# Input device support
++#
++CONFIG_INPUT=y
++# CONFIG_INPUT_FF_MEMLESS is not set
++CONFIG_INPUT_POLLDEV=m
++
++#
++# 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_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_INPUT_MOUSE is not set
++# CONFIG_INPUT_JOYSTICK is not set
++# CONFIG_INPUT_TABLET is not set
++CONFIG_INPUT_TOUCHSCREEN=y
++CONFIG_TOUCHSCREEN_ADS7846=y
++# CONFIG_TOUCHSCREEN_AD7877 is not set
++# CONFIG_TOUCHSCREEN_AD7879_SPI is not set
++# CONFIG_TOUCHSCREEN_AD7879 is not set
++# CONFIG_TOUCHSCREEN_FUJITSU is not set
++# CONFIG_TOUCHSCREEN_GUNZE is not set
++# CONFIG_TOUCHSCREEN_ELO is not set
++# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
++# CONFIG_TOUCHSCREEN_MTOUCH is not set
++# CONFIG_TOUCHSCREEN_INEXIO 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_USB_COMPOSITE is not set
++# CONFIG_TOUCHSCREEN_TOUCHIT213 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_CONSOLE_TRANSLATIONS=y
++CONFIG_VT_CONSOLE=y
++CONFIG_HW_CONSOLE=y
++# CONFIG_VT_HW_CONSOLE_BINDING is not set
++CONFIG_DEVKMEM=y
++# 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_PDC=y
++# CONFIG_SERIAL_ATMEL_TTYAT is not set
++# CONFIG_SERIAL_MAX3100 is not set
++CONFIG_SERIAL_CORE=y
++CONFIG_SERIAL_CORE_CONSOLE=y
++CONFIG_UNIX98_PTYS=y
++# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
++CONFIG_LEGACY_PTYS=y
++CONFIG_LEGACY_PTY_COUNT=4
++# CONFIG_IPMI_HANDLER is not set
++CONFIG_HW_RANDOM=y
++# CONFIG_HW_RANDOM_TIMERIOMEM is not set
++# CONFIG_R3964 is not set
++# CONFIG_RAW_DRIVER is not set
++# CONFIG_TCG_TPM is not set
++# CONFIG_I2C is not set
++CONFIG_SPI=y
++CONFIG_SPI_MASTER=y
++
++#
++# SPI Master Controller Drivers
++#
++CONFIG_SPI_ATMEL=y
++# CONFIG_SPI_BITBANG is not set
++# CONFIG_SPI_GPIO is not set
++
++#
++# SPI Protocol Masters
++#
++CONFIG_SPI_SPIDEV=y
++# CONFIG_SPI_TLE62X0 is not set
++CONFIG_ARCH_REQUIRE_GPIOLIB=y
++CONFIG_GPIOLIB=y
++# CONFIG_GPIO_SYSFS is not set
++
++#
++# Memory mapped GPIO expanders:
++#
++
++#
++# I2C GPIO expanders:
++#
++
++#
++# PCI GPIO expanders:
++#
++
++#
++# SPI GPIO expanders:
++#
++# CONFIG_GPIO_MAX7301 is not set
++# CONFIG_GPIO_MCP23S08 is not set
++# CONFIG_W1 is not set
++# CONFIG_POWER_SUPPLY is not set
++# CONFIG_HWMON is not set
++# CONFIG_THERMAL is not set
++# CONFIG_THERMAL_HWMON is not set
++# CONFIG_WATCHDOG is not set
++CONFIG_SSB_POSSIBLE=y
++
++#
++# Sonics Silicon Backplane
++#
++# CONFIG_SSB is not set
++
++#
++# Multifunction device drivers
++#
++# CONFIG_MFD_CORE is not set
++# CONFIG_MFD_SM501 is not set
++# CONFIG_MFD_ASIC3 is not set
++# CONFIG_HTC_EGPIO is not set
++# CONFIG_HTC_PASIC3 is not set
++# CONFIG_MFD_TMIO is not set
++# CONFIG_MFD_T7L66XB is not set
++# CONFIG_MFD_TC6387XB is not set
++# CONFIG_MFD_TC6393XB is not set
++
++#
++# Multimedia devices
++#
++
++#
++# Multimedia core support
++#
++# CONFIG_VIDEO_DEV is not set
++# CONFIG_DVB_CORE is not set
++# CONFIG_VIDEO_MEDIA is not set
++
++#
++# Multimedia drivers
++#
++# 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_BOOT_VESA_SUPPORT is not set
++CONFIG_FB_CFB_FILLRECT=y
++CONFIG_FB_CFB_COPYAREA=y
++CONFIG_FB_CFB_IMAGEBLIT=y
++# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
++# CONFIG_FB_SYS_FILLRECT is not set
++# CONFIG_FB_SYS_COPYAREA is not set
++# CONFIG_FB_SYS_IMAGEBLIT is not set
++# CONFIG_FB_FOREIGN_ENDIAN is not set
++# CONFIG_FB_SYS_FOPS is not set
++# CONFIG_FB_SVGALIB is not set
++# CONFIG_FB_MACMODES is not set
++# CONFIG_FB_BACKLIGHT is not set
++# CONFIG_FB_MODE_HELPERS is not set
++# CONFIG_FB_TILEBLITTING is not set
++
++#
++# Frame buffer hardware drivers
++#
++# CONFIG_FB_S1D15605 is not set
++# CONFIG_FB_S1D13XXX is not set
++CONFIG_FB_ATMEL=y
++# CONFIG_FB_ATMEL_STN is not set
++# CONFIG_FB_VIRTUAL is not set
++# CONFIG_FB_METRONOME is not set
++# CONFIG_FB_MB862XX is not set
++# CONFIG_FB_BROADSHEET is not set
++CONFIG_BACKLIGHT_LCD_SUPPORT=y
++# CONFIG_LCD_CLASS_DEVICE is not set
++CONFIG_BACKLIGHT_CLASS_DEVICE=y
++CONFIG_BACKLIGHT_ATMEL_LCDC=y
++# CONFIG_BACKLIGHT_GENERIC 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 is not set
++# CONFIG_LOGO is not set
++CONFIG_SOUND=y
++CONFIG_SOUND_OSS_CORE=y
++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_PCM_OSS_PLUGINS=y
++# CONFIG_SND_SEQUENCER_OSS is not set
++# 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
++# CONFIG_SND_DRIVERS is not set
++# CONFIG_SND_ARM is not set
++
++#
++# Atmel devices (AVR32 and AT91)
++#
++# CONFIG_SND_ATMEL_AC97C is not set
++CONFIG_SND_SPI=y
++CONFIG_SND_AT73C213=y
++CONFIG_SND_AT73C213_TARGET_BITRATE=48000
++CONFIG_SND_USB=y
++CONFIG_SND_USB_AUDIO=m
++# CONFIG_SND_USB_CAIAQ is not set
++# CONFIG_SND_SOC is not set
++# 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
++# CONFIG_HID_PID is not set
++
++#
++# Special HID drivers
++#
++CONFIG_USB_SUPPORT=y
++CONFIG_USB_ARCH_HAS_HCD=y
++CONFIG_USB_ARCH_HAS_OHCI=y
++# CONFIG_USB_ARCH_HAS_EHCI is not set
++CONFIG_USB=y
++# CONFIG_USB_DEBUG is not set
++# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
++
++#
++# Miscellaneous USB options
++#
++CONFIG_USB_DEVICEFS=y
++# CONFIG_USB_DEVICE_CLASS is not set
++# CONFIG_USB_DYNAMIC_MINORS is not set
++# CONFIG_USB_SUSPEND is not set
++# CONFIG_USB_OTG is not set
++# CONFIG_USB_MON is not set
++# CONFIG_USB_WUSB is not set
++# CONFIG_USB_WUSB_CBAF is not set
++
++#
++# USB Host Controller Drivers
++#
++# CONFIG_USB_C67X00_HCD is not set
++# CONFIG_USB_OXU210HP_HCD is not set
++# CONFIG_USB_ISP116X_HCD is not set
++# CONFIG_USB_ISP1760_HCD is not set
++CONFIG_USB_OHCI_HCD=y
++# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
++# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
++CONFIG_USB_OHCI_LITTLE_ENDIAN=y
++# CONFIG_USB_SL811_HCD is not set
++# CONFIG_USB_R8A66597_HCD is not set
++# CONFIG_USB_HWA_HCD is not set
++# CONFIG_USB_MUSB_HDRC is not set
++# CONFIG_USB_GADGET_MUSB_HDRC is not set
++
++#
++# USB Device Class drivers
++#
++# CONFIG_USB_ACM is not set
++# CONFIG_USB_PRINTER is not set
++# CONFIG_USB_WDM is not set
++# CONFIG_USB_TMC is not set
++
++#
++# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
++#
++
++#
++# also be needed; see USB_STORAGE Help for more info
++#
++CONFIG_USB_STORAGE=y
++# CONFIG_USB_STORAGE_DEBUG is not set
++# CONFIG_USB_STORAGE_DATAFAB is not set
++# CONFIG_USB_STORAGE_FREECOM is not set
++# CONFIG_USB_STORAGE_ISD200 is not set
++# CONFIG_USB_STORAGE_USBAT is not set
++# CONFIG_USB_STORAGE_SDDR09 is not set
++# CONFIG_USB_STORAGE_SDDR55 is not set
++# CONFIG_USB_STORAGE_JUMPSHOT is not set
++# CONFIG_USB_STORAGE_ALAUDA is not set
++# CONFIG_USB_STORAGE_ONETOUCH is not set
++# CONFIG_USB_STORAGE_KARMA is not set
++# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
++# CONFIG_USB_LIBUSUAL is not set
++
++#
++# USB Imaging devices
++#
++# CONFIG_USB_MDC800 is not set
++# CONFIG_USB_MICROTEK is not set
++
++#
++# USB port drivers
++#
++# CONFIG_USB_SERIAL is not set
++
++#
++# USB Miscellaneous drivers
++#
++# CONFIG_USB_EMI62 is not set
++# CONFIG_USB_EMI26 is not set
++# CONFIG_USB_ADUTUX is not set
++# CONFIG_USB_SEVSEG is not set
++# CONFIG_USB_RIO500 is not set
++# CONFIG_USB_LEGOTOWER is not set
++# CONFIG_USB_LCD is not set
++# CONFIG_USB_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_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
++# CONFIG_USB_ISIGHTFW is not set
++# CONFIG_USB_VST is not set
++CONFIG_USB_GADGET=y
++# CONFIG_USB_GADGET_DEBUG_FILES is not set
++CONFIG_USB_GADGET_VBUS_DRAW=2
++CONFIG_USB_GADGET_SELECTED=y
++CONFIG_USB_GADGET_AT91=y
++CONFIG_USB_AT91=y
++# CONFIG_USB_GADGET_ATMEL_USBA is not set
++# CONFIG_USB_GADGET_FSL_USB2 is not set
++# CONFIG_USB_GADGET_LH7A40X is not set
++# CONFIG_USB_GADGET_OMAP is not set
++# CONFIG_USB_GADGET_PXA25X is not set
++# CONFIG_USB_GADGET_PXA27X is not set
++# CONFIG_USB_GADGET_S3C2410 is not set
++# CONFIG_USB_GADGET_IMX is not set
++# CONFIG_USB_GADGET_M66592 is not set
++# CONFIG_USB_GADGET_AMD5536UDC is not set
++# CONFIG_USB_GADGET_FSL_QE is not set
++# CONFIG_USB_GADGET_CI13XXX is not set
++# CONFIG_USB_GADGET_NET2280 is not set
++# CONFIG_USB_GADGET_GOKU 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 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_USB_G_PRINTER is not set
++CONFIG_USB_CDC_COMPOSITE=m
++
++#
++# OTG and related infrastructure
++#
++# CONFIG_USB_GPIO_VBUS is not set
++# CONFIG_NOP_USB_XCEIV is not set
++CONFIG_MMC=y
++# CONFIG_MMC_DEBUG is not set
++# CONFIG_MMC_UNSAFE_RESUME is not set
++
++#
++# MMC/SD/SDIO Card Drivers
++#
++CONFIG_MMC_BLOCK=y
++CONFIG_MMC_BLOCK_BOUNCE=y
++CONFIG_SDIO_UART=m
++# CONFIG_MMC_TEST is not set
++
++#
++# MMC/SD/SDIO Host Controller Drivers
++#
++# CONFIG_MMC_SDHCI is not set
++CONFIG_MMC_AT91=m
++# CONFIG_MMC_ATMELMCI is not set
++# CONFIG_MMC_SPI is not set
++# CONFIG_MEMSTICK is not set
++# CONFIG_ACCESSIBILITY is not set
++CONFIG_NEW_LEDS=y
++CONFIG_LEDS_CLASS=y
++
++#
++# LED drivers
++#
++CONFIG_LEDS_GPIO=y
++CONFIG_LEDS_GPIO_PLATFORM=y
++# CONFIG_LEDS_DAC124S085 is not set
++
++#
++# LED Triggers
++#
++CONFIG_LEDS_TRIGGERS=y
++CONFIG_LEDS_TRIGGER_TIMER=y
++CONFIG_LEDS_TRIGGER_HEARTBEAT=y
++# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
++CONFIG_LEDS_TRIGGER_GPIO=y
++# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set
++
++#
++# iptables trigger is under Netfilter config (LED target)
++#
++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
++#
++# CONFIG_RTC_DRV_M41T94 is not set
++# CONFIG_RTC_DRV_DS1305 is not set
++# CONFIG_RTC_DRV_DS1390 is not set
++# CONFIG_RTC_DRV_MAX6902 is not set
++# CONFIG_RTC_DRV_R9701 is not set
++# CONFIG_RTC_DRV_RS5C348 is not set
++# CONFIG_RTC_DRV_DS3234 is not set
++
++#
++# Platform RTC drivers
++#
++# CONFIG_RTC_DRV_CMOS is not set
++# CONFIG_RTC_DRV_DS1286 is not set
++# CONFIG_RTC_DRV_DS1511 is not set
++# CONFIG_RTC_DRV_DS1553 is not set
++# CONFIG_RTC_DRV_DS1742 is not set
++# CONFIG_RTC_DRV_STK17TA8 is not set
++# CONFIG_RTC_DRV_M48T86 is not set
++# CONFIG_RTC_DRV_M48T35 is not set
++# CONFIG_RTC_DRV_M48T59 is not set
++# CONFIG_RTC_DRV_BQ4802 is not set
++# CONFIG_RTC_DRV_V3020 is not set
++
++#
++# on-CPU RTC drivers
++#
++CONFIG_RTC_DRV_AT91SAM9=y
++CONFIG_RTC_DRV_AT91SAM9_RTT=0
++CONFIG_RTC_DRV_AT91SAM9_GPBR=0
++# CONFIG_DMADEVICES is not set
++# CONFIG_AUXDISPLAY is not set
++# CONFIG_REGULATOR is not set
++# CONFIG_UIO is not set
++# CONFIG_STAGING is not set
++
++#
++# File systems
++#
++CONFIG_EXT2_FS=y
++# CONFIG_EXT2_FS_XATTR is not set
++# CONFIG_EXT2_FS_XIP is not set
++# CONFIG_EXT3_FS is not set
++# CONFIG_EXT4_FS is not set
++# CONFIG_REISERFS_FS is not set
++# CONFIG_JFS_FS is not set
++# CONFIG_FS_POSIX_ACL is not set
++CONFIG_FILE_LOCKING=y
++# CONFIG_XFS_FS is not set
++# CONFIG_OCFS2_FS is not set
++# CONFIG_BTRFS_FS is not set
++CONFIG_DNOTIFY=y
++CONFIG_INOTIFY=y
++CONFIG_INOTIFY_USER=y
++# CONFIG_QUOTA is not set
++# CONFIG_AUTOFS_FS is not set
++# CONFIG_AUTOFS4_FS is not set
++# CONFIG_FUSE_FS is not set
++
++#
++# Caches
++#
++# CONFIG_FSCACHE is not set
++
++#
++# CD-ROM/DVD Filesystems
++#
++# CONFIG_ISO9660_FS is not set
++# CONFIG_UDF_FS is not set
++
++#
++# DOS/FAT/NT Filesystems
++#
++CONFIG_FAT_FS=y
++CONFIG_MSDOS_FS=y
++CONFIG_VFAT_FS=y
++CONFIG_FAT_DEFAULT_CODEPAGE=437
++CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
++# CONFIG_NTFS_FS is not set
++
++#
++# Pseudo filesystems
++#
++CONFIG_PROC_FS=y
++CONFIG_PROC_SYSCTL=y
++CONFIG_PROC_PAGE_MONITOR=y
++CONFIG_SYSFS=y
++CONFIG_TMPFS=y
++# CONFIG_TMPFS_POSIX_ACL is not set
++# CONFIG_HUGETLB_PAGE is not set
++# CONFIG_CONFIGFS_FS is not set
++CONFIG_MISC_FILESYSTEMS=y
++# CONFIG_ADFS_FS is not set
++# CONFIG_AFFS_FS is not set
++# CONFIG_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=m
++CONFIG_SQUASHFS=m
++CONFIG_SQUASHFS_EMBEDDED=y
++CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
++# CONFIG_VXFS_FS is not set
++# CONFIG_MINIX_FS is not set
++# CONFIG_OMFS_FS is not set
++# CONFIG_HPFS_FS is not set
++# CONFIG_QNX4FS_FS is not set
++# CONFIG_ROMFS_FS is not set
++# CONFIG_SYSV_FS is not set
++# CONFIG_UFS_FS is not set
++# CONFIG_NILFS2_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_NFSD is not set
++CONFIG_LOCKD=y
++CONFIG_LOCKD_V4=y
++CONFIG_NFS_COMMON=y
++CONFIG_SUNRPC=y
++# CONFIG_RPCSEC_GSS_KRB5 is not set
++# CONFIG_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=y
++# CONFIG_NLS_KOI8_R is not set
++# CONFIG_NLS_KOI8_U is not set
++CONFIG_NLS_UTF8=y
++# CONFIG_DLM is not set
++
++#
++# Kernel hacking
++#
++# CONFIG_PRINTK_TIME is not set
++CONFIG_ENABLE_WARN_DEPRECATED=y
++CONFIG_ENABLE_MUST_CHECK=y
++CONFIG_FRAME_WARN=1024
++# 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_DEBUG_MEMORY_INIT=y
++# CONFIG_RCU_CPU_STALL_DETECTOR is not set
++# CONFIG_LATENCYTOP is not set
++# CONFIG_SYSCTL_SYSCALL_CHECK is not set
++CONFIG_HAVE_FUNCTION_TRACER=y
++CONFIG_TRACING_SUPPORT=y
++
++#
++# Tracers
++#
++# CONFIG_FUNCTION_TRACER is not set
++# CONFIG_IRQSOFF_TRACER is not set
++# CONFIG_SCHED_TRACER is not set
++# CONFIG_CONTEXT_SWITCH_TRACER is not set
++# CONFIG_EVENT_TRACER is not set
++# CONFIG_BOOT_TRACER is not set
++# CONFIG_TRACE_BRANCH_PROFILING is not set
++# CONFIG_STACK_TRACER is not set
++# CONFIG_KMEMTRACE is not set
++# CONFIG_WORKQUEUE_TRACER is not set
++# CONFIG_BLK_DEV_IO_TRACE is not set
++# CONFIG_SAMPLES is not set
++CONFIG_HAVE_ARCH_KGDB=y
++CONFIG_ARM_UNWIND=y
++CONFIG_DEBUG_USER=y
++
++#
++# Security options
++#
++# CONFIG_KEYS is not set
++# CONFIG_SECURITY is not set
++# CONFIG_SECURITYFS is not set
++# CONFIG_SECURITY_FILE_CAPABILITIES is not set
++CONFIG_CRYPTO=y
++
++#
++# Crypto core or helper
++#
++# CONFIG_CRYPTO_FIPS is not set
++CONFIG_CRYPTO_ALGAPI=y
++CONFIG_CRYPTO_ALGAPI2=y
++CONFIG_CRYPTO_AEAD2=y
++CONFIG_CRYPTO_BLKCIPHER=y
++CONFIG_CRYPTO_BLKCIPHER2=y
++CONFIG_CRYPTO_HASH2=y
++CONFIG_CRYPTO_RNG2=y
++CONFIG_CRYPTO_PCOMP=y
++CONFIG_CRYPTO_MANAGER=y
++CONFIG_CRYPTO_MANAGER2=y
++# CONFIG_CRYPTO_GF128MUL is not set
++# CONFIG_CRYPTO_NULL is not set
++CONFIG_CRYPTO_WORKQUEUE=y
++# CONFIG_CRYPTO_CRYPTD is not set
++# CONFIG_CRYPTO_AUTHENC is not set
++# CONFIG_CRYPTO_TEST is not set
++
++#
++# Authenticated Encryption with Associated Data
++#
++# CONFIG_CRYPTO_CCM is not set
++# CONFIG_CRYPTO_GCM is not set
++# CONFIG_CRYPTO_SEQIV is not set
++
++#
++# Block modes
++#
++# CONFIG_CRYPTO_CBC is not set
++# CONFIG_CRYPTO_CTR is not set
++# CONFIG_CRYPTO_CTS is not set
++CONFIG_CRYPTO_ECB=y
++# CONFIG_CRYPTO_LRW is not set
++# CONFIG_CRYPTO_PCBC is not set
++# CONFIG_CRYPTO_XTS is not set
++
++#
++# Hash modes
++#
++# CONFIG_CRYPTO_HMAC is not set
++# CONFIG_CRYPTO_XCBC is not set
++
++#
++# Digest
++#
++# CONFIG_CRYPTO_CRC32C is not set
++# CONFIG_CRYPTO_MD4 is not set
++# CONFIG_CRYPTO_MD5 is not set
++# CONFIG_CRYPTO_MICHAEL_MIC is not set
++# CONFIG_CRYPTO_RMD128 is not set
++# CONFIG_CRYPTO_RMD160 is not set
++# CONFIG_CRYPTO_RMD256 is not set
++# CONFIG_CRYPTO_RMD320 is not set
++# CONFIG_CRYPTO_SHA1 is not set
++# CONFIG_CRYPTO_SHA256 is not set
++# CONFIG_CRYPTO_SHA512 is not set
++# CONFIG_CRYPTO_TGR192 is not set
++# CONFIG_CRYPTO_WP512 is not set
++
++#
++# Ciphers
++#
++CONFIG_CRYPTO_AES=y
++# CONFIG_CRYPTO_ANUBIS is not set
++CONFIG_CRYPTO_ARC4=y
++# CONFIG_CRYPTO_BLOWFISH is not set
++# CONFIG_CRYPTO_CAMELLIA is not set
++# CONFIG_CRYPTO_CAST5 is not set
++# CONFIG_CRYPTO_CAST6 is not set
++# CONFIG_CRYPTO_DES is not set
++# CONFIG_CRYPTO_FCRYPT is not set
++# CONFIG_CRYPTO_KHAZAD is not set
++# CONFIG_CRYPTO_SALSA20 is not set
++# CONFIG_CRYPTO_SEED is not set
++# CONFIG_CRYPTO_SERPENT is not set
++# CONFIG_CRYPTO_TEA is not set
++# CONFIG_CRYPTO_TWOFISH is not set
++
++#
++# Compression
++#
++# CONFIG_CRYPTO_DEFLATE is not set
++# CONFIG_CRYPTO_ZLIB is not set
++# CONFIG_CRYPTO_LZO is not set
++
++#
++# Random Number Generation
++#
++# CONFIG_CRYPTO_ANSI_CPRNG is not set
++# CONFIG_CRYPTO_HW is not set
++# CONFIG_BINARY_PRINTF is not set
++
++#
++# Library routines
++#
++CONFIG_BITREVERSE=y
++CONFIG_GENERIC_FIND_LAST_BIT=y
++# CONFIG_CRC_CCITT is not set
++# CONFIG_CRC16 is not set
++# CONFIG_CRC_T10DIF is not set
++CONFIG_CRC_ITU_T=m
++CONFIG_CRC32=y
++CONFIG_CRC7=m
++# CONFIG_LIBCRC32C is not set
++CONFIG_ZLIB_INFLATE=y
++CONFIG_ZLIB_DEFLATE=y
++CONFIG_DECOMPRESS_GZIP=y
++CONFIG_DECOMPRESS_BZIP2=y
++CONFIG_DECOMPRESS_LZMA=y
++CONFIG_HAS_IOMEM=y
++CONFIG_HAS_IOPORT=y
++CONFIG_HAS_DMA=y
++CONFIG_NLATTR=y
+Index: linux-2.6.30/arch/arm/configs/at91sam9xeek_defconfig
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.30/arch/arm/configs/at91sam9xeek_defconfig       2011-02-01 16:40:30.200115764 +0100
+@@ -0,0 +1,1487 @@
++#
++# Automatically generated make config: don't edit
++# Linux kernel version: 2.6.30
++# Tue Oct 13 12:38:49 2009
++#
++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_HAVE_LATENCYTOP_SUPPORT=y
++CONFIG_LOCKDEP_SUPPORT=y
++CONFIG_TRACE_IRQFLAGS_SUPPORT=y
++CONFIG_HARDIRQS_SW_RESEND=y
++CONFIG_GENERIC_IRQ_PROBE=y
++CONFIG_RWSEM_GENERIC_SPINLOCK=y
++# CONFIG_ARCH_HAS_ILOG2_U32 is not set
++# CONFIG_ARCH_HAS_ILOG2_U64 is not set
++CONFIG_GENERIC_HWEIGHT=y
++CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=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_AUDIT is not set
++
++#
++# RCU Subsystem
++#
++CONFIG_CLASSIC_RCU=y
++# CONFIG_TREE_RCU is not set
++# CONFIG_PREEMPT_RCU is not set
++# CONFIG_TREE_RCU_TRACE is not set
++# CONFIG_PREEMPT_RCU_TRACE is not set
++# CONFIG_IKCONFIG is not set
++CONFIG_LOG_BUF_SHIFT=14
++# CONFIG_GROUP_SCHED is not set
++# CONFIG_CGROUPS is not set
++CONFIG_SYSFS_DEPRECATED=y
++CONFIG_SYSFS_DEPRECATED_V2=y
++# CONFIG_RELAY is not set
++CONFIG_NAMESPACES=y
++# CONFIG_UTS_NS is not set
++# CONFIG_IPC_NS is not set
++# CONFIG_USER_NS is not set
++# CONFIG_PID_NS is not set
++# CONFIG_NET_NS is not set
++CONFIG_BLK_DEV_INITRD=y
++CONFIG_INITRAMFS_SOURCE=""
++CONFIG_RD_GZIP=y
++CONFIG_RD_BZIP2=y
++CONFIG_RD_LZMA=y
++CONFIG_CC_OPTIMIZE_FOR_SIZE=y
++CONFIG_SYSCTL=y
++CONFIG_ANON_INODES=y
++# CONFIG_EMBEDDED is not set
++CONFIG_UID16=y
++CONFIG_SYSCTL_SYSCALL=y
++CONFIG_KALLSYMS=y
++# CONFIG_KALLSYMS_EXTRA_PASS is not set
++CONFIG_STRIP_ASM_SYMS=y
++CONFIG_HOTPLUG=y
++CONFIG_PRINTK=y
++CONFIG_BUG=y
++CONFIG_ELF_CORE=y
++CONFIG_BASE_FULL=y
++CONFIG_FUTEX=y
++CONFIG_EPOLL=y
++CONFIG_SIGNALFD=y
++CONFIG_TIMERFD=y
++CONFIG_EVENTFD=y
++CONFIG_SHMEM=y
++CONFIG_AIO=y
++CONFIG_VM_EVENT_COUNTERS=y
++CONFIG_COMPAT_BRK=y
++CONFIG_SLAB=y
++# CONFIG_SLUB is not set
++# CONFIG_SLOB is not set
++# CONFIG_PROFILING is not set
++# CONFIG_MARKERS is not set
++CONFIG_HAVE_OPROFILE=y
++# CONFIG_KPROBES is not set
++CONFIG_HAVE_KPROBES=y
++CONFIG_HAVE_KRETPROBES=y
++CONFIG_HAVE_CLK=y
++# CONFIG_SLOW_WORK is not set
++CONFIG_HAVE_GENERIC_DMA_COHERENT=y
++CONFIG_SLABINFO=y
++CONFIG_RT_MUTEXES=y
++CONFIG_BASE_SMALL=0
++CONFIG_MODULES=y
++# CONFIG_MODULE_FORCE_LOAD is not set
++CONFIG_MODULE_UNLOAD=y
++# CONFIG_MODULE_FORCE_UNLOAD is not set
++# CONFIG_MODVERSIONS is not set
++# CONFIG_MODULE_SRCVERSION_ALL is not set
++CONFIG_BLOCK=y
++# CONFIG_LBD is not set
++# CONFIG_BLK_DEV_BSG is not set
++# CONFIG_BLK_DEV_INTEGRITY 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"
++CONFIG_FREEZER=y
++
++#
++# 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_CLPS711X is not set
++# CONFIG_ARCH_EBSA110 is not set
++# CONFIG_ARCH_EP93XX is not set
++# CONFIG_ARCH_GEMINI 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_KIRKWOOD is not set
++# CONFIG_ARCH_KS8695 is not set
++# CONFIG_ARCH_NS9XXX is not set
++# CONFIG_ARCH_LOKI is not set
++# CONFIG_ARCH_MV78XX0 is not set
++# CONFIG_ARCH_MXC is not set
++# CONFIG_ARCH_ORION5X is not set
++# CONFIG_ARCH_PNX4008 is not set
++# CONFIG_ARCH_PXA is not set
++# CONFIG_ARCH_MMP is not set
++# CONFIG_ARCH_RPC is not set
++# CONFIG_ARCH_SA1100 is not set
++# CONFIG_ARCH_S3C2410 is not set
++# CONFIG_ARCH_S3C64XX is not set
++# CONFIG_ARCH_SHARK is not set
++# CONFIG_ARCH_LH7A40X is not set
++# CONFIG_ARCH_DAVINCI is not set
++# CONFIG_ARCH_OMAP is not set
++# CONFIG_ARCH_MSM is not set
++# CONFIG_ARCH_W90X900 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_AT91SAM9G10 is not set
++# CONFIG_ARCH_AT91SAM9263 is not set
++# CONFIG_ARCH_AT91SAM9RL is not set
++# CONFIG_ARCH_AT91SAM9G20 is not set
++# CONFIG_ARCH_AT91SAM9G45 is not set
++# CONFIG_ARCH_AT91CAP9 is not set
++# CONFIG_ARCH_AT572D940HF 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
++# CONFIG_MACH_AFEB9260 is not set
++# CONFIG_MACH_USB_A9260 is not set
++# CONFIG_MACH_QIL_A9260 is not set
++# CONFIG_MACH_SBC35_A9260 is not set
++
++#
++# AT91 Board Options
++#
++# CONFIG_MTD_AT91_DATAFLASH_CARD is not set
++# CONFIG_MTD_NAND_ATMEL_BUSWIDTH_16 is not set
++
++#
++# AT91 Feature Selections
++#
++CONFIG_AT91_PROGRAMMABLE_CLOCKS=y
++# CONFIG_AT91_SLOW_CLOCK is not set
++CONFIG_AT91_TIMER_HZ=100
++CONFIG_AT91_EARLY_DBGU=y
++# CONFIG_AT91_EARLY_USART0 is not set
++# CONFIG_AT91_EARLY_USART1 is not set
++# CONFIG_AT91_EARLY_USART2 is not set
++# CONFIG_AT91_EARLY_USART3 is not set
++# CONFIG_AT91_EARLY_USART4 is not set
++# CONFIG_AT91_EARLY_USART5 is not set
++
++#
++# Processor Type
++#
++CONFIG_CPU_32=y
++CONFIG_CPU_ARM926T=y
++CONFIG_CPU_32v5=y
++CONFIG_CPU_ABRT_EV5TJ=y
++CONFIG_CPU_PABRT_NOIFAR=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
++# CONFIG_PCCARD is not set
++
++#
++# Kernel Features
++#
++# CONFIG_NO_HZ is not set
++# CONFIG_HIGH_RES_TIMERS is not set
++CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
++CONFIG_VMSPLIT_3G=y
++# CONFIG_VMSPLIT_2G is not set
++# CONFIG_VMSPLIT_1G is not set
++CONFIG_PAGE_OFFSET=0xC0000000
++# CONFIG_PREEMPT is not set
++CONFIG_HZ=100
++CONFIG_AEABI=y
++CONFIG_OABI_COMPAT=y
++# CONFIG_ARCH_HAS_HOLES_MEMORYMODEL is not set
++# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
++# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
++# CONFIG_HIGHMEM is not set
++CONFIG_SELECT_MEMORY_MODEL=y
++CONFIG_FLATMEM_MANUAL=y
++# CONFIG_DISCONTIGMEM_MANUAL is not set
++# CONFIG_SPARSEMEM_MANUAL is not set
++CONFIG_FLATMEM=y
++CONFIG_FLAT_NODE_MEM_MAP=y
++CONFIG_PAGEFLAGS_EXTENDED=y
++CONFIG_SPLIT_PTLOCK_CPUS=4096
++# CONFIG_PHYS_ADDR_T_64BIT is not set
++CONFIG_ZONE_DMA_FLAG=0
++CONFIG_VIRT_TO_BUS=y
++CONFIG_UNEVICTABLE_LRU=y
++CONFIG_HAVE_MLOCK=y
++CONFIG_HAVE_MLOCKED_PAGE_BIT=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="mem=64M console=ttyS0,115200 initrd=0x21100000,3145728 root=/dev/ram0 rw"
++# CONFIG_XIP_KERNEL is not set
++# CONFIG_KEXEC is not set
++
++#
++# CPU Power Management
++#
++# CONFIG_CPU_IDLE is not set
++
++#
++# Floating point emulation
++#
++
++#
++# At least one emulation must be selected
++#
++CONFIG_FPE_NWFPE=y
++# CONFIG_FPE_NWFPE_XP is not set
++# CONFIG_FPE_FASTFPE is not set
++# CONFIG_VFP is not set
++
++#
++# Userspace binary formats
++#
++CONFIG_BINFMT_ELF=y
++# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
++CONFIG_HAVE_AOUT=y
++# CONFIG_BINFMT_AOUT is not set
++# CONFIG_BINFMT_MISC is not set
++
++#
++# Power management options
++#
++CONFIG_PM=y
++# CONFIG_PM_DEBUG is not set
++CONFIG_PM_SLEEP=y
++CONFIG_SUSPEND=y
++CONFIG_SUSPEND_FREEZER=y
++# CONFIG_APM_EMULATION is not set
++CONFIG_ARCH_SUSPEND_POSSIBLE=y
++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 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_IPV6 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_NET_DSA is not set
++# CONFIG_VLAN_8021Q is not set
++# CONFIG_DECNET is not set
++# CONFIG_LLC2 is not set
++# CONFIG_IPX is not set
++# CONFIG_ATALK is not set
++# CONFIG_X25 is not set
++# CONFIG_LAPB is not set
++# CONFIG_ECONET is not set
++# CONFIG_WAN_ROUTER is not set
++# CONFIG_PHONET is not set
++# CONFIG_NET_SCHED is not set
++# CONFIG_DCB is not set
++
++#
++# Network testing
++#
++# CONFIG_NET_PKTGEN is not set
++# CONFIG_HAMRADIO is not set
++# CONFIG_CAN is not set
++# CONFIG_IRDA is not set
++# CONFIG_BT is not set
++# CONFIG_AF_RXRPC is not set
++CONFIG_WIRELESS=y
++CONFIG_CFG80211=y
++# CONFIG_CFG80211_REG_DEBUG is not set
++# CONFIG_WIRELESS_OLD_REGULATORY is not set
++CONFIG_WIRELESS_EXT=y
++CONFIG_WIRELESS_EXT_SYSFS=y
++CONFIG_LIB80211=y
++# CONFIG_LIB80211_DEBUG is not set
++CONFIG_MAC80211=y
++
++#
++# Rate control algorithm selection
++#
++CONFIG_MAC80211_RC_MINSTREL=y
++# CONFIG_MAC80211_RC_DEFAULT_PID is not set
++CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
++CONFIG_MAC80211_RC_DEFAULT="minstrel"
++# CONFIG_MAC80211_MESH is not set
++# CONFIG_MAC80211_LEDS is not set
++# CONFIG_MAC80211_DEBUG_MENU is not set
++# CONFIG_WIMAX 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_FIRMWARE_IN_KERNEL=y
++CONFIG_EXTRA_FIRMWARE=""
++# CONFIG_SYS_HYPERVISOR is not set
++# CONFIG_CONNECTOR is not set
++CONFIG_MTD=y
++# CONFIG_MTD_DEBUG is not set
++# CONFIG_MTD_CONCAT is not set
++CONFIG_MTD_PARTITIONS=y
++# CONFIG_MTD_TESTS is not set
++# CONFIG_MTD_REDBOOT_PARTS is not set
++CONFIG_MTD_CMDLINE_PARTS=y
++# CONFIG_MTD_AFS_PARTS is not set
++# CONFIG_MTD_AR7_PARTS is not set
++
++#
++# User Modules And Translation Layers
++#
++CONFIG_MTD_CHAR=y
++CONFIG_MTD_BLKDEVS=y
++CONFIG_MTD_BLOCK=y
++# CONFIG_FTL is not set
++# CONFIG_NFTL is not set
++# CONFIG_INFTL is not set
++# CONFIG_RFD_FTL is not set
++# CONFIG_SSFDC is not set
++# CONFIG_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=y
++# CONFIG_MTD_DATAFLASH_WRITE_VERIFY is not set
++# CONFIG_MTD_DATAFLASH_OTP 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_GPIO is not set
++CONFIG_MTD_NAND_IDS=y
++# CONFIG_MTD_NAND_DISKONCHIP is not set
++CONFIG_MTD_NAND_ATMEL=y
++CONFIG_MTD_NAND_ATMEL_ECC_SOFT=y
++# CONFIG_MTD_NAND_ATMEL_ECC_HW is not set
++# CONFIG_MTD_NAND_ATMEL_ECC_NONE is not set
++# CONFIG_MTD_NAND_NANDSIM is not set
++# CONFIG_MTD_NAND_PLATFORM is not set
++# CONFIG_MTD_ALAUDA is not set
++# CONFIG_MTD_ONENAND is not set
++
++#
++# LPDDR flash memory drivers
++#
++# CONFIG_MTD_LPDDR is not set
++
++#
++# 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=4
++CONFIG_BLK_DEV_RAM_SIZE=8192
++# CONFIG_BLK_DEV_XIP is not set
++# CONFIG_CDROM_PKTCDVD is not set
++# CONFIG_ATA_OVER_ETH is not set
++CONFIG_MISC_DEVICES=y
++CONFIG_ATMEL_TCLIB=y
++CONFIG_ATMEL_TCB_CLKSRC=y
++CONFIG_ATMEL_TCB_CLKSRC_BLOCK=0
++CONFIG_ATMEL_SSC=y
++# CONFIG_ENCLOSURE_SERVICES is not set
++# CONFIG_C2PORT is not set
++
++#
++# EEPROM support
++#
++# CONFIG_EEPROM_AT25 is not set
++CONFIG_EEPROM_93CX6=m
++CONFIG_HAVE_IDE=y
++# 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=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 is not set
++# CONFIG_SCSI_DH is not set
++# CONFIG_SCSI_OSD_INITIATOR is not set
++# CONFIG_ATA is not set
++# CONFIG_MD is not set
++CONFIG_NETDEVICES=y
++# CONFIG_COMPAT_NET_DEV_OPS 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=y
++# 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_REALTEK_PHY is not set
++# CONFIG_NATIONAL_PHY is not set
++# CONFIG_STE10XP is not set
++# CONFIG_LSI_ET1011C_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_MACB_TX_SRAM=y
++# CONFIG_AX88796 is not set
++# CONFIG_SMC91X is not set
++# CONFIG_DM9000 is not set
++# CONFIG_ENC28J60 is not set
++# CONFIG_ETHOC is not set
++# CONFIG_SMC911X is not set
++# CONFIG_SMSC911X is not set
++# CONFIG_DNET is not set
++# CONFIG_IBM_NEW_EMAC_ZMII is not set
++# CONFIG_IBM_NEW_EMAC_RGMII is not set
++# CONFIG_IBM_NEW_EMAC_TAH is not set
++# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
++# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
++# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
++# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
++# CONFIG_B44 is not set
++# CONFIG_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_SPI is not set
++# CONFIG_LIBERTAS_DEBUG is not set
++# CONFIG_LIBERTAS_THINFIRM is not set
++# CONFIG_AT76C50X_USB is not set
++CONFIG_USB_ZD1201=m
++# CONFIG_USB_NET_RNDIS_WLAN is not set
++CONFIG_RTL8187=m
++# CONFIG_MAC80211_HWSIM is not set
++# CONFIG_P54_COMMON is not set
++CONFIG_AR9170_USB=m
++# CONFIG_HOSTAP is not set
++# CONFIG_B43 is not set
++# CONFIG_B43LEGACY is not set
++CONFIG_ZD1211RW=m
++# CONFIG_ZD1211RW_DEBUG is not set
++CONFIG_RT2X00=m
++CONFIG_RT2500USB=m
++CONFIG_RT73USB=m
++CONFIG_RT2X00_LIB_USB=m
++CONFIG_RT2X00_LIB=m
++CONFIG_RT2X00_LIB_FIRMWARE=y
++CONFIG_RT2X00_LIB_CRYPTO=y
++CONFIG_RT2X00_LIB_RFKILL=y
++CONFIG_RT2X00_LIB_LEDS=y
++# CONFIG_RT2X00_DEBUG is not set
++
++#
++# Enable WiMAX (Networking options) to see the WiMAX drivers
++#
++
++#
++# USB Network Adapters
++#
++# CONFIG_USB_CATC is not set
++# CONFIG_USB_KAWETH is not set
++# CONFIG_USB_PEGASUS is not set
++# CONFIG_USB_RTL8150 is not set
++# CONFIG_USB_USBNET is not set
++# CONFIG_WAN is not set
++# CONFIG_PPP is not set
++# CONFIG_SLIP is not set
++# CONFIG_NETCONSOLE is not set
++# CONFIG_NETPOLL is not set
++# CONFIG_NET_POLL_CONTROLLER is not set
++# CONFIG_ISDN is not set
++
++#
++# Input device support
++#
++CONFIG_INPUT=y
++# CONFIG_INPUT_FF_MEMLESS is not set
++CONFIG_INPUT_POLLDEV=m
++
++#
++# Userland interfaces
++#
++CONFIG_INPUT_MOUSEDEV=y
++# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
++CONFIG_INPUT_MOUSEDEV_SCREEN_X=320
++CONFIG_INPUT_MOUSEDEV_SCREEN_Y=240
++# 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_GPIO=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 is not set
++
++#
++# Hardware I/O ports
++#
++CONFIG_SERIO=y
++CONFIG_SERIO_SERPORT=y
++# CONFIG_SERIO_RAW is not set
++# CONFIG_GAMEPORT is not set
++
++#
++# Character devices
++#
++CONFIG_VT=y
++CONFIG_CONSOLE_TRANSLATIONS=y
++CONFIG_VT_CONSOLE=y
++CONFIG_HW_CONSOLE=y
++# CONFIG_VT_HW_CONSOLE_BINDING is not set
++CONFIG_DEVKMEM=y
++# 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_PDC=y
++# CONFIG_SERIAL_ATMEL_TTYAT is not set
++# CONFIG_SERIAL_MAX3100 is not set
++CONFIG_SERIAL_CORE=y
++CONFIG_SERIAL_CORE_CONSOLE=y
++CONFIG_UNIX98_PTYS=y
++# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
++CONFIG_LEGACY_PTYS=y
++CONFIG_LEGACY_PTY_COUNT=4
++# CONFIG_IPMI_HANDLER is not set
++CONFIG_HW_RANDOM=y
++# CONFIG_HW_RANDOM_TIMERIOMEM is not set
++# CONFIG_R3964 is not set
++# CONFIG_RAW_DRIVER is not set
++# CONFIG_TCG_TPM is not set
++# CONFIG_I2C is not set
++CONFIG_SPI=y
++CONFIG_SPI_MASTER=y
++
++#
++# SPI Master Controller Drivers
++#
++CONFIG_SPI_ATMEL=y
++# CONFIG_SPI_BITBANG is not set
++# CONFIG_SPI_GPIO is not set
++
++#
++# SPI Protocol Masters
++#
++CONFIG_SPI_SPIDEV=y
++# CONFIG_SPI_TLE62X0 is not set
++CONFIG_ARCH_REQUIRE_GPIOLIB=y
++CONFIG_GPIOLIB=y
++# CONFIG_GPIO_SYSFS is not set
++
++#
++# Memory mapped GPIO expanders:
++#
++
++#
++# I2C GPIO expanders:
++#
++
++#
++# PCI GPIO expanders:
++#
++
++#
++# SPI GPIO expanders:
++#
++# CONFIG_GPIO_MAX7301 is not set
++# CONFIG_GPIO_MCP23S08 is not set
++# CONFIG_W1 is not set
++# CONFIG_POWER_SUPPLY is not set
++# CONFIG_HWMON is not set
++# CONFIG_THERMAL is not set
++# CONFIG_THERMAL_HWMON is not set
++# CONFIG_WATCHDOG is not set
++CONFIG_SSB_POSSIBLE=y
++
++#
++# Sonics Silicon Backplane
++#
++# CONFIG_SSB is not set
++
++#
++# Multifunction device drivers
++#
++# CONFIG_MFD_CORE is not set
++# CONFIG_MFD_SM501 is not set
++# CONFIG_MFD_ASIC3 is not set
++# CONFIG_HTC_EGPIO is not set
++# CONFIG_HTC_PASIC3 is not set
++# CONFIG_MFD_TMIO is not set
++# CONFIG_MFD_T7L66XB is not set
++# CONFIG_MFD_TC6387XB is not set
++# CONFIG_MFD_TC6393XB is not set
++
++#
++# Multimedia devices
++#
++
++#
++# Multimedia core support
++#
++# CONFIG_VIDEO_DEV is not set
++# CONFIG_DVB_CORE is not set
++# CONFIG_VIDEO_MEDIA is not set
++
++#
++# Multimedia drivers
++#
++# 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
++
++#
++# Console display driver support
++#
++# CONFIG_VGA_CONSOLE is not set
++CONFIG_DUMMY_CONSOLE=y
++CONFIG_SOUND=y
++CONFIG_SOUND_OSS_CORE=y
++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_PCM_OSS_PLUGINS=y
++# CONFIG_SND_SEQUENCER_OSS is not set
++# 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
++# CONFIG_SND_DRIVERS is not set
++# CONFIG_SND_ARM is not set
++
++#
++# Atmel devices (AVR32 and AT91)
++#
++# CONFIG_SND_ATMEL_AC97C is not set
++CONFIG_SND_SPI=y
++CONFIG_SND_AT73C213=y
++CONFIG_SND_AT73C213_TARGET_BITRATE=48000
++CONFIG_SND_USB=y
++CONFIG_SND_USB_AUDIO=m
++# CONFIG_SND_USB_CAIAQ is not set
++# CONFIG_SND_SOC is not set
++# 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
++# CONFIG_HID_PID is not set
++
++#
++# Special HID drivers
++#
++CONFIG_USB_SUPPORT=y
++CONFIG_USB_ARCH_HAS_HCD=y
++CONFIG_USB_ARCH_HAS_OHCI=y
++# CONFIG_USB_ARCH_HAS_EHCI is not set
++CONFIG_USB=y
++# CONFIG_USB_DEBUG is not set
++# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
++
++#
++# Miscellaneous USB options
++#
++CONFIG_USB_DEVICEFS=y
++# CONFIG_USB_DEVICE_CLASS is not set
++# CONFIG_USB_DYNAMIC_MINORS is not set
++# CONFIG_USB_SUSPEND is not set
++# CONFIG_USB_OTG is not set
++# CONFIG_USB_MON is not set
++# CONFIG_USB_WUSB is not set
++# CONFIG_USB_WUSB_CBAF is not set
++
++#
++# USB Host Controller Drivers
++#
++# CONFIG_USB_C67X00_HCD is not set
++# CONFIG_USB_OXU210HP_HCD is not set
++# CONFIG_USB_ISP116X_HCD is not set
++# CONFIG_USB_ISP1760_HCD is not set
++CONFIG_USB_OHCI_HCD=y
++# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
++# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
++CONFIG_USB_OHCI_LITTLE_ENDIAN=y
++# CONFIG_USB_SL811_HCD is not set
++# CONFIG_USB_R8A66597_HCD is not set
++# CONFIG_USB_HWA_HCD is not set
++# CONFIG_USB_MUSB_HDRC is not set
++# CONFIG_USB_GADGET_MUSB_HDRC is not set
++
++#
++# USB Device Class drivers
++#
++# CONFIG_USB_ACM is not set
++# CONFIG_USB_PRINTER is not set
++# CONFIG_USB_WDM is not set
++# CONFIG_USB_TMC is not set
++
++#
++# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
++#
++
++#
++# also be needed; see USB_STORAGE Help for more info
++#
++CONFIG_USB_STORAGE=y
++# CONFIG_USB_STORAGE_DEBUG is not set
++# CONFIG_USB_STORAGE_DATAFAB is not set
++# CONFIG_USB_STORAGE_FREECOM is not set
++# CONFIG_USB_STORAGE_ISD200 is not set
++# CONFIG_USB_STORAGE_USBAT is not set
++# CONFIG_USB_STORAGE_SDDR09 is not set
++# CONFIG_USB_STORAGE_SDDR55 is not set
++# CONFIG_USB_STORAGE_JUMPSHOT is not set
++# CONFIG_USB_STORAGE_ALAUDA is not set
++# CONFIG_USB_STORAGE_ONETOUCH is not set
++# CONFIG_USB_STORAGE_KARMA is not set
++# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
++# CONFIG_USB_LIBUSUAL is not set
++
++#
++# USB Imaging devices
++#
++# CONFIG_USB_MDC800 is not set
++# CONFIG_USB_MICROTEK is not set
++
++#
++# USB port drivers
++#
++# CONFIG_USB_SERIAL is not set
++
++#
++# USB Miscellaneous drivers
++#
++# CONFIG_USB_EMI62 is not set
++# CONFIG_USB_EMI26 is not set
++# CONFIG_USB_ADUTUX is not set
++# CONFIG_USB_SEVSEG is not set
++# CONFIG_USB_RIO500 is not set
++# CONFIG_USB_LEGOTOWER is not set
++# CONFIG_USB_LCD is not set
++# CONFIG_USB_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_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
++# CONFIG_USB_ISIGHTFW is not set
++# CONFIG_USB_VST is not set
++CONFIG_USB_GADGET=y
++# CONFIG_USB_GADGET_DEBUG_FILES is not set
++CONFIG_USB_GADGET_VBUS_DRAW=2
++CONFIG_USB_GADGET_SELECTED=y
++CONFIG_USB_GADGET_AT91=y
++CONFIG_USB_AT91=y
++# CONFIG_USB_GADGET_ATMEL_USBA is not set
++# CONFIG_USB_GADGET_FSL_USB2 is not set
++# CONFIG_USB_GADGET_LH7A40X is not set
++# CONFIG_USB_GADGET_OMAP is not set
++# CONFIG_USB_GADGET_PXA25X is not set
++# CONFIG_USB_GADGET_PXA27X is not set
++# CONFIG_USB_GADGET_S3C2410 is not set
++# CONFIG_USB_GADGET_IMX is not set
++# CONFIG_USB_GADGET_M66592 is not set
++# CONFIG_USB_GADGET_AMD5536UDC is not set
++# CONFIG_USB_GADGET_FSL_QE is not set
++# CONFIG_USB_GADGET_CI13XXX is not set
++# CONFIG_USB_GADGET_NET2280 is not set
++# CONFIG_USB_GADGET_GOKU 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 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_USB_G_PRINTER is not set
++CONFIG_USB_CDC_COMPOSITE=m
++
++#
++# OTG and related infrastructure
++#
++# CONFIG_USB_GPIO_VBUS is not set
++# CONFIG_NOP_USB_XCEIV is not set
++CONFIG_MMC=y
++# CONFIG_MMC_DEBUG is not set
++# CONFIG_MMC_UNSAFE_RESUME is not set
++
++#
++# MMC/SD/SDIO Card Drivers
++#
++CONFIG_MMC_BLOCK=y
++CONFIG_MMC_BLOCK_BOUNCE=y
++CONFIG_SDIO_UART=m
++# CONFIG_MMC_TEST is not set
++
++#
++# MMC/SD/SDIO Host Controller Drivers
++#
++# CONFIG_MMC_SDHCI is not set
++CONFIG_MMC_AT91=y
++# CONFIG_MMC_ATMELMCI is not set
++# CONFIG_MMC_SPI is not set
++# CONFIG_MEMSTICK is not set
++# CONFIG_ACCESSIBILITY is not set
++CONFIG_NEW_LEDS=y
++CONFIG_LEDS_CLASS=y
++
++#
++# LED drivers
++#
++CONFIG_LEDS_GPIO=y
++CONFIG_LEDS_GPIO_PLATFORM=y
++# CONFIG_LEDS_DAC124S085 is not set
++
++#
++# LED Triggers
++#
++CONFIG_LEDS_TRIGGERS=y
++CONFIG_LEDS_TRIGGER_TIMER=y
++CONFIG_LEDS_TRIGGER_HEARTBEAT=y
++# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
++CONFIG_LEDS_TRIGGER_GPIO=y
++# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set
++
++#
++# iptables trigger is under Netfilter config (LED target)
++#
++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
++#
++# CONFIG_RTC_DRV_M41T94 is not set
++# CONFIG_RTC_DRV_DS1305 is not set
++# CONFIG_RTC_DRV_DS1390 is not set
++# CONFIG_RTC_DRV_MAX6902 is not set
++# CONFIG_RTC_DRV_R9701 is not set
++# CONFIG_RTC_DRV_RS5C348 is not set
++# CONFIG_RTC_DRV_DS3234 is not set
++
++#
++# Platform RTC drivers
++#
++# CONFIG_RTC_DRV_CMOS is not set
++# CONFIG_RTC_DRV_DS1286 is not set
++# CONFIG_RTC_DRV_DS1511 is not set
++# CONFIG_RTC_DRV_DS1553 is not set
++# CONFIG_RTC_DRV_DS1742 is not set
++# CONFIG_RTC_DRV_STK17TA8 is not set
++# CONFIG_RTC_DRV_M48T86 is not set
++# CONFIG_RTC_DRV_M48T35 is not set
++# CONFIG_RTC_DRV_M48T59 is not set
++# CONFIG_RTC_DRV_BQ4802 is not set
++# CONFIG_RTC_DRV_V3020 is not set
++
++#
++# on-CPU RTC drivers
++#
++CONFIG_RTC_DRV_AT91SAM9=y
++CONFIG_RTC_DRV_AT91SAM9_RTT=0
++CONFIG_RTC_DRV_AT91SAM9_GPBR=0
++# CONFIG_DMADEVICES is not set
++# CONFIG_AUXDISPLAY is not set
++# CONFIG_REGULATOR is not set
++# CONFIG_UIO is not set
++# CONFIG_STAGING is not set
++
++#
++# File systems
++#
++CONFIG_EXT2_FS=y
++# CONFIG_EXT2_FS_XATTR is not set
++# CONFIG_EXT2_FS_XIP is not set
++# CONFIG_EXT3_FS is not set
++# CONFIG_EXT4_FS is not set
++# CONFIG_REISERFS_FS is not set
++# CONFIG_JFS_FS is not set
++# CONFIG_FS_POSIX_ACL is not set
++CONFIG_FILE_LOCKING=y
++# CONFIG_XFS_FS is not set
++# CONFIG_OCFS2_FS is not set
++# CONFIG_BTRFS_FS is not set
++CONFIG_DNOTIFY=y
++CONFIG_INOTIFY=y
++CONFIG_INOTIFY_USER=y
++# CONFIG_QUOTA is not set
++# CONFIG_AUTOFS_FS is not set
++# CONFIG_AUTOFS4_FS is not set
++# CONFIG_FUSE_FS is not set
++
++#
++# Caches
++#
++# CONFIG_FSCACHE is not set
++
++#
++# CD-ROM/DVD Filesystems
++#
++# CONFIG_ISO9660_FS is not set
++# CONFIG_UDF_FS is not set
++
++#
++# DOS/FAT/NT Filesystems
++#
++CONFIG_FAT_FS=y
++CONFIG_MSDOS_FS=y
++CONFIG_VFAT_FS=y
++CONFIG_FAT_DEFAULT_CODEPAGE=437
++CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
++# CONFIG_NTFS_FS is not set
++
++#
++# Pseudo filesystems
++#
++CONFIG_PROC_FS=y
++CONFIG_PROC_SYSCTL=y
++CONFIG_PROC_PAGE_MONITOR=y
++CONFIG_SYSFS=y
++CONFIG_TMPFS=y
++# CONFIG_TMPFS_POSIX_ACL is not set
++# CONFIG_HUGETLB_PAGE is not set
++# CONFIG_CONFIGFS_FS is not set
++CONFIG_MISC_FILESYSTEMS=y
++# CONFIG_ADFS_FS is not set
++# CONFIG_AFFS_FS is not set
++# CONFIG_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=m
++CONFIG_SQUASHFS=m
++CONFIG_SQUASHFS_EMBEDDED=y
++CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
++# CONFIG_VXFS_FS is not set
++# CONFIG_MINIX_FS is not set
++# CONFIG_OMFS_FS is not set
++# CONFIG_HPFS_FS is not set
++# CONFIG_QNX4FS_FS is not set
++# CONFIG_ROMFS_FS is not set
++# CONFIG_SYSV_FS is not set
++# CONFIG_UFS_FS is not set
++# CONFIG_NILFS2_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_NFSD is not set
++CONFIG_LOCKD=y
++CONFIG_LOCKD_V4=y
++CONFIG_NFS_COMMON=y
++CONFIG_SUNRPC=y
++# CONFIG_RPCSEC_GSS_KRB5 is not set
++# CONFIG_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=y
++# CONFIG_NLS_KOI8_R is not set
++# CONFIG_NLS_KOI8_U is not set
++CONFIG_NLS_UTF8=y
++# CONFIG_DLM is not set
++
++#
++# Kernel hacking
++#
++# CONFIG_PRINTK_TIME is not set
++CONFIG_ENABLE_WARN_DEPRECATED=y
++CONFIG_ENABLE_MUST_CHECK=y
++CONFIG_FRAME_WARN=1024
++# 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_DEBUG_MEMORY_INIT=y
++# CONFIG_RCU_CPU_STALL_DETECTOR is not set
++# CONFIG_LATENCYTOP is not set
++# CONFIG_SYSCTL_SYSCALL_CHECK is not set
++CONFIG_HAVE_FUNCTION_TRACER=y
++CONFIG_TRACING_SUPPORT=y
++
++#
++# Tracers
++#
++# CONFIG_FUNCTION_TRACER is not set
++# CONFIG_IRQSOFF_TRACER is not set
++# CONFIG_SCHED_TRACER is not set
++# CONFIG_CONTEXT_SWITCH_TRACER is not set
++# CONFIG_EVENT_TRACER is not set
++# CONFIG_BOOT_TRACER is not set
++# CONFIG_TRACE_BRANCH_PROFILING is not set
++# CONFIG_STACK_TRACER is not set
++# CONFIG_KMEMTRACE is not set
++# CONFIG_WORKQUEUE_TRACER is not set
++# CONFIG_BLK_DEV_IO_TRACE is not set
++# CONFIG_SAMPLES is not set
++CONFIG_HAVE_ARCH_KGDB=y
++CONFIG_ARM_UNWIND=y
++CONFIG_DEBUG_USER=y
++
++#
++# Security options
++#
++# CONFIG_KEYS is not set
++# CONFIG_SECURITY is not set
++# CONFIG_SECURITYFS is not set
++# CONFIG_SECURITY_FILE_CAPABILITIES is not set
++CONFIG_CRYPTO=y
++
++#
++# Crypto core or helper
++#
++# CONFIG_CRYPTO_FIPS is not set
++CONFIG_CRYPTO_ALGAPI=y
++CONFIG_CRYPTO_ALGAPI2=y
++CONFIG_CRYPTO_AEAD2=y
++CONFIG_CRYPTO_BLKCIPHER=y
++CONFIG_CRYPTO_BLKCIPHER2=y
++CONFIG_CRYPTO_HASH2=y
++CONFIG_CRYPTO_RNG2=y
++CONFIG_CRYPTO_PCOMP=y
++CONFIG_CRYPTO_MANAGER=y
++CONFIG_CRYPTO_MANAGER2=y
++# CONFIG_CRYPTO_GF128MUL is not set
++# CONFIG_CRYPTO_NULL is not set
++CONFIG_CRYPTO_WORKQUEUE=y
++# CONFIG_CRYPTO_CRYPTD is not set
++# CONFIG_CRYPTO_AUTHENC is not set
++# CONFIG_CRYPTO_TEST is not set
++
++#
++# Authenticated Encryption with Associated Data
++#
++# CONFIG_CRYPTO_CCM is not set
++# CONFIG_CRYPTO_GCM is not set
++# CONFIG_CRYPTO_SEQIV is not set
++
++#
++# Block modes
++#
++# CONFIG_CRYPTO_CBC is not set
++# CONFIG_CRYPTO_CTR is not set
++# CONFIG_CRYPTO_CTS is not set
++CONFIG_CRYPTO_ECB=y
++# CONFIG_CRYPTO_LRW is not set
++# CONFIG_CRYPTO_PCBC is not set
++# CONFIG_CRYPTO_XTS is not set
++
++#
++# Hash modes
++#
++# CONFIG_CRYPTO_HMAC is not set
++# CONFIG_CRYPTO_XCBC is not set
++
++#
++# Digest
++#
++# CONFIG_CRYPTO_CRC32C is not set
++# CONFIG_CRYPTO_MD4 is not set
++# CONFIG_CRYPTO_MD5 is not set
++# CONFIG_CRYPTO_MICHAEL_MIC is not set
++# CONFIG_CRYPTO_RMD128 is not set
++# CONFIG_CRYPTO_RMD160 is not set
++# CONFIG_CRYPTO_RMD256 is not set
++# CONFIG_CRYPTO_RMD320 is not set
++# CONFIG_CRYPTO_SHA1 is not set
++# CONFIG_CRYPTO_SHA256 is not set
++# CONFIG_CRYPTO_SHA512 is not set
++# CONFIG_CRYPTO_TGR192 is not set
++# CONFIG_CRYPTO_WP512 is not set
++
++#
++# Ciphers
++#
++CONFIG_CRYPTO_AES=y
++# CONFIG_CRYPTO_ANUBIS is not set
++CONFIG_CRYPTO_ARC4=y
++# CONFIG_CRYPTO_BLOWFISH is not set
++# CONFIG_CRYPTO_CAMELLIA is not set
++# CONFIG_CRYPTO_CAST5 is not set
++# CONFIG_CRYPTO_CAST6 is not set
++# CONFIG_CRYPTO_DES is not set
++# CONFIG_CRYPTO_FCRYPT is not set
++# CONFIG_CRYPTO_KHAZAD is not set
++# CONFIG_CRYPTO_SALSA20 is not set
++# CONFIG_CRYPTO_SEED is not set
++# CONFIG_CRYPTO_SERPENT is not set
++# CONFIG_CRYPTO_TEA is not set
++# CONFIG_CRYPTO_TWOFISH is not set
++
++#
++# Compression
++#
++# CONFIG_CRYPTO_DEFLATE is not set
++# CONFIG_CRYPTO_ZLIB is not set
++# CONFIG_CRYPTO_LZO is not set
++
++#
++# Random Number Generation
++#
++# CONFIG_CRYPTO_ANSI_CPRNG is not set
++# CONFIG_CRYPTO_HW is not set
++# CONFIG_BINARY_PRINTF is not set
++
++#
++# Library routines
++#
++CONFIG_BITREVERSE=y
++CONFIG_GENERIC_FIND_LAST_BIT=y
++# CONFIG_CRC_CCITT is not set
++# CONFIG_CRC16 is not set
++# CONFIG_CRC_T10DIF is not set
++CONFIG_CRC_ITU_T=m
++CONFIG_CRC32=y
++# CONFIG_CRC7 is not set
++# CONFIG_LIBCRC32C is not set
++CONFIG_ZLIB_INFLATE=y
++CONFIG_ZLIB_DEFLATE=y
++CONFIG_DECOMPRESS_GZIP=y
++CONFIG_DECOMPRESS_BZIP2=y
++CONFIG_DECOMPRESS_LZMA=y
++CONFIG_HAS_IOMEM=y
++CONFIG_HAS_IOPORT=y
++CONFIG_HAS_DMA=y
++CONFIG_NLATTR=y
diff --git a/recipes/linux/linux-2.6.30/ronetix-pm9g45/defconfig b/recipes/linux/linux-2.6.30/ronetix-pm9g45/defconfig
new file mode 100644 (file)
index 0000000..5612f45
--- /dev/null
@@ -0,0 +1,1656 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.30.10
+# Wed Feb  2 12:51:47 2011
+#
+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_HAVE_LATENCYTOP_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=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_AUDIT is not set
+
+#
+# RCU Subsystem
+#
+# CONFIG_CLASSIC_RCU is not set
+CONFIG_TREE_RCU=y
+# CONFIG_PREEMPT_RCU is not set
+# CONFIG_RCU_TRACE is not set
+CONFIG_RCU_FANOUT=32
+# CONFIG_RCU_FANOUT_EXACT is not set
+# CONFIG_TREE_RCU_TRACE is not set
+# CONFIG_PREEMPT_RCU_TRACE is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_GROUP_SCHED is not set
+# CONFIG_CGROUPS is not set
+CONFIG_SYSFS_DEPRECATED=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+# CONFIG_RELAY is not set
+CONFIG_NAMESPACES=y
+# CONFIG_UTS_NS is not set
+# CONFIG_IPC_NS is not set
+# CONFIG_USER_NS is not set
+# CONFIG_PID_NS is not set
+# CONFIG_NET_NS is not set
+# CONFIG_BLK_DEV_INITRD is not set
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_SYSCTL=y
+CONFIG_ANON_INODES=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_STRIP_ASM_SYMS=y
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_AIO=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_COMPAT_BRK=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+# CONFIG_PROFILING is not set
+# CONFIG_MARKERS is not set
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_KPROBES is not set
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+CONFIG_HAVE_CLK=y
+# CONFIG_SLOW_WORK is not set
+CONFIG_HAVE_GENERIC_DMA_COHERENT=y
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+# CONFIG_MODULE_FORCE_LOAD is not set
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_BSG is not set
+# CONFIG_BLK_DEV_INTEGRITY 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"
+# CONFIG_FREEZER is not set
+
+#
+# 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_CLPS711X is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_GEMINI 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_KIRKWOOD is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_LOKI is not set
+# CONFIG_ARCH_MV78XX0 is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_ORION5X is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_MMP is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_S3C64XX is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_ARCH_MSM is not set
+# CONFIG_ARCH_W90X900 is not set
+
+#
+# Atmel AT91 System-on-Chip
+#
+# CONFIG_ARCH_AT91RM9200 is not set
+# CONFIG_ARCH_AT91SAM9260 is not set
+# CONFIG_ARCH_AT91SAM9261 is not set
+# CONFIG_ARCH_AT91SAM9G10 is not set
+# CONFIG_ARCH_AT91SAM9263 is not set
+# CONFIG_ARCH_AT91SAM9RL is not set
+# CONFIG_ARCH_AT91SAM9G20 is not set
+CONFIG_ARCH_AT91SAM9G45=y
+# CONFIG_ARCH_AT91CAP9 is not set
+# CONFIG_ARCH_AT572D940HF is not set
+# CONFIG_ARCH_AT91X40 is not set
+CONFIG_AT91_PMC_UNIT=y
+
+#
+# AT91SAM9G45 Board Type
+#
+# CONFIG_MACH_AT91SAM9G45EKES is not set
+CONFIG_MACH_PM9G45=y
+# CONFIG_MACH_PM9G45_V1_1 is not set
+CONFIG_MACH_PM9G45_V1_2=y
+CONFIG_AUTO_VRAM_SIZE=y
+# CONFIG_PM9G45_LCD_TX09D70 is not set
+# CONFIG_PM9G45_LCD_RA158 is not set
+# CONFIG_PM9G45_LCD_TCG057VGLAC is not set
+# CONFIG_PM9G45_LCD_GTTV57NN771E0 is not set
+# CONFIG_PM9G45_LCD_GLAA057VA01CW is not set
+CONFIG_PM9G45_LCD_GATW70SN8H1E0=y
+# CONFIG_PM9G45_LCD_CLAA080MB0ACW is not set
+
+#
+# AT91 Board Options
+#
+CONFIG_MTD_AT91_DATAFLASH_CARD=y
+# CONFIG_MTD_NAND_ATMEL_BUSWIDTH_16 is not set
+
+#
+# AT91 Feature Selections
+#
+CONFIG_AT91_PROGRAMMABLE_CLOCKS=y
+CONFIG_AT91_TIMER_HZ=100
+CONFIG_AT91_EARLY_DBGU=y
+# CONFIG_AT91_EARLY_USART0 is not set
+# CONFIG_AT91_EARLY_USART1 is not set
+# CONFIG_AT91_EARLY_USART2 is not set
+# CONFIG_AT91_EARLY_USART3 is not set
+# CONFIG_AT91_EARLY_USART4 is not set
+# CONFIG_AT91_EARLY_USART5 is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_ARM926T=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5TJ=y
+CONFIG_CPU_PABRT_NOIFAR=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
+CONFIG_PCCARD=y
+CONFIG_PCMCIA_DEBUG=y
+CONFIG_PCMCIA=y
+# CONFIG_PCMCIA_LOAD_CIS is not set
+# CONFIG_PCMCIA_IOCTL is not set
+
+#
+# PC-card bridges
+#
+CONFIG_AT91_CF=y
+
+#
+# Kernel Features
+#
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_VMSPLIT_3G=y
+# CONFIG_VMSPLIT_2G is not set
+# CONFIG_VMSPLIT_1G is not set
+CONFIG_PAGE_OFFSET=0xC0000000
+# CONFIG_PREEMPT is not set
+CONFIG_HZ=100
+CONFIG_AEABI=y
+# CONFIG_OABI_COMPAT is not set
+# CONFIG_ARCH_HAS_HOLES_MEMORYMODEL is not set
+# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
+# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
+# CONFIG_HIGHMEM is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+CONFIG_PAGEFLAGS_EXTENDED=y
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_PHYS_ADDR_T_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=0
+CONFIG_VIRT_TO_BUS=y
+CONFIG_UNEVICTABLE_LRU=y
+CONFIG_HAVE_MLOCK=y
+CONFIG_HAVE_MLOCKED_PAGE_BIT=y
+CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
+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=" debug "
+# CONFIG_XIP_KERNEL is not set
+# CONFIG_KEXEC is not set
+
+#
+# CPU Power Management
+#
+# CONFIG_CPU_IDLE is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+# CONFIG_VFP is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+CONFIG_HAVE_AOUT=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+# CONFIG_PM is not set
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+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=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_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_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_NET_DSA is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_PHONET is not set
+# CONFIG_NET_SCHED is not set
+# CONFIG_DCB is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_AF_RXRPC is not set
+# CONFIG_WIRELESS is not set
+# CONFIG_WIMAX 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_FIRMWARE_IN_KERNEL=y
+CONFIG_EXTRA_FIRMWARE=""
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+# CONFIG_CONNECTOR is not set
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_TESTS is not set
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+# CONFIG_MTD_AR7_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+# CONFIG_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=y
+CONFIG_MTD_DATAFLASH_WRITE_VERIFY=y
+# CONFIG_MTD_DATAFLASH_OTP 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_GPIO is not set
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+CONFIG_MTD_NAND_ATMEL=y
+CONFIG_MTD_NAND_ATMEL_ECC_SOFT=y
+# CONFIG_MTD_NAND_ATMEL_ECC_HW is not set
+# CONFIG_MTD_NAND_ATMEL_ECC_NONE is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+# CONFIG_MTD_NAND_PLATFORM is not set
+# CONFIG_MTD_ALAUDA is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# LPDDR flash memory drivers
+#
+# CONFIG_MTD_LPDDR is not set
+
+#
+# UBI - Unsorted block images
+#
+CONFIG_MTD_UBI=y
+CONFIG_MTD_UBI_WL_THRESHOLD=4096
+CONFIG_MTD_UBI_BEB_RESERVE=1
+# CONFIG_MTD_UBI_GLUEBI is not set
+
+#
+# UBI debugging options
+#
+# CONFIG_MTD_UBI_DEBUG is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP 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_ATMEL_PWM is not set
+CONFIG_ATMEL_TCLIB=y
+CONFIG_ATMEL_TCB_CLKSRC=y
+CONFIG_ATMEL_TCB_CLKSRC_BLOCK=0
+CONFIG_ATMEL_SSC=y
+# CONFIG_ENCLOSURE_SERVICES is not set
+# CONFIG_C2PORT is not set
+
+#
+# EEPROM support
+#
+# CONFIG_EEPROM_AT25 is not set
+# CONFIG_EEPROM_93CX6 is not set
+CONFIG_HAVE_IDE=y
+CONFIG_IDE=y
+
+#
+# Please see Documentation/ide/ide.txt for help/info on IDE drives
+#
+CONFIG_IDE_XFER_MODE=y
+CONFIG_IDE_TIMINGS=y
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_IDE_GD=y
+CONFIG_IDE_GD_ATA=y
+# CONFIG_IDE_GD_ATAPI is not set
+CONFIG_BLK_DEV_IDECS=y
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+CONFIG_IDE_PROC_FS=y
+
+#
+# IDE chipset support/bugfixes
+#
+# CONFIG_BLK_DEV_PLATFORM is not set
+CONFIG_BLK_DEV_IDE_AT91=y
+# CONFIG_BLK_DEV_IDEDMA 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 is not set
+# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
+# CONFIG_SCSI_DH is not set
+# CONFIG_SCSI_OSD_INITIATOR is not set
+# CONFIG_ATA is not set
+# CONFIG_MD is not set
+CONFIG_NETDEVICES=y
+CONFIG_COMPAT_NET_DEV_OPS=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_VETH is not set
+CONFIG_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_REALTEK_PHY is not set
+CONFIG_NATIONAL_PHY=y
+# CONFIG_STE10XP is not set
+# CONFIG_LSI_ET1011C_PHY is not set
+# CONFIG_FIXED_PHY is not set
+# CONFIG_MDIO_BITBANG is not set
+CONFIG_NET_ETHERNET=y
+# CONFIG_MII is not set
+CONFIG_MACB=y
+# CONFIG_AX88796 is not set
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+# CONFIG_ENC28J60 is not set
+# CONFIG_ETHOC is not set
+# CONFIG_SMC911X is not set
+# CONFIG_SMSC911X is not set
+# CONFIG_DNET is not set
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
+# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
+# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
+# CONFIG_B44 is not set
+# CONFIG_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
+
+#
+# Enable WiMAX (Networking options) to see the WiMAX drivers
+#
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET is not set
+# CONFIG_NET_PCMCIA is not set
+# CONFIG_WAN is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+
+#
+# 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=272
+CONFIG_INPUT_JOYDEV=y
+CONFIG_INPUT_EVDEV=y
+CONFIG_INPUT_EVBUG=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=y
+CONFIG_MOUSE_PS2=y
+CONFIG_MOUSE_PS2_ALPS=y
+CONFIG_MOUSE_PS2_LOGIPS2PP=y
+CONFIG_MOUSE_PS2_SYNAPTICS=y
+CONFIG_MOUSE_PS2_TRACKPOINT=y
+# CONFIG_MOUSE_PS2_ELANTECH is not set
+# CONFIG_MOUSE_PS2_TOUCHKIT is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_APPLETOUCH is not set
+# CONFIG_MOUSE_BCM5974 is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_MOUSE_GPIO is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_TOUCHSCREEN_ADS7846=y
+# CONFIG_TOUCHSCREEN_AD7877 is not set
+# CONFIG_TOUCHSCREEN_AD7879_SPI is not set
+# CONFIG_TOUCHSCREEN_AD7879 is not set
+# CONFIG_TOUCHSCREEN_FUJITSU is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_INEXIO 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_ATMEL_TSADCC is not set
+# CONFIG_TOUCHSCREEN_WM97XX is not set
+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
+# CONFIG_TOUCHSCREEN_TOUCHIT213 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_CONSOLE_TRANSLATIONS=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+CONFIG_DEVKMEM=y
+# 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_PDC=y
+# CONFIG_SERIAL_ATMEL_TTYAT is not set
+# CONFIG_SERIAL_MAX3100 is not set
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=4
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_HW_RANDOM_TIMERIOMEM 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_IPWIRELESS is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+# CONFIG_I2C is not set
+CONFIG_SPI=y
+CONFIG_SPI_DEBUG=y
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+CONFIG_SPI_ATMEL=y
+# CONFIG_SPI_BITBANG is not set
+# CONFIG_SPI_GPIO is not set
+
+#
+# SPI Protocol Masters
+#
+CONFIG_SPI_SPIDEV=y
+# CONFIG_SPI_TLE62X0 is not set
+CONFIG_ARCH_REQUIRE_GPIOLIB=y
+CONFIG_GPIOLIB=y
+# CONFIG_DEBUG_GPIO is not set
+# CONFIG_GPIO_SYSFS is not set
+
+#
+# Memory mapped GPIO expanders:
+#
+
+#
+# I2C GPIO expanders:
+#
+
+#
+# PCI GPIO expanders:
+#
+
+#
+# SPI GPIO expanders:
+#
+# CONFIG_GPIO_MAX7301 is not set
+# CONFIG_GPIO_MCP23S08 is not set
+CONFIG_W1=y
+
+#
+# 1-wire Bus Masters
+#
+# CONFIG_W1_MASTER_DS2490 is not set
+# CONFIG_W1_MASTER_DS1WM is not set
+CONFIG_W1_MASTER_GPIO=y
+
+#
+# 1-wire Slaves
+#
+# CONFIG_W1_SLAVE_THERM is not set
+# CONFIG_W1_SLAVE_SMEM is not set
+# CONFIG_W1_SLAVE_DS2431 is not set
+# CONFIG_W1_SLAVE_DS2433 is not set
+# CONFIG_W1_SLAVE_DS2760 is not set
+# CONFIG_W1_SLAVE_BQ27000 is not set
+# CONFIG_POWER_SUPPLY is not set
+# CONFIG_HWMON is not set
+# CONFIG_THERMAL is not set
+# CONFIG_THERMAL_HWMON is not set
+# CONFIG_WATCHDOG is not set
+CONFIG_SSB_POSSIBLE=y
+
+#
+# Sonics Silicon Backplane
+#
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_CORE is not set
+# CONFIG_MFD_SM501 is not set
+# CONFIG_MFD_ASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_UCB1400_CORE is not set
+# CONFIG_MFD_TMIO is not set
+# CONFIG_MFD_T7L66XB is not set
+# CONFIG_MFD_TC6387XB is not set
+# CONFIG_MFD_TC6393XB is not set
+
+#
+# Multimedia devices
+#
+
+#
+# Multimedia core support
+#
+# CONFIG_VIDEO_DEV is not set
+# CONFIG_DVB_CORE is not set
+# CONFIG_VIDEO_MEDIA is not set
+
+#
+# Multimedia drivers
+#
+# 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_BOOT_VESA_SUPPORT is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_FOREIGN_ENDIAN is not set
+# CONFIG_FB_SYS_FOPS is not set
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_S1D15605 is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_ATMEL=y
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_METRONOME is not set
+# CONFIG_FB_MB862XX is not set
+# CONFIG_FB_BROADSHEET is not set
+# CONFIG_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=y
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+# CONFIG_LOGO is not set
+CONFIG_SOUND=y
+CONFIG_SOUND_OSS_CORE=y
+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_HRTIMER is not set
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+CONFIG_SND_VMASTER=y
+CONFIG_SND_AC97_CODEC=y
+# CONFIG_SND_DRIVERS is not set
+# CONFIG_SND_ARM is not set
+
+#
+# Atmel devices (AVR32 and AT91)
+#
+CONFIG_SND_ATMEL_AC97C=y
+# CONFIG_SND_SPI is not set
+# CONFIG_SND_USB is not set
+# CONFIG_SND_PCMCIA is not set
+# CONFIG_SND_SOC is not set
+# CONFIG_SOUND_PRIME is not set
+CONFIG_AC97_BUS=y
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=y
+CONFIG_HID_DEBUG=y
+# CONFIG_HIDRAW is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=y
+# CONFIG_HID_PID is not set
+# CONFIG_USB_HIDDEV is not set
+
+#
+# Special HID drivers
+#
+CONFIG_HID_A4TECH=y
+CONFIG_HID_APPLE=y
+CONFIG_HID_BELKIN=y
+CONFIG_HID_CHERRY=y
+CONFIG_HID_CHICONY=y
+CONFIG_HID_CYPRESS=y
+# CONFIG_DRAGONRISE_FF is not set
+CONFIG_HID_EZKEY=y
+CONFIG_HID_KYE=y
+CONFIG_HID_GYRATION=y
+CONFIG_HID_KENSINGTON=y
+CONFIG_HID_LOGITECH=y
+# CONFIG_LOGITECH_FF is not set
+# CONFIG_LOGIRUMBLEPAD2_FF is not set
+CONFIG_HID_MICROSOFT=y
+CONFIG_HID_MONTEREY=y
+CONFIG_HID_NTRIG=y
+CONFIG_HID_PANTHERLORD=y
+# CONFIG_PANTHERLORD_FF is not set
+CONFIG_HID_PETALYNX=y
+CONFIG_HID_SAMSUNG=y
+CONFIG_HID_SONY=y
+CONFIG_HID_SUNPLUS=y
+# CONFIG_GREENASIA_FF is not set
+CONFIG_HID_TOPSEED=y
+# CONFIG_THRUSTMASTER_FF is not set
+# CONFIG_ZEROPLUS_FF is not set
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_DEVICE_CLASS is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_OTG is not set
+# CONFIG_USB_MON is not set
+# CONFIG_USB_WUSB is not set
+# CONFIG_USB_WUSB_CBAF is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_C67X00_HCD is not set
+CONFIG_USB_EHCI_HCD=y
+# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
+# CONFIG_USB_EHCI_TT_NEWSCHED is not set
+# CONFIG_USB_OXU210HP_HCD is not set
+# CONFIG_USB_ISP116X_HCD is not set
+# CONFIG_USB_ISP1760_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_SL811_HCD is not set
+# CONFIG_USB_R8A66597_HCD is not set
+# CONFIG_USB_HWA_HCD is not set
+# CONFIG_USB_MUSB_HDRC is not set
+# CONFIG_USB_GADGET_MUSB_HDRC is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+# CONFIG_USB_WDM is not set
+# CONFIG_USB_TMC is not set
+
+#
+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
+#
+
+#
+# also be needed; see USB_STORAGE Help for more info
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_ONETOUCH is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB port drivers
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_SEVSEG is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_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_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_SISUSBVGA is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+# CONFIG_USB_TEST is not set
+# CONFIG_USB_ISIGHTFW is not set
+# CONFIG_USB_VST is not set
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG is not set
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+# CONFIG_USB_GADGET_DEBUG_FS is not set
+CONFIG_USB_GADGET_VBUS_DRAW=2
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_AT91 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_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_PXA25X is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_IMX is not set
+# CONFIG_USB_GADGET_M66592 is not set
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+# CONFIG_USB_GADGET_FSL_QE is not set
+# CONFIG_USB_GADGET_CI13XXX is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_GOKU 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 is not set
+CONFIG_USB_G_SERIAL=y
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_PRINTER is not set
+# CONFIG_USB_CDC_COMPOSITE is not set
+
+#
+# OTG and related infrastructure
+#
+# CONFIG_USB_GPIO_VBUS is not set
+# CONFIG_NOP_USB_XCEIV is not set
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+# CONFIG_MMC_UNSAFE_RESUME is not set
+
+#
+# MMC/SD/SDIO Card Drivers
+#
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_BOUNCE=y
+# CONFIG_SDIO_UART is not set
+# CONFIG_MMC_TEST is not set
+
+#
+# MMC/SD/SDIO Host Controller Drivers
+#
+# CONFIG_MMC_SDHCI is not set
+# CONFIG_MMC_AT91 is not set
+CONFIG_MMC_ATMELMCI=y
+CONFIG_MMC_ATMELMCI_DMA=y
+# CONFIG_MMC_SPI is not set
+# CONFIG_MEMSTICK is not set
+# CONFIG_ACCESSIBILITY is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+CONFIG_LEDS_GPIO=y
+CONFIG_LEDS_GPIO_PLATFORM=y
+# CONFIG_LEDS_DAC124S085 is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+# CONFIG_LEDS_TRIGGER_IDE_DISK is not set
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
+CONFIG_LEDS_TRIGGER_GPIO=y
+# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set
+
+#
+# iptables trigger is under Netfilter config (LED target)
+#
+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
+#
+# CONFIG_RTC_DRV_M41T94 is not set
+# CONFIG_RTC_DRV_DS1305 is not set
+# CONFIG_RTC_DRV_DS1390 is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+# CONFIG_RTC_DRV_R9701 is not set
+# CONFIG_RTC_DRV_RS5C348 is not set
+# CONFIG_RTC_DRV_DS3234 is not set
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1286 is not set
+# CONFIG_RTC_DRV_DS1511 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T35 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_BQ4802 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+CONFIG_RTC_DRV_AT91SAM9=y
+CONFIG_RTC_DRV_AT91SAM9_RTT=0
+CONFIG_RTC_DRV_AT91SAM9_GPBR=0
+CONFIG_DMADEVICES=y
+
+#
+# DMA Devices
+#
+CONFIG_AT_HDMAC=y
+CONFIG_DMA_ENGINE=y
+
+#
+# DMA Clients
+#
+# CONFIG_NET_DMA is not set
+# CONFIG_ASYNC_TX_DMA is not set
+# CONFIG_DMATEST is not set
+# CONFIG_AUXDISPLAY is not set
+# CONFIG_REGULATOR is not set
+# CONFIG_UIO is not set
+# CONFIG_STAGING is not set
+
+#
+# File systems
+#
+# CONFIG_EXT2_FS is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_EXT4_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_BTRFS_FS is not set
+CONFIG_FILE_LOCKING=y
+CONFIG_DNOTIFY=y
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# Caches
+#
+# CONFIG_FSCACHE is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+# CONFIG_MSDOS_FS 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_PROC_PAGE_MONITOR=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+# CONFIG_CONFIGFS_FS is not set
+CONFIG_MISC_FILESYSTEMS=y
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
+CONFIG_JFFS2_SUMMARY=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 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_UBIFS_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_SQUASHFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_OMFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+# CONFIG_NILFS2_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+CONFIG_ROOT_NFS=y
+CONFIG_NFSD=y
+# CONFIG_NFSD_V3 is not set
+# CONFIG_NFSD_V4 is not set
+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 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
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_FRAME_WARN=1024
+# 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=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
+CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
+CONFIG_DETECT_HUNG_TASK=y
+# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
+CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0
+CONFIG_SCHED_DEBUG=y
+# CONFIG_SCHEDSTATS is not set
+CONFIG_TIMER_STATS=y
+# CONFIG_DEBUG_OBJECTS 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_WRITECOUNT is not set
+CONFIG_DEBUG_MEMORY_INIT=y
+# CONFIG_DEBUG_LIST is not set
+# CONFIG_DEBUG_SG is not set
+# CONFIG_DEBUG_NOTIFIERS is not set
+# CONFIG_BOOT_PRINTK_DELAY is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_RCU_CPU_STALL_DETECTOR is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
+# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_LATENCYTOP is not set
+# CONFIG_SYSCTL_SYSCALL_CHECK is not set
+# CONFIG_PAGE_POISONING is not set
+CONFIG_HAVE_FUNCTION_TRACER=y
+CONFIG_TRACING_SUPPORT=y
+
+#
+# Tracers
+#
+# CONFIG_FUNCTION_TRACER is not set
+# CONFIG_IRQSOFF_TRACER is not set
+# CONFIG_SCHED_TRACER is not set
+# CONFIG_CONTEXT_SWITCH_TRACER is not set
+# CONFIG_EVENT_TRACER is not set
+# CONFIG_BOOT_TRACER is not set
+# CONFIG_TRACE_BRANCH_PROFILING is not set
+# CONFIG_STACK_TRACER is not set
+# CONFIG_KMEMTRACE is not set
+# CONFIG_WORKQUEUE_TRACER is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_DYNAMIC_DEBUG is not set
+# CONFIG_SAMPLES is not set
+CONFIG_HAVE_ARCH_KGDB=y
+# CONFIG_KGDB is not set
+CONFIG_ARM_UNWIND=y
+CONFIG_DEBUG_USER=y
+# CONFIG_DEBUG_ERRORS is not set
+# CONFIG_DEBUG_STACK_USAGE is not set
+# CONFIG_DEBUG_LL is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITYFS is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+CONFIG_CRYPTO=y
+
+#
+# Crypto core or helper
+#
+# CONFIG_CRYPTO_FIPS is not set
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_ALGAPI2=y
+CONFIG_CRYPTO_AEAD2=y
+CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_BLKCIPHER2=y
+CONFIG_CRYPTO_HASH2=y
+CONFIG_CRYPTO_RNG2=y
+CONFIG_CRYPTO_PCOMP=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_MANAGER2=y
+# CONFIG_CRYPTO_GF128MUL is not set
+# CONFIG_CRYPTO_NULL is not set
+CONFIG_CRYPTO_WORKQUEUE=y
+# CONFIG_CRYPTO_CRYPTD is not set
+# CONFIG_CRYPTO_AUTHENC is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Authenticated Encryption with Associated Data
+#
+# CONFIG_CRYPTO_CCM is not set
+# CONFIG_CRYPTO_GCM is not set
+# CONFIG_CRYPTO_SEQIV is not set
+
+#
+# Block modes
+#
+# CONFIG_CRYPTO_CBC is not set
+# CONFIG_CRYPTO_CTR is not set
+# CONFIG_CRYPTO_CTS is not set
+CONFIG_CRYPTO_ECB=y
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_PCBC is not set
+# CONFIG_CRYPTO_XTS is not set
+
+#
+# Hash modes
+#
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+
+#
+# Digest
+#
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_RMD128 is not set
+# CONFIG_CRYPTO_RMD160 is not set
+# CONFIG_CRYPTO_RMD256 is not set
+# CONFIG_CRYPTO_RMD320 is not set
+# CONFIG_CRYPTO_SHA1 is not set
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_WP512 is not set
+
+#
+# Ciphers
+#
+CONFIG_CRYPTO_AES=y
+# CONFIG_CRYPTO_ANUBIS is not set
+CONFIG_CRYPTO_ARC4=y
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_SALSA20 is not set
+# CONFIG_CRYPTO_SEED is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_TEA is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+
+#
+# Compression
+#
+CONFIG_CRYPTO_DEFLATE=y
+CONFIG_CRYPTO_ZLIB=y
+CONFIG_CRYPTO_LZO=y
+
+#
+# Random Number Generation
+#
+# CONFIG_CRYPTO_ANSI_CPRNG is not set
+# CONFIG_CRYPTO_HW is not set
+# CONFIG_BINARY_PRINTF is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_GENERIC_FIND_LAST_BIT=y
+# CONFIG_CRC_CCITT is not set
+CONFIG_CRC16=y
+# CONFIG_CRC_T10DIF is not set
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_LZO_COMPRESS=y
+CONFIG_LZO_DECOMPRESS=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
+CONFIG_NLATTR=y
index b5a1a4c..44bc8f4 100644 (file)
@@ -16,6 +16,7 @@ DEFAULT_PREFERENCE_at91sam9m10ekes    = "2"
 DEFAULT_PREFERENCE_at91sam9m10g45ek    = "2"
 DEFAULT_PREFERENCE_at91sam9g10ek       = "2"
 DEFAULT_PREFERENCE_at91sam9g20ek       = "2"
+DEFAULT_PREFERENCE_ronetix-pm9g45      = "2"
 
 # machine boots with it, works but was not tested too much
 DEFAULT_PREFERENCE_at91sam9263ek = "-1"
@@ -35,6 +36,27 @@ SRC_URI_at91 = " \
           file://at91/linux-2.6.30-003-sam9m10g45ek.patch \
           file://defconfig"
 
+SRC_URI_ronetix-pm9g45 = " \
+          ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2;name=kernel \
+           ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/patch-${PV}.10.bz2;apply=yes;name=stablepatch \
+          http://download.ronetix.info/boards/linux/kernel/2.6.30/2.6.30-at91.patch.gz;apply=yes \
+          file://2.6.30-at91-exp.patch \
+           file://0001-ads7846-.c-and-.h-add-swap_xy.patch \
+           file://0002-add-pm9g45-number-in-mach-types.patch \
+           file://0003-print-some-more-info-from-atmel_nand.c.patch \
+           file://0004-add-newline-at-the-end-of-uncorrectable-error.patch \
+           file://0005-Add-CompactFlash-to-at91sam9g45-architecture.patch \
+           file://0006-pm9g45-system-ram-can-be-on-CS1-or-CS6.patch \
+           file://0007-add-pm9g45-board.patch \
+           file://0008-pm9g45-default-configuration-files.patch \
+           file://0009-add-float-flags-in-Makefile.patch \
+           file://0010-conditional-compile-if-DEDICATED_VRAM.patch \
+           file://0011-add-pm9g45-board-version-1.2-and-adjust-memory-sele.patch \
+          file://defconfig"
+
+#         http://download.ronetix.info/boards/linux/kernel/2.6.30/
+       
+
 SRC_URI_append_mpc8315e-rdb = " file://mpc8315erdb-add-msi-to-dts.patch"
 
 # SRC_URI_append_at91sam9263ek = " file://hrw-linux-2.6.30-exp.patch "