Merge branch 'for-linus' of master.kernel.org:/home/rmk/linux-2.6-arm
authorLinus Torvalds <torvalds@linux-foundation.org>
Sat, 11 Oct 2008 17:09:45 +0000 (10:09 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sat, 11 Oct 2008 17:09:45 +0000 (10:09 -0700)
* 'for-linus' of master.kernel.org:/home/rmk/linux-2.6-arm: (236 commits)
  [ARM] 5300/1: fixup spitz reset during boot
  [ARM] 5295/1: make ZONE_DMA optional
  [ARM] 5239/1: Palm Zire 72 power management support
  [ARM] 5298/1: Drop desc_handle_irq()
  [ARM] 5297/1: [KS8695] Fix two compile-time warnings
  [ARM] 5296/1: [KS8695] Replace macro's with trailing underscores.
  [ARM] pxa: allow multi-machine PCMCIA builds
  [ARM] pxa: add preliminary CPUFREQ support for PXA3xx
  [ARM] pxa: add missing ACCR bit definitions to pxa3xx-regs.h
  [ARM] pxa: rename cpu-pxa.c to cpufreq-pxa2xx.c
  [ARM] pxa/zylonite: add support for USB OHCI
  [ARM] ohci-pxa27x: use ioremap() and offset for register access
  [ARM] ohci-pxa27x: introduce pxa27x_clear_otgph()
  [ARM] ohci-pxa27x: use platform_get_{irq,resource} for the resource
  [ARM] ohci-pxa27x: move OHCI controller specific registers into the driver
  [ARM] ohci-pxa27x: introduce flags to avoid direct access to OHCI registers
  [ARM] pxa: move I2S register and bit definitions into pxa2xx-i2s.c
  [ARM] pxa: simplify DMA register definitions
  [ARM] pxa: make additional DCSR bits valid for PXA3xx
  [ARM] pxa: move i2c register and bit definitions into i2c-pxa.c
  ...

Fixed up conflicts in
arch/arm/mach-versatile/core.c
sound/soc/pxa/pxa2xx-ac97.c
sound/soc/pxa/pxa2xx-i2s.c
manually.

21 files changed:
1  2 
MAINTAINERS
arch/arm/mach-davinci/psc.c
arch/arm/mach-kirkwood/db88f6281-bp-setup.c
arch/arm/mach-kirkwood/rd88f6281-setup.c
arch/arm/mach-mv78xx0/common.c
arch/arm/mach-orion5x/kurobox_pro-setup.c
arch/arm/mach-orion5x/tsx09-common.c
arch/arm/mach-pxa/time.c
arch/arm/mach-sa1100/generic.c
arch/arm/mach-versatile/core.c
arch/arm/plat-omap/devices.c
drivers/mfd/Kconfig
drivers/net/Kconfig
drivers/net/cs89x0.c
drivers/net/smc91x.c
drivers/net/smc91x.h
sound/arm/pxa2xx-ac97.c
sound/soc/pxa/corgi.c
sound/soc/pxa/pxa2xx-ac97.c
sound/soc/pxa/pxa2xx-i2s.c
sound/soc/pxa/spitz.c

diff --combined MAINTAINERS
index 46d94ff340c69b1e556b6cc2a325d2dd5551384e,c77df0f449de81d0b44127288c37b41d5b5de0c5..85be56a6efbfe5f8fafb6a499cafbb3562ac2554
@@@ -271,20 -271,20 +271,20 @@@ W:      http://www.lesswatts.org/projects/ac
  S:    Supported
  
  ACPI WMI DRIVER
 -P:      Carlos Corbacho
 -M:      carlos@strangeworlds.co.uk
 -L:      linux-acpi@vger.kernel.org
 -W:      http://www.lesswatts.org/projects/acpi/
 -S:      Maintained
 +P:    Carlos Corbacho
 +M:    carlos@strangeworlds.co.uk
 +L:    linux-acpi@vger.kernel.org
 +W:    http://www.lesswatts.org/projects/acpi/
 +S:    Maintained
  
  AD1889 ALSA SOUND DRIVER
 -P:     Kyle McMartin
 -M:     kyle@mcmartin.ca
 -P:     Thibaut Varene
 -M:     T-Bone@parisc-linux.org
 -W:     http://wiki.parisc-linux.org/AD1889
 -L:     linux-parisc@vger.kernel.org
 -S:     Maintained
 +P:    Kyle McMartin
 +M:    kyle@mcmartin.ca
 +P:    Thibaut Varene
 +M:    T-Bone@parisc-linux.org
 +W:    http://wiki.parisc-linux.org/AD1889
 +L:    linux-parisc@vger.kernel.org
 +S:    Maintained
  
  ADM1025 HARDWARE MONITOR DRIVER
  P:    Jean Delvare
@@@ -466,6 -466,12 +466,12 @@@ M:       kernel@wantstofly.or
  L:    linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
  S:    Maintained
  
+ ARM/AFEB9260 MACHINE SUPPORT
+ P:    Sergey Lapin
+ M:    slapin@ossfans.org
+ L:    linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
+ S:    Maintained
  ARM/AJECO 1ARM MACHINE SUPPORT
  P:    Lennert Buytenhek
  M:    kernel@wantstofly.org
@@@ -473,11 -479,11 +479,11 @@@ L:      linux-arm-kernel@lists.arm.linux.org
  S:    Maintained
  
  ARM/ATMEL AT91RM9200 ARM ARCHITECTURE
 -P:      Andrew Victor
 -M:      linux@maxim.org.za
 -L:      linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 -W:      http://maxim.org.za/at91_26.html
 -S:      Maintained
 +P:    Andrew Victor
 +M:    linux@maxim.org.za
 +L:    linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 +W:    http://maxim.org.za/at91_26.html
 +S:    Maintained
  
  ARM/CIRRUS LOGIC EP93XX ARM ARCHITECTURE
  P:    Lennert Buytenhek
@@@ -491,7 -497,7 +497,7 @@@ M: kernel@wantstofly.or
  L:    linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
  S:    Maintained
  
- ARM/COMPULAB CM-X270/EM-X270 MACHINE SUPPORT
+ ARM/COMPULAB CM-X270/EM-X270 and CM-X300 MACHINE SUPPORT
  P:    Mike Rapoport
  M:    mike@compulab.co.il
  L:    linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
@@@ -532,10 -538,10 +538,10 @@@ L:      linux-arm-kernel@lists.arm.linux.org
  S:    Maintained
  
  ARM/HP JORNADA 7XX MACHINE SUPPORT
 -P:      Kristoffer Ericson
 -M:      kristoffer.ericson@gmail.com
 -W:      www.jlime.com
 -S:      Maintained
 +P:    Kristoffer Ericson
 +M:    kristoffer.ericson@gmail.com
 +W:    www.jlime.com
 +S:    Maintained
  
  ARM/INTEL IOP32X ARM ARCHITECTURE
  P:    Lennert Buytenhek
@@@ -623,6 -629,12 +629,12 @@@ M:       marek.vasut@gmail.co
  W:    http://hackndev.com
  S:    Maintained
  
+ ARM/PALMZ72 SUPPORT
+ P:     Sergey Lapin
+ M:     slapin@ossfans.org
+ W:     http://hackndev.com
+ S:     Maintained
  ARM/PLEB SUPPORT
  P:    Peter Chubb
  M:    pleb@gelato.unsw.edu.au
@@@ -1017,7 -1029,7 +1029,7 @@@ T:      git kernel.org:/pub/scm/linux/kernel
  S:    Maintained
  
  CAFE CMOS INTEGRATED CAMERA CONTROLLER DRIVER
 -P:    Jonathan Corbet
 +P:    Jonathan Corbet
  M:    corbet@lwn.net
  L:    video4linux-list@redhat.com
  S:    Maintained
@@@ -1048,13 -1060,6 +1060,13 @@@ L:    cbe-oss-dev@ozlabs.or
  W:    http://www.ibm.com/developerworks/power/cell/
  S:    Supported
  
 +CISCO 10G ETHERNET DRIVER
 +P:    Scott Feldman
 +M:    scofeldm@cisco.com
 +P:    Joe Eykholt
 +M:    jeykholt@cisco.com
 +S:    Supported
 +
  CFAG12864B LCD DRIVER
  P:    Miguel Ojeda Sandonis
  M:    miguel.ojeda.sandonis@gmail.com
@@@ -1205,7 -1210,9 +1217,7 @@@ M:      hpa@zytor.co
  S:    Maintained
  
  CPUSETS
 -P:    Paul Jackson
  P:    Paul Menage
 -M:    pj@sgi.com
  M:    menage@google.com
  L:    linux-kernel@vger.kernel.org
  W:    http://www.bullopensource.org/cpuset/
@@@ -1364,7 -1371,7 +1376,7 @@@ P:      Digi International, In
  M:    Eng.Linux@digi.com
  L:    Eng.Linux@digi.com
  W:    http://www.digi.com
 -S:    Orphaned
 +S:    Orphan
  
  DIRECTORY NOTIFICATION
  P:    Stephen Rothwell
@@@ -1428,12 -1435,12 +1440,12 @@@ L:   linux-acpi@vger.kernel.or
  S:    Supported
  
  DOCUMENTATION (/Documentation directory)
 -P:     Michael Kerrisk
 -M:     mtk.manpages@gmail.com
 -P:     Randy Dunlap
 -M:     rdunlap@xenotime.net
 -L:     linux-doc@vger.kernel.org
 -S:     Maintained
 +P:    Michael Kerrisk
 +M:    mtk.manpages@gmail.com
 +P:    Randy Dunlap
 +M:    rdunlap@xenotime.net
 +L:    linux-doc@vger.kernel.org
 +S:    Maintained
  
  DOUBLETALK DRIVER
  P:    James R. Van Zandt
@@@ -1464,7 -1471,7 +1476,7 @@@ S:      Maintaine
  DVB SUBSYSTEM AND DRIVERS
  P:    LinuxTV.org Project
  M:    v4l-dvb-maintainer@linuxtv.org
 -L:    linux-dvb@linuxtv.org (subscription required)
 +L:    linux-dvb@linuxtv.org (subscription required)
  W:    http://linuxtv.org/
  T:    git kernel.org:/pub/scm/linux/kernel/git/mchehab/v4l-dvb.git
  S:    Maintained
@@@ -1802,7 -1809,7 +1814,7 @@@ FUTURE DOMAIN TMC-16x0 SCSI DRIVER (16-
  P:    Rik Faith
  M:    faith@cs.unc.edu
  L:    linux-scsi@vger.kernel.org
 -S:    Odd fixes (e.g., new signatures)
 +S:    Odd Fixes (e.g., new signatures)
  
  GDT SCSI DISK ARRAY CONTROLLER DRIVER
  P:    Achim Leubner
@@@ -1843,10 -1850,10 +1855,10 @@@ S:   Maintaine
  HARDWARE MONITORING
  L:    lm-sensors@lm-sensors.org
  W:    http://www.lm-sensors.org/
 -S:    Orphaned
 +S:    Orphan
  
  HARDWARE RANDOM NUMBER GENERATOR CORE
 -S:    Orphaned
 +S:    Orphan
  
  HARD DRIVE ACTIVE PROTECTION SYSTEM (HDAPS) DRIVER
  P:    Robert Love
@@@ -1989,7 -1996,7 +2001,7 @@@ S:      Maintaine
  I2C/SMBUS STUB DRIVER
  P:    Mark M. Hoffman
  M:    mhoffman@lightlink.com
 -L:    lm-sensors@lm-sensors.org
 +L:    i2c@lm-sensors.org
  S:    Maintained
  
  I2C SUBSYSTEM
@@@ -2113,7 -2120,7 +2125,7 @@@ M:      rolandd@cisco.co
  P:    Sean Hefty
  M:    sean.hefty@intel.com
  P:    Hal Rosenstock
 -M:    hal.rosenstock@gmail.com 
 +M:    hal.rosenstock@gmail.com
  L:    general@lists.openfabrics.org
  W:    http://www.openib.org/
  T:    git kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git
@@@ -2326,12 -2333,6 +2338,12 @@@ L:    video4linux-list@redhat.co
  W:    http://www.ivtvdriver.org
  S:    Maintained
  
 +JME NETWORK DRIVER
 +P:    Guo-Fu Tseng
 +M:    cooldavid@cooldavid.org
 +L:    netdev@vger.kernel.org
 +S:    Maintained
 +
  JOURNALLING FLASH FILE SYSTEM V2 (JFFS2)
  P:    David Woodhouse
  M:    dwmw2@infradead.org
@@@ -2707,18 -2708,17 +2719,18 @@@ S:   Maintaine
  
  MARVELL YUKON / SYSKONNECT DRIVER
  P:    Mirko Lindner
 -M:    mlindner@syskonnect.de
 +M:    mlindner@syskonnect.de
  P:    Ralph Roesler
 -M:    rroesler@syskonnect.de
 -W:    http://www.syskonnect.com
 -S:    Supported
 +M:    rroesler@syskonnect.de
 +W:    http://www.syskonnect.com
 +S:    Supported
  
  MAN-PAGES: MANUAL PAGES FOR LINUX -- Sections 2, 3, 4, 5, and 7
  P:    Michael Kerrisk
  M:    mtk.manpages@gmail.com
 -W:     http://www.kernel.org/doc/man-pages
 -S:     Supported
 +W:    http://www.kernel.org/doc/man-pages
 +L:    linux-man@vger.kernel.org
 +S:    Supported
  
  MARVELL LIBERTAS WIRELESS DRIVER
  P:    Dan Williams
@@@ -2747,7 -2747,7 +2759,7 @@@ S:      Maintaine
  MEGARAID SCSI DRIVERS
  P:    Neela Syam Kolli
  M:    megaraidlinux@lsi.com
 -S:    linux-scsi@vger.kernel.org
 +L:    linux-scsi@vger.kernel.org
  W:    http://megaraid.lsilogic.com
  S:    Maintained
  
@@@ -2865,7 -2865,7 +2877,7 @@@ MULTIMEDIA CARD (MMC) ETC. OVER SP
  P:    David Brownell
  M:    dbrownell@users.sourceforge.net
  L:    linux-kernel@vger.kernel.org
 -S:    Odd fixes
 +S:    Odd Fixes
  
  MULTISOUND SOUND DRIVER
  P:    Andrew Veliath
@@@ -2879,10 -2879,10 +2891,10 @@@ L:   linux-kernel@vger.kernel.or
  S:    Maintained
  
  MUSB MULTIPOINT HIGH SPEED DUAL-ROLE CONTROLLER
 -P:     Felipe Balbi
 -M:     felipe.balbi@nokia.com
 -L:     linux-usb@vger.kernel.org
 -S:     Maintained
 +P:    Felipe Balbi
 +M:    felipe.balbi@nokia.com
 +L:    linux-usb@vger.kernel.org
 +S:    Maintained
  
  MYRICOM MYRI-10G 10GbE DRIVER (MYRI10GE)
  P:    Andrew Gallatin
@@@ -2894,7 -2894,7 +2906,7 @@@ W:      http://www.myri.com/scs/download-Myr
  S:    Supported
  
  NATSEMI ETHERNET DRIVER (DP8381x)
 -P:    Tim Hockin
 +P:    Tim Hockin
  M:    thockin@hockin.org
  S:    Maintained
  
@@@ -3113,7 -3113,7 +3125,7 @@@ M:      laforge@gnumonks.or
  S:    Maintained
  
  OMNIVISION OV7670 SENSOR DRIVER
 -P:    Jonathan Corbet
 +P:    Jonathan Corbet
  M:    corbet@lwn.net
  L:    video4linux-list@redhat.com
  S:    Maintained
@@@ -3223,7 -3223,7 +3235,7 @@@ T:      git kernel.org:/pub/scm/linux/kernel
  S:    Supported
  
  PCI HOTPLUG CORE
 -P:    Kristen Carlson Accardi
 +P:    Kristen Carlson Accardi
  M:    kristen.c.accardi@intel.com
  S:    Supported
  
@@@ -3397,13 -3397,6 +3409,13 @@@ M:    linux-driver@qlogic.co
  L:    netdev@vger.kernel.org
  S:    Supported
  
 +QLOGIC QLGE 10Gb ETHERNET DRIVER
 +P:    Ron Mercer
 +M:    linux-driver@qlogic.com
 +M:    ron.mercer@qlogic.com
 +L:    netdev@vger.kernel.org
 +S:    Supported
 +
  QNX4 FILESYSTEM
  P:    Anders Larsen
  M:    al@alarsen.net
@@@ -3670,8 -3663,7 +3682,8 @@@ P:      Eric Pari
  M:    eparis@parisplace.org
  L:    linux-kernel@vger.kernel.org (kernel issues)
  L:    selinux@tycho.nsa.gov (subscribers-only, general discussion)
 -W:    http://www.nsa.gov/selinux
 +W:    http://selinuxproject.org
 +T:    git kernel.org:pub/scm/linux/kernel/git/jmorris/security-testing-2.6.git
  S:    Supported
  
  SENSABLE PHANTOM
@@@ -3746,7 -3738,7 +3758,7 @@@ S:      Maintaine
  SIS 96X I2C/SMBUS DRIVER
  P:    Mark M. Hoffman
  M:    mhoffman@lightlink.com
 -L:    lm-sensors@lm-sensors.org
 +L:    i2c@lm-sensors.org
  S:    Maintained
  
  SIS FRAMEBUFFER DRIVER
@@@ -3788,10 -3780,10 +3800,10 @@@ M:   bn@niasdigital.co
  S:    Maintained
  
  SOC-CAMERA V4L2 SUBSYSTEM
 -P:     Guennadi Liakhovetski
 -M:     g.liakhovetski@gmx.de
 -L:     video4linux-list@redhat.com
 -S:     Maintained
 +P:    Guennadi Liakhovetski
 +M:    g.liakhovetski@gmx.de
 +L:    video4linux-list@redhat.com
 +S:    Maintained
  
  SOFTWARE RAID (Multiple Disks) SUPPORT
  P:    Ingo Molnar
@@@ -3848,19 -3840,16 +3860,19 @@@ S:   Maintaine
  SOUND
  P:    Jaroslav Kysela
  M:    perex@perex.cz
 +P:    Takashi Iwai
 +M:    tiwai@suse.de
  L:    alsa-devel@alsa-project.org (subscribers-only)
  S:    Maintained
  
  SOUND - SOC LAYER / DYNAMIC AUDIO POWER MANAGEMENT
  P:    Liam Girdwood
 -M:    liam.girdwood@wolfsonmicro.com
 +M:    lrg@slimlogic.co.uk
  P:    Mark Brown
  M:    broonie@opensource.wolfsonmicro.com
  T:    git opensource.wolfsonmicro.com/linux-2.6-asoc
  L:    alsa-devel@alsa-project.org (subscribers-only)
 +W:    http://alsa-project.org/main/index.php/ASoC
  S:    Supported
  
  SPI SUBSYSTEM
@@@ -3948,7 -3937,7 +3960,7 @@@ S:      Maintaine
  
  STARMODE RADIO IP (STRIP) PROTOCOL DRIVER
  W:    http://mosquitonet.Stanford.EDU/strip.html
 -S:    Unsupported ?
 +S:    Orphan
  
  STRADIS MPEG-2 DECODER DRIVER
  P:    Nathan Laredo
@@@ -4029,9 -4018,9 +4041,9 @@@ T:      git repo.or.cz/linux-2.6/linux-acpi-
  S:    Maintained
  
  TI FLASH MEDIA INTERFACE DRIVER
 -P:      Alex Dubov
 -M:      oakad@yahoo.com
 -S:      Maintained
 +P:    Alex Dubov
 +M:    oakad@yahoo.com
 +S:    Maintained
  
  TI OMAP MMC INTERFACE DRIVER
  P:    Carlos Aguiar, Anderson Briglia and Syed Khasim
@@@ -4177,13 -4166,13 +4189,13 @@@ USB BLOCK DRIVER (UB ub
  P:    Pete Zaitcev
  M:    zaitcev@redhat.com
  L:    linux-kernel@vger.kernel.org
 -L:      linux-usb@vger.kernel.org
 +L:    linux-usb@vger.kernel.org
  S:    Supported
  
  USB CDC ETHERNET DRIVER
  P:    Greg Kroah-Hartman
  M:    greg@kroah.com
 -L:      linux-usb@vger.kernel.org
 +L:    linux-usb@vger.kernel.org
  S:    Maintained
  W:    http://www.kroah.com/linux-usb/
  
@@@ -4210,13 -4199,13 +4222,13 @@@ S:   Maintaine
  USB EHCI DRIVER
  P:    David Brownell
  M:    dbrownell@users.sourceforge.net
 -L:      linux-usb@vger.kernel.org
 +L:    linux-usb@vger.kernel.org
  S:    Odd Fixes
  
  USB ET61X[12]51 DRIVER
  P:    Luca Risolia
  M:    luca.risolia@studio.unibo.it
 -L:      linux-usb@vger.kernel.org
 +L:    linux-usb@vger.kernel.org
  L:    video4linux-list@redhat.com
  W:    http://www.linux-projects.org
  S:    Maintained
  USB GADGET/PERIPHERAL SUBSYSTEM
  P:    David Brownell
  M:    dbrownell@users.sourceforge.net
 -L:      linux-usb@vger.kernel.org
 +L:    linux-usb@vger.kernel.org
  W:    http://www.linux-usb.org/gadget
  S:    Maintained
  
  USB HID/HIDBP DRIVERS (USB KEYBOARDS, MICE, REMOTE CONTROLS, ...)
  P:    Jiri Kosina
  M:    jkosina@suse.cz
 -L:      linux-usb@vger.kernel.org
 +L:    linux-usb@vger.kernel.org
  T:    git kernel.org:/pub/scm/linux/kernel/git/jikos/hid.git
  S:    Maintained
  
  USB ISP116X DRIVER
  P:    Olav Kongas
  M:    ok@artecdesign.ee
 -L:      linux-usb@vger.kernel.org
 +L:    linux-usb@vger.kernel.org
  S:    Maintained
  
  USB KAWASAKI LSI DRIVER
  P:    Oliver Neukum
  M:    oliver@neukum.name
 -L:      linux-usb@vger.kernel.org
 +L:    linux-usb@vger.kernel.org
  S:    Maintained
  
  USB MASS STORAGE DRIVER
  P:    Matthew Dharm
  M:    mdharm-usb@one-eyed-alien.net
 -L:      linux-usb@vger.kernel.org
 +L:    linux-usb@vger.kernel.org
  L:    usb-storage@lists.one-eyed-alien.net
  S:    Maintained
  W:    http://www.one-eyed-alien.net/~mdharm/linux-usb/
  USB OHCI DRIVER
  P:    David Brownell
  M:    dbrownell@users.sourceforge.net
 -L:      linux-usb@vger.kernel.org
 +L:    linux-usb@vger.kernel.org
  S:    Odd Fixes
  
  USB OPTION-CARD DRIVER
  P:    Matthias Urlichs
  M:    smurf@smurf.noris.de
 -L:      linux-usb@vger.kernel.org
 +L:    linux-usb@vger.kernel.org
  S:    Maintained
  
  USB OV511 DRIVER
  P:    Mark McClelland
  M:    mmcclell@bigfoot.com
 -L:      linux-usb@vger.kernel.org
 +L:    linux-usb@vger.kernel.org
  W:    http://alpha.dyndns.org/ov511/
  S:    Maintained
  
  USB PEGASUS DRIVER
  P:    Petko Manolov
  M:    petkan@users.sourceforge.net
 -L:      linux-usb@vger.kernel.org
 +L:    linux-usb@vger.kernel.org
  L:    netdev@vger.kernel.org
  W:    http://pegasus2.sourceforge.net/
  S:    Maintained
  USB PRINTER DRIVER (usblp)
  P:    Pete Zaitcev
  M:    zaitcev@redhat.com
 -L:      linux-usb@vger.kernel.org
 +L:    linux-usb@vger.kernel.org
  S:    Supported
  
  USB RTL8150 DRIVER
  P:    Petko Manolov
  M:    petkan@users.sourceforge.net
 -L:      linux-usb@vger.kernel.org
 +L:    linux-usb@vger.kernel.org
  L:    netdev@vger.kernel.org
  W:    http://pegasus2.sourceforge.net/
  S:    Maintained
  USB SE401 DRIVER
  P:    Jeroen Vreeken
  M:    pe1rxq@amsat.org
 -L:      linux-usb@vger.kernel.org
 +L:    linux-usb@vger.kernel.org
  W:    http://www.chello.nl/~j.vreeken/se401/
  S:    Maintained
  
  USB SERIAL BELKIN F5U103 DRIVER
  P:    William Greathouse
  M:    wgreathouse@smva.com
 -L:      linux-usb@vger.kernel.org
 +L:    linux-usb@vger.kernel.org
  S:    Maintained
  
  USB SERIAL CYPRESS M8 DRIVER
  P:    Lonnie Mendez
  M:    dignome@gmail.com
 -L:      linux-usb@vger.kernel.org
 +L:    linux-usb@vger.kernel.org
  S:    Maintained
  W:    http://geocities.com/i0xox0i
  W:    http://firstlight.net/cvs
@@@ -4327,45 -4316,39 +4339,45 @@@ USB SERIAL DIGI ACCELEPORT DRIVE
  P:    Peter Berger and Al Borchers
  M:    pberger@brimson.com
  M:    alborchers@steinerpoint.com
 -L:      linux-usb@vger.kernel.org
 +L:    linux-usb@vger.kernel.org
  S:    Maintained
  
  USB SERIAL DRIVER
  P:    Greg Kroah-Hartman
  M:    gregkh@suse.de
 -L:      linux-usb@vger.kernel.org
 +L:    linux-usb@vger.kernel.org
  S:    Supported
  
  USB SERIAL EMPEG EMPEG-CAR MARK I/II DRIVER
  P:    Gary Brubaker
  M:    xavyer@ix.netcom.com
 -L:      linux-usb@vger.kernel.org
 +L:    linux-usb@vger.kernel.org
  S:    Maintained
  
  USB SERIAL KEYSPAN DRIVER
  P:    Greg Kroah-Hartman
  M:    greg@kroah.com
 -L:      linux-usb@vger.kernel.org
 +L:    linux-usb@vger.kernel.org
  W:    http://www.kroah.com/linux/
  S:    Maintained
  
  USB SERIAL WHITEHEAT DRIVER
  P:    Support Department
  M:    support@connecttech.com
 -L:      linux-usb@vger.kernel.org
 +L:    linux-usb@vger.kernel.org
  W:    http://www.connecttech.com
  S:    Supported
  
 +USB SMSC95XX ETHERNET DRIVER
 +P:    Steve Glendinning
 +M:    steve.glendinning@smsc.com
 +L:    netdev@vger.kernel.org
 +S:    Supported
 +
  USB SN9C1xx DRIVER
  P:    Luca Risolia
  M:    luca.risolia@studio.unibo.it
 -L:      linux-usb@vger.kernel.org
 +L:    linux-usb@vger.kernel.org
  L:    video4linux-list@redhat.com
  W:    http://www.linux-projects.org
  S:    Maintained
  USB SUBSYSTEM
  P:    Greg Kroah-Hartman
  M:    gregkh@suse.de
 -L:      linux-usb@vger.kernel.org
 +L:    linux-usb@vger.kernel.org
  W:    http://www.linux-usb.org
  T:    quilt kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/
  S:    Supported
  USB UHCI DRIVER
  P:    Alan Stern
  M:    stern@rowland.harvard.edu
 -L:      linux-usb@vger.kernel.org
 +L:    linux-usb@vger.kernel.org
  S:    Maintained
  
  USB "USBNET" DRIVER FRAMEWORK
@@@ -4402,7 -4385,7 +4414,7 @@@ S:      Maintaine
  USB W996[87]CF DRIVER
  P:    Luca Risolia
  M:    luca.risolia@studio.unibo.it
 -L:      linux-usb@vger.kernel.org
 +L:    linux-usb@vger.kernel.org
  L:    video4linux-list@redhat.com
  W:    http://www.linux-projects.org
  S:    Maintained
@@@ -4416,7 -4399,7 +4428,7 @@@ S:      Maintaine
  USB ZC0301 DRIVER
  P:    Luca Risolia
  M:    luca.risolia@studio.unibo.it
 -L:      linux-usb@vger.kernel.org
 +L:    linux-usb@vger.kernel.org
  L:    video4linux-list@redhat.com
  W:    http://www.linux-projects.org
  S:    Maintained
  USB ZD1201 DRIVER
  P:    Jeroen Vreeken
  M:    pe1rxq@amsat.org
 -L:      linux-usb@vger.kernel.org
 +L:    linux-usb@vger.kernel.org
  W:    http://linux-lc100020.sourceforge.net
  S:    Maintained
  
  USB ZR364XX DRIVER
  P:    Antoine Jacquet
  M:    royale@zerezo.com
 -L:      linux-usb@vger.kernel.org
 +L:    linux-usb@vger.kernel.org
  L:    video4linux-list@redhat.com
  W:    http://royale.zerezo.com/zr364xx/
  S:    Maintained
index aa2fc375a3257fcb4a1e5b8e468dc1af7c494650,42b976e8a7e991d664ba4ffd4052aeb0c6a1d665..58754f066d5bba1b604b9087eaa2aefd89617288
@@@ -21,8 -21,8 +21,8 @@@
  #include <linux/kernel.h>
  #include <linux/module.h>
  #include <linux/init.h>
+ #include <linux/io.h>
  
- #include <asm/io.h>
  #include <mach/hardware.h>
  #include <mach/psc.h>
  #include <mach/mux.h>
@@@ -70,6 -70,9 +70,6 @@@ void davinci_psc_config(unsigned int do
  {
        u32 epcpr, ptcmd, ptstat, pdstat, pdctl1, mdstat, mdctl, mdstat_mask;
  
 -      if (id < 0)
 -              return;
 -
        mdctl = davinci_readl(DAVINCI_PWR_SLEEP_CNTRL_BASE + MDCTL + 4 * id);
        if (enable)
                mdctl |= 0x00000003;    /* Enable Module */
index cd317795f3559779e3ac788fff66028b243b3cd6,89d746d13fdacaa93ea5350d79acef66209f50cd..a14c2948c62aa6a257f40d400c642e5f1cc91b8d
@@@ -25,7 -25,7 +25,7 @@@
  #include "common.h"
  
  static struct mv643xx_eth_platform_data db88f6281_ge00_data = {
 -      .phy_addr       = 8,
 +      .phy_addr       = MV643XX_ETH_PHY_ADDR(8),
  };
  
  static struct mv_sata_platform_data db88f6281_sata_data = {
@@@ -44,7 -44,6 +44,6 @@@ static void __init db88f6281_init(void
        kirkwood_rtc_init();
        kirkwood_sata_init(&db88f6281_sata_data);
        kirkwood_uart0_init();
-       kirkwood_uart1_init();
  }
  
  static int __init db88f6281_pci_init(void)
index b6416615c0b9c0667157c257f733c4cfce30c0b4,fb8990f9770dc950ca158d1bcfaed95cf5deb816..f785093e433f4f3f8d8feeb460691980a5413e50
@@@ -69,7 -69,7 +69,7 @@@ static struct platform_device rd88f6281
  };
  
  static struct mv643xx_eth_platform_data rd88f6281_ge00_data = {
 -      .phy_addr       = -1,
 +      .phy_addr       = MV643XX_ETH_PHY_NONE,
        .speed          = SPEED_1000,
        .duplex         = DUPLEX_FULL,
  };
@@@ -90,7 -90,6 +90,6 @@@ static void __init rd88f6281_init(void
        kirkwood_rtc_init();
        kirkwood_sata_init(&rd88f6281_sata_data);
        kirkwood_uart0_init();
-       kirkwood_uart1_init();
  
        platform_device_register(&rd88f6281_nand_flash);
  }
index 5842d3bb02b27df67962d2c2140bbd3f5b5295e8,d56a05e8356b0a88a994a11b2e3e9edf8ce7e8a9..238a2f8c2d525b1f65b0579f86c9b0fc6e9761cb
@@@ -285,6 -285,11 +285,11 @@@ static struct resource mv78xx0_ge00_sha
                .start  = GE00_PHYS_BASE + 0x2000,
                .end    = GE00_PHYS_BASE + 0x3fff,
                .flags  = IORESOURCE_MEM,
+       }, {
+               .name   = "ge err irq",
+               .start  = IRQ_MV78XX0_GE_ERR,
+               .end    = IRQ_MV78XX0_GE_ERR,
+               .flags  = IORESOURCE_IRQ,
        },
  };
  
@@@ -294,7 -299,7 +299,7 @@@ static struct platform_device mv78xx0_g
        .dev            = {
                .platform_data  = &mv78xx0_ge00_shared_data,
        },
-       .num_resources  = 1,
+       .num_resources  = ARRAY_SIZE(mv78xx0_ge00_shared_resources),
        .resource       = mv78xx0_ge00_shared_resources,
  };
  
@@@ -330,7 -335,6 +335,7 @@@ void __init mv78xx0_ge00_init(struct mv
  struct mv643xx_eth_shared_platform_data mv78xx0_ge01_shared_data = {
        .t_clk          = 0,
        .dram           = &mv78xx0_mbus_dram_info,
 +      .shared_smi     = &mv78xx0_ge00_shared,
  };
  
  static struct resource mv78xx0_ge01_shared_resources[] = {
@@@ -371,6 -375,7 +376,6 @@@ static struct platform_device mv78xx0_g
  void __init mv78xx0_ge01_init(struct mv643xx_eth_platform_data *eth_data)
  {
        eth_data->shared = &mv78xx0_ge01_shared;
 -      eth_data->shared_smi = &mv78xx0_ge00_shared;
        mv78xx0_ge01.dev.platform_data = eth_data;
  
        platform_device_register(&mv78xx0_ge01_shared);
  struct mv643xx_eth_shared_platform_data mv78xx0_ge10_shared_data = {
        .t_clk          = 0,
        .dram           = &mv78xx0_mbus_dram_info,
 +      .shared_smi     = &mv78xx0_ge00_shared,
  };
  
  static struct resource mv78xx0_ge10_shared_resources[] = {
@@@ -425,6 -429,7 +430,6 @@@ static struct platform_device mv78xx0_g
  void __init mv78xx0_ge10_init(struct mv643xx_eth_platform_data *eth_data)
  {
        eth_data->shared = &mv78xx0_ge10_shared;
 -      eth_data->shared_smi = &mv78xx0_ge00_shared;
        mv78xx0_ge10.dev.platform_data = eth_data;
  
        platform_device_register(&mv78xx0_ge10_shared);
  struct mv643xx_eth_shared_platform_data mv78xx0_ge11_shared_data = {
        .t_clk          = 0,
        .dram           = &mv78xx0_mbus_dram_info,
 +      .shared_smi     = &mv78xx0_ge00_shared,
  };
  
  static struct resource mv78xx0_ge11_shared_resources[] = {
@@@ -479,6 -483,7 +484,6 @@@ static struct platform_device mv78xx0_g
  void __init mv78xx0_ge11_init(struct mv643xx_eth_platform_data *eth_data)
  {
        eth_data->shared = &mv78xx0_ge11_shared;
 -      eth_data->shared_smi = &mv78xx0_ge00_shared;
        mv78xx0_ge11.dev.platform_data = eth_data;
  
        platform_device_register(&mv78xx0_ge11_shared);
index 610f2a6297f87c893df7a637fa6a7aabcdf4552e,c5bd54d8aa0c0bbceb65c1ed3aa59c05e36765f4..dfbb68df7b0986de42918ef5a6222eb0e337e940
@@@ -161,7 -161,7 +161,7 @@@ subsys_initcall(kurobox_pro_pci_init)
   ****************************************************************************/
  
  static struct mv643xx_eth_platform_data kurobox_pro_eth_data = {
 -      .phy_addr       = 8,
 +      .phy_addr       = MV643XX_ETH_PHY_ADDR(8),
  };
  
  /*****************************************************************************
@@@ -293,7 -293,7 +293,7 @@@ static void kurobox_pro_power_off(void
        const unsigned char shutdownwait[]      = {0x00, 0x0c};
        const unsigned char poweroff[]          = {0x00, 0x06};
        /* 38400 baud divisor */
-       const unsigned divisor = ((ORION5X_TCLK + (8 * 38400)) / (16 * 38400));
+       const unsigned divisor = ((orion5x_tclk + (8 * 38400)) / (16 * 38400));
  
        pr_info("%s: triggering power-off...\n", __func__);
  
index 19cde24fbfdf91a6bec33d628ebe510de20f1d64,5128da1101bfe60a7805bcc28a5b02648636ca4d..c9abb8fbfa70462dfce29e7452cacd04a03073c1
@@@ -16,6 -16,7 +16,7 @@@
  #include <linux/timex.h>
  #include <linux/serial_reg.h>
  #include "tsx09-common.h"
+ #include "common.h"
  
  /*****************************************************************************
   * QNAP TS-x09 specific power off method via UART1-attached PIC
@@@ -26,7 -27,7 +27,7 @@@
  void qnap_tsx09_power_off(void)
  {
        /* 19200 baud divisor */
-       const unsigned divisor = ((ORION5X_TCLK + (8 * 19200)) / (16 * 19200));
+       const unsigned divisor = ((orion5x_tclk + (8 * 19200)) / (16 * 19200));
  
        pr_info("%s: triggering power-off...\n", __func__);
  
@@@ -48,7 -49,7 +49,7 @@@
   ****************************************************************************/
  
  struct mv643xx_eth_platform_data qnap_tsx09_eth_data = {
 -      .phy_addr       = 8,
 +      .phy_addr       = MV643XX_ETH_PHY_ADDR(8),
  };
  
  static int __init qnap_tsx09_parse_hex_nibble(char n)
diff --combined arch/arm/mach-pxa/time.c
index b0d6b32654cf622d13a9ac91073a2f1426381d97,18d149745837af5df0ae1d882550921031169d46..f8a9a62959e5bfe9cb426e75560efb17a08f7194
@@@ -17,9 -17,9 +17,9 @@@
  #include <linux/interrupt.h>
  #include <linux/clockchips.h>
  #include <linux/sched.h>
 +#include <linux/cnt32_to_63.h>
  
  #include <asm/div64.h>
 -#include <asm/cnt32_to_63.h>
  #include <asm/mach/irq.h>
  #include <asm/mach/time.h>
  #include <mach/pxa-regs.h>
@@@ -155,7 -155,7 +155,7 @@@ static void __init pxa_timer_init(void
        OIER = 0;
        OSSR = OSSR_M0 | OSSR_M1 | OSSR_M2 | OSSR_M3;
  
-       if (cpu_is_pxa21x() || cpu_is_pxa25x())
+       if (cpu_is_pxa25x())
                clock_tick_rate = 3686400;
        else if (machine_is_mainstone())
                clock_tick_rate = 3249600;
index b422526f6d8baa3fb504b23ddc24ffc57f41512e,b9fae2a398517a143fa47d34f0c179e488be3ee1..c1fbd5b5f9c459fa772df1295a337b365bd49e88
@@@ -18,9 -18,9 +18,9 @@@
  #include <linux/ioport.h>
  #include <linux/sched.h>      /* just for sched_clock() - funny that */
  #include <linux/platform_device.h>
 +#include <linux/cnt32_to_63.h>
  
  #include <asm/div64.h>
 -#include <asm/cnt32_to_63.h>
  #include <mach/hardware.h>
  #include <asm/system.h>
  #include <asm/pgtable.h>
@@@ -42,7 -42,7 +42,7 @@@ EXPORT_SYMBOL(reset_status)
  static const unsigned short cclk_frequency_100khz[NR_FREQS] = {
         590,   /*  59.0 MHz */
         737,   /*  73.7 MHz */
-        885,   /*  88.5 MHz */
+        885,   /*  88.5 MHz */
        1032,   /* 103.2 MHz */
        1180,   /* 118.0 MHz */
        1327,   /* 132.7 MHz */
        1917,   /* 191.7 MHz */
        2064,   /* 206.4 MHz */
        2212,   /* 221.2 MHz */
-       2359,   /* 235.9 MHz */
-       2507,   /* 250.7 MHz */
-       2654,   /* 265.4 MHz */
-       2802    /* 280.2 MHz */
+       2359,   /* 235.9 MHz */
+       2507,   /* 250.7 MHz */
+       2654,   /* 265.4 MHz */
+       2802    /* 280.2 MHz */
  };
  
  #if defined(CONFIG_CPU_FREQ_SA1100) || defined(CONFIG_CPU_FREQ_SA1110)
@@@ -113,7 -113,7 +113,7 @@@ unsigned int sa11x0_getspeed(unsigned i
  #else
  /*
   * We still need to provide this so building without cpufreq works.
-  */ 
+  */
  unsigned int cpufreq_get(unsigned int cpu)
  {
        return cclk_frequency_100khz[PPCR & 0xf] * 100;
@@@ -389,7 -389,7 +389,7 @@@ EXPORT_SYMBOL(sa1100fb_lcd_power)
   */
  
  static struct map_desc standard_io_desc[] __initdata = {
-       {       /* PCM */
+       {       /* PCM */
                .virtual        =  0xf8000000,
                .pfn            = __phys_to_pfn(0x80000000),
                .length         = 0x00100000,
index b638f10411e8e27b573f926133e141922512204b,824121d52b8d1d20fe2365c615345022c757fc2b..565e0ba0d67e082b9481f6008d065302a5b0042f
  #include <linux/amba/clcd.h>
  #include <linux/clocksource.h>
  #include <linux/clockchips.h>
 +#include <linux/cnt32_to_63.h>
+ #include <linux/io.h>
  
 -#include <asm/cnt32_to_63.h>
  #include <asm/system.h>
  #include <mach/hardware.h>
- #include <asm/io.h>
  #include <asm/irq.h>
  #include <asm/leds.h>
  #include <asm/hardware/arm_timer.h>
@@@ -95,8 -95,7 +95,7 @@@ sic_handle_irq(unsigned int irq, struc
  
                irq += IRQ_SIC_START;
  
-               desc = irq_desc + irq;
-               desc_handle_irq(irq, desc);
+               generic_handle_irq(irq);
        } while (status);
  }
  
index 01da719a745366309dedb2a78ac17216dbbd342b,b38410f262031a2f22e55bb2cbdf1265bec062ee..a716ecd1db2792ddc5760a039ccaa83f799c011e
@@@ -13,9 -13,9 +13,9 @@@
  #include <linux/kernel.h>
  #include <linux/init.h>
  #include <linux/platform_device.h>
+ #include <linux/io.h>
  
  #include <mach/hardware.h>
- #include <asm/io.h>
  #include <asm/mach-types.h>
  #include <asm/mach/map.h>
  
@@@ -316,6 -316,19 +316,6 @@@ static inline void omap_init_mmc_conf(c
                                omap_cfg_reg(MMC_DAT3);
                        }
                }
 -#if defined(CONFIG_ARCH_OMAP2420)
 -              if (mmc_conf->mmc[0].internal_clock) {
 -                      /*
 -                       * Use internal loop-back in MMC/SDIO
 -                       * Module Input Clock selection
 -                       */
 -                      if (cpu_is_omap24xx()) {
 -                              u32 v = omap_ctrl_readl(OMAP2_CONTROL_DEVCONF0);
 -                              v |= (1 << 24); /* not used in 243x */
 -                              omap_ctrl_writel(v, OMAP2_CONTROL_DEVCONF0);
 -                      }
 -              }
 -#endif
        }
  
  #ifdef        CONFIG_ARCH_OMAP16XX
diff --combined drivers/mfd/Kconfig
index 68dc8d9eb24ee87e39a99d3543962b2453bd008f,5dba1651f9cc1d40aef4bb3c2bd91e0e3c2686a5..0dae245c625953fa2194f643d580db06f00a3aac
@@@ -21,7 -21,7 +21,7 @@@ config MFD_SM50
  
  config MFD_SM501_GPIO
        bool "Export GPIO via GPIO layer"
 -      depends on MFD_SM501 && HAVE_GPIO_LIB
 +      depends on MFD_SM501 && GPIOLIB
         ---help---
         This option uses the gpio library layer to export the 64 GPIO
         lines on the SM501. The platform data is used to supply the
@@@ -29,7 -29,7 +29,7 @@@
  
  config MFD_ASIC3
        bool "Support for Compaq ASIC3"
 -      depends on GENERIC_HARDIRQS && HAVE_GPIO_LIB && ARM
 +      depends on GENERIC_HARDIRQS && GPIOLIB && ARM
         ---help---
          This driver supports the ASIC3 multifunction chip found on many
          PDAs (mainly iPAQ and HTC based ones)
@@@ -50,6 -50,15 +50,15 @@@ config HTC_PASIC
          HTC Magician devices, respectively. Actual functionality is
          handled by the leds-pasic3 and ds1wm drivers.
  
+ config UCB1400_CORE
+       tristate "Philips UCB1400 Core driver"
+       help
+         This enables support for the Philips UCB1400 core functions.
+         The UCB1400 is an AC97 audio codec.
+         To compile this driver as a module, choose M here: the
+         module will be called ucb1400_core.
  config MFD_TMIO
        bool
        default n
diff --combined drivers/net/Kconfig
index 99ae44e256bc14ae540ae23d7004d298167c44b5,9df7bb93edcae0c84885d763042faa1c844ae5e1..e9d529442b067e5c016195be99cfb0d5c4927dc2
@@@ -1386,7 -1386,8 +1386,8 @@@ config FORCEDETH_NAP
  
  config CS89x0
        tristate "CS89x0 support"
-       depends on NET_PCI && (ISA || MACH_IXDP2351 || ARCH_IXDP2X01 || ARCH_PNX010X)
+       depends on NET_ETHERNET && (ISA || EISA || MACH_IXDP2351 \
+               || ARCH_IXDP2X01 || ARCH_PNX010X || MACH_MX31ADS)
        ---help---
          Support for CS89x0 chipset based Ethernet cards. If you have a
          network (Ethernet) card of this type, say Y and read the
          To compile this driver as a module, choose M here. The module
          will be called cs89x0.
  
+ config CS89x0_NONISA_IRQ
+       def_bool y
+       depends on CS89x0 != n
+       depends on MACH_IXDP2351 || ARCH_IXDP2X01 || ARCH_PNX010X || MACH_MX31ADS
  config TC35815
        tristate "TOSHIBA TC35815 Ethernet support"
        depends on NET_PCI && PCI && MIPS
@@@ -1813,7 -1819,7 +1819,7 @@@ config FEC
  
  config FEC_MPC52xx
        tristate "MPC52xx FEC driver"
 -      depends on PPC_MERGE && PPC_MPC52xx && PPC_BESTCOMM_FEC
 +      depends on PPC_MPC52xx && PPC_BESTCOMM_FEC
        select CRC32
        select PHYLIB
        ---help---
@@@ -1840,17 -1846,6 +1846,17 @@@ config NE_H830
          Say Y here if you want to use the NE2000 compatible
          controller on the Renesas H8/300 processor.
  
 +config ATL2
 +      tristate "Atheros L2 Fast Ethernet support"
 +      depends on PCI
 +      select CRC32
 +      select MII
 +      help
 +        This driver supports the Atheros L2 fast ethernet adapter.
 +
 +        To compile this driver as a module, choose M here.  The module
 +        will be called atl2.
 +
  source "drivers/net/fs_enet/Kconfig"
  
  endif # NET_ETHERNET
@@@ -1938,6 -1933,15 +1944,6 @@@ config E100
          To compile this driver as a module, choose M here. The module
          will be called e1000.
  
 -config E1000_DISABLE_PACKET_SPLIT
 -      bool "Disable Packet Split for PCI express adapters"
 -      depends on E1000
 -      help
 -        Say Y here if you want to use the legacy receive path for PCI express
 -        hardware.
 -
 -        If in doubt, say N.
 -
  config E1000E
        tristate "Intel(R) PRO/1000 PCI-Express Gigabit Ethernet support"
        depends on PCI && (!SPARC32 || BROKEN)
@@@ -2048,7 -2052,6 +2054,7 @@@ config R816
        tristate "Realtek 8169 gigabit ethernet support"
        depends on PCI
        select CRC32
 +      select MII
        ---help---
          Say Y here if you have a Realtek 8169 PCI Gigabit Ethernet adapter.
  
@@@ -2265,7 -2268,7 +2271,7 @@@ config UGETH_TX_ON_DEMAN
  config MV643XX_ETH
        tristate "Marvell Discovery (643XX) and Orion ethernet support"
        depends on MV64360 || MV64X60 || (PPC_MULTIPLATFORM && PPC32) || PLAT_ORION
 -      select MII
 +      select PHYLIB
        help
          This driver supports the gigabit ethernet MACs in the
          Marvell Discovery PPC/MIPS chipset family (MV643XX) and
@@@ -2284,13 -2287,12 +2290,13 @@@ config QLA3XX
          will be called qla3xxx.
  
  config ATL1
 -      tristate "Attansic L1 Gigabit Ethernet support (EXPERIMENTAL)"
 -      depends on PCI && EXPERIMENTAL
 +      tristate "Atheros/Attansic L1 Gigabit Ethernet support"
 +      depends on PCI
        select CRC32
        select MII
        help
 -        This driver supports the Attansic L1 gigabit ethernet adapter.
 +        This driver supports the Atheros/Attansic L1 gigabit ethernet
 +        adapter.
  
          To compile this driver as a module, choose M here.  The module
          will be called atl1.
@@@ -2306,18 -2308,6 +2312,18 @@@ config ATL1
          To compile this driver as a module, choose M here.  The module
          will be called atl1e.
  
 +config JME
 +      tristate "JMicron(R) PCI-Express Gigabit Ethernet support"
 +      depends on PCI
 +      select CRC32
 +      select MII
 +      ---help---
 +        This driver supports the PCI-Express gigabit ethernet adapters
 +        based on JMicron JMC250 chipset.
 +
 +        To compile this driver as a module, choose M here. The module
 +        will be called jme.
 +
  endif # NETDEV_1000
  
  #
@@@ -2393,18 -2383,10 +2399,18 @@@ config EHE
          To compile the driver as a module, choose M here. The module
          will be called ehea.
  
 +config ENIC
 +      tristate "E, the Cisco 10G Ethernet NIC"
 +      depends on PCI && INET
 +      select INET_LRO
 +      help
 +        This enables the support for the Cisco 10G Ethernet card.
 +
  config IXGBE
        tristate "Intel(R) 10GbE PCI Express adapters support"
        depends on PCI && INET
        select INET_LRO
 +      select INTEL_IOATDMA
        ---help---
          This driver supports Intel(R) 10GbE PCI Express family of
          adapters.  For more information on how to identify your adapter, go
@@@ -2456,7 -2438,6 +2462,7 @@@ config MYRI10G
        select FW_LOADER
        select CRC32
        select INET_LRO
 +      select INTEL_IOATDMA
        ---help---
          This driver supports Myricom Myri-10G Dual Protocol interface in
          Ethernet mode. If the eeprom on your board is not recent enough,
@@@ -2521,15 -2502,6 +2527,15 @@@ config BNX2
          To compile this driver as a module, choose M here: the module
          will be called bnx2x.  This is recommended.
  
 +config QLGE
 +      tristate "QLogic QLGE 10Gb Ethernet Driver Support"
 +      depends on PCI
 +      help
 +        This driver supports QLogic ISP8XXX 10Gb Ethernet cards.
 +
 +        To compile this driver as a module, choose M here: the module
 +        will be called qlge.
 +
  source "drivers/net/sfc/Kconfig"
  
  endif # NETDEV_10000
diff --combined drivers/net/cs89x0.c
index b0b66766ed27bf8de0d1c46f67283b9b030025ed,5890a917a628b2155ff88e6ad44ed130a166b5fc..a28de8182802c68698f86f966acb20a2032d74c4
@@@ -194,6 -194,12 +194,12 @@@ static unsigned int cs8900_irq_map[] = 
  #define CIRRUS_DEFAULT_IRQ    VH_INTC_INT_NUM_CASCADED_INTERRUPT_1 /* Event inputs bank 1 - ID 35/bit 3 */
  static unsigned int netcard_portlist[] __used __initdata = {CIRRUS_DEFAULT_BASE, 0};
  static unsigned int cs8900_irq_map[] = {CIRRUS_DEFAULT_IRQ, 0, 0, 0};
+ #elif defined(CONFIG_MACH_MX31ADS)
+ #include <mach/board-mx31ads.h>
+ static unsigned int netcard_portlist[] __used __initdata = {
+       PBC_BASE_ADDRESS + PBC_CS8900A_IOBASE + 0x300, 0
+ };
+ static unsigned cs8900_irq_map[] = {EXPIO_INT_ENET_INT, 0, 0, 0};
  #else
  static unsigned int netcard_portlist[] __used __initdata =
     { 0x300, 0x320, 0x340, 0x360, 0x200, 0x220, 0x240, 0x260, 0x280, 0x2a0, 0x2c0, 0x2e0, 0};
@@@ -802,7 -808,7 +808,7 @@@ cs89x0_probe1(struct net_device *dev, i
        } else {
                i = lp->isa_config & INT_NO_MASK;
                if (lp->chip_type == CS8900) {
- #if defined(CONFIG_MACH_IXDP2351) || defined(CONFIG_ARCH_IXDP2X01) || defined(CONFIG_ARCH_PNX010X)
+ #ifdef CONFIG_CS89x0_NONISA_IRQ
                        i = cs8900_irq_map[0];
  #else
                        /* Translate the IRQ using the IRQ mapping table. */
@@@ -1029,6 -1035,7 +1035,7 @@@ skip_this_frame
  
  void  __init reset_chip(struct net_device *dev)
  {
+ #if !defined(CONFIG_MACH_MX31ADS)
  #if !defined(CONFIG_MACH_IXDP2351) && !defined(CONFIG_ARCH_IXDP2X01)
        struct net_local *lp = netdev_priv(dev);
        int ioaddr = dev->base_addr;
        reset_start_time = jiffies;
        while( (readreg(dev, PP_SelfST) & INIT_DONE) == 0 && jiffies - reset_start_time < 2)
                ;
+ #endif /* !CONFIG_MACH_MX31ADS */
  }
  
  
@@@ -1304,7 -1312,7 +1312,7 @@@ net_open(struct net_device *dev
        else
  #endif
        {
- #if !defined(CONFIG_MACH_IXDP2351) && !defined(CONFIG_ARCH_IXDP2X01) && !defined(CONFIG_ARCH_PNX010X)
+ #ifndef CONFIG_CS89x0_NONISA_IRQ
                if (((1 << dev->irq) & lp->irq_map) == 0) {
                        printk(KERN_ERR "%s: IRQ %d is not in our map of allowable IRQs, which is %x\n",
                                 dev->name, dev->irq, lp->irq_map);
  release_dma:
  #if ALLOW_DMA
                free_dma(dev->dma);
 -#endif
  release_irq:
 -#if ALLOW_DMA
                release_dma_buff(lp);
  #endif
                  writereg(dev, PP_LineCTL, readreg(dev, PP_LineCTL) & ~(SERIAL_TX_ON | SERIAL_RX_ON));
diff --combined drivers/net/smc91x.c
index ef5ce8845c9d779d7be372ea03539921fca294f5,e332a518efe84de5a9b96c419546331c9b301b2c..c70870e0fd613d8292f9ccdc34494487342a6307
@@@ -270,7 -270,7 +270,7 @@@ static void smc_reset(struct net_devic
        unsigned int ctl, cfg;
        struct sk_buff *pending_skb;
  
 -      DBG(2, "%s: %s\n", dev->name, __FUNCTION__);
 +      DBG(2, "%s: %s\n", dev->name, __func__);
  
        /* Disable all interrupts, block TX tasklet */
        spin_lock_irq(&lp->lock);
@@@ -363,7 -363,7 +363,7 @@@ static void smc_enable(struct net_devic
        void __iomem *ioaddr = lp->base;
        int mask;
  
 -      DBG(2, "%s: %s\n", dev->name, __FUNCTION__);
 +      DBG(2, "%s: %s\n", dev->name, __func__);
  
        /* see the header file for options in TCR/RCR DEFAULT */
        SMC_SELECT_BANK(lp, 0);
@@@ -397,7 -397,7 +397,7 @@@ static void smc_shutdown(struct net_dev
        void __iomem *ioaddr = lp->base;
        struct sk_buff *pending_skb;
  
 -      DBG(2, "%s: %s\n", CARDNAME, __FUNCTION__);
 +      DBG(2, "%s: %s\n", CARDNAME, __func__);
  
        /* no more interrupts for me */
        spin_lock_irq(&lp->lock);
@@@ -430,7 -430,7 +430,7 @@@ static inline void  smc_rcv(struct net_
        void __iomem *ioaddr = lp->base;
        unsigned int packet_number, status, packet_len;
  
 -      DBG(3, "%s: %s\n", dev->name, __FUNCTION__);
 +      DBG(3, "%s: %s\n", dev->name, __func__);
  
        packet_number = SMC_GET_RXFIFO(lp);
        if (unlikely(packet_number & RXFIFO_REMPTY)) {
@@@ -577,7 -577,7 +577,7 @@@ static void smc_hardware_send_pkt(unsig
        unsigned int packet_no, len;
        unsigned char *buf;
  
 -      DBG(3, "%s: %s\n", dev->name, __FUNCTION__);
 +      DBG(3, "%s: %s\n", dev->name, __func__);
  
        if (!smc_special_trylock(&lp->lock)) {
                netif_stop_queue(dev);
@@@ -662,7 -662,7 +662,7 @@@ static int smc_hard_start_xmit(struct s
        void __iomem *ioaddr = lp->base;
        unsigned int numPages, poll_count, status;
  
 -      DBG(3, "%s: %s\n", dev->name, __FUNCTION__);
 +      DBG(3, "%s: %s\n", dev->name, __func__);
  
        BUG_ON(lp->pending_tx_skb != NULL);
  
@@@ -734,7 -734,7 +734,7 @@@ static void smc_tx(struct net_device *d
        void __iomem *ioaddr = lp->base;
        unsigned int saved_packet, packet_no, tx_status, pkt_len;
  
 -      DBG(3, "%s: %s\n", dev->name, __FUNCTION__);
 +      DBG(3, "%s: %s\n", dev->name, __func__);
  
        /* If the TX FIFO is empty then nothing to do */
        packet_no = SMC_GET_TXFIFO(lp);
@@@ -856,7 -856,7 +856,7 @@@ static int smc_phy_read(struct net_devi
        SMC_SET_MII(lp, SMC_GET_MII(lp) & ~(MII_MCLK|MII_MDOE|MII_MDO));
  
        DBG(3, "%s: phyaddr=0x%x, phyreg=0x%x, phydata=0x%x\n",
 -              __FUNCTION__, phyaddr, phyreg, phydata);
 +              __func__, phyaddr, phyreg, phydata);
  
        SMC_SELECT_BANK(lp, 2);
        return phydata;
@@@ -883,7 -883,7 +883,7 @@@ static void smc_phy_write(struct net_de
        SMC_SET_MII(lp, SMC_GET_MII(lp) & ~(MII_MCLK|MII_MDOE|MII_MDO));
  
        DBG(3, "%s: phyaddr=0x%x, phyreg=0x%x, phydata=0x%x\n",
 -              __FUNCTION__, phyaddr, phyreg, phydata);
 +              __func__, phyaddr, phyreg, phydata);
  
        SMC_SELECT_BANK(lp, 2);
  }
@@@ -896,7 -896,7 +896,7 @@@ static void smc_phy_detect(struct net_d
        struct smc_local *lp = netdev_priv(dev);
        int phyaddr;
  
 -      DBG(2, "%s: %s\n", dev->name, __FUNCTION__);
 +      DBG(2, "%s: %s\n", dev->name, __func__);
  
        lp->phy_type = 0;
  
@@@ -935,7 -935,7 +935,7 @@@ static int smc_phy_fixed(struct net_dev
        int phyaddr = lp->mii.phy_id;
        int bmcr, cfg1;
  
 -      DBG(3, "%s: %s\n", dev->name, __FUNCTION__);
 +      DBG(3, "%s: %s\n", dev->name, __func__);
  
        /* Enter Link Disable state */
        cfg1 = smc_phy_read(dev, phyaddr, PHY_CFG1_REG);
@@@ -1168,7 -1168,7 +1168,7 @@@ static void smc_phy_interrupt(struct ne
        int phyaddr = lp->mii.phy_id;
        int phy18;
  
 -      DBG(2, "%s: %s\n", dev->name, __FUNCTION__);
 +      DBG(2, "%s: %s\n", dev->name, __func__);
  
        if (lp->phy_type == 0)
                return;
@@@ -1236,7 -1236,7 +1236,7 @@@ static irqreturn_t smc_interrupt(int ir
        int status, mask, timeout, card_stats;
        int saved_pointer;
  
 -      DBG(3, "%s: %s\n", dev->name, __FUNCTION__);
 +      DBG(3, "%s: %s\n", dev->name, __func__);
  
        spin_lock(&lp->lock);
  
@@@ -1358,7 -1358,7 +1358,7 @@@ static void smc_timeout(struct net_devi
        void __iomem *ioaddr = lp->base;
        int status, mask, eph_st, meminfo, fifo;
  
 -      DBG(2, "%s: %s\n", dev->name, __FUNCTION__);
 +      DBG(2, "%s: %s\n", dev->name, __func__);
  
        spin_lock_irq(&lp->lock);
        status = SMC_GET_INT(lp);
@@@ -1402,7 -1402,7 +1402,7 @@@ static void smc_set_multicast_list(stru
        unsigned char multicast_table[8];
        int update_multicast = 0;
  
 -      DBG(2, "%s: %s\n", dev->name, __FUNCTION__);
 +      DBG(2, "%s: %s\n", dev->name, __func__);
  
        if (dev->flags & IFF_PROMISC) {
                DBG(2, "%s: RCR_PRMS\n", dev->name);
@@@ -1505,7 -1505,7 +1505,7 @@@ smc_open(struct net_device *dev
  {
        struct smc_local *lp = netdev_priv(dev);
  
 -      DBG(2, "%s: %s\n", dev->name, __FUNCTION__);
 +      DBG(2, "%s: %s\n", dev->name, __func__);
  
        /*
         * Check that the address is valid.  If its not, refuse
         * address using ifconfig eth0 hw ether xx:xx:xx:xx:xx:xx
         */
        if (!is_valid_ether_addr(dev->dev_addr)) {
 -              PRINTK("%s: no valid ethernet hw addr\n", __FUNCTION__);
 +              PRINTK("%s: no valid ethernet hw addr\n", __func__);
                return -EINVAL;
        }
  
        /* Setup the default Register Modes */
        lp->tcr_cur_mode = TCR_DEFAULT;
        lp->rcr_cur_mode = RCR_DEFAULT;
-       lp->rpc_cur_mode = RPC_DEFAULT;
+       lp->rpc_cur_mode = RPC_DEFAULT |
+                               lp->cfg.leda << RPC_LSXA_SHFT |
+                               lp->cfg.ledb << RPC_LSXB_SHFT;
  
        /*
         * If we are not using a MII interface, we need to
@@@ -1557,7 -1559,7 +1559,7 @@@ static int smc_close(struct net_device 
  {
        struct smc_local *lp = netdev_priv(dev);
  
 -      DBG(2, "%s: %s\n", dev->name, __FUNCTION__);
 +      DBG(2, "%s: %s\n", dev->name, __func__);
  
        netif_stop_queue(dev);
        netif_carrier_off(dev);
@@@ -1700,7 -1702,7 +1702,7 @@@ static int __init smc_findirq(struct sm
        int timeout = 20;
        unsigned long cookie;
  
 -      DBG(2, "%s: %s\n", CARDNAME, __FUNCTION__);
 +      DBG(2, "%s: %s\n", CARDNAME, __func__);
  
        cookie = probe_irq_on();
  
@@@ -1778,7 -1780,7 +1780,7 @@@ static int __init smc_probe(struct net_
        const char *version_string;
        DECLARE_MAC_BUF(mac);
  
 -      DBG(2, "%s: %s\n", CARDNAME, __FUNCTION__);
 +      DBG(2, "%s: %s\n", CARDNAME, __func__);
  
        /* First, see if the high byte is 0x33 */
        val = SMC_CURRENT_BANK(lp);
                if (dev->dma != (unsigned char)-1)
                        printk(" DMA %d", dev->dma);
  
 -              printk("%s%s\n", nowait ? " [nowait]" : "",
 +              printk("%s%s\n",
 +                      lp->cfg.flags & SMC91X_NOWAIT ? " [nowait]" : "",
                        THROTTLE_TX_PKTS ? " [throttle_tx]" : "");
  
                if (!is_valid_ether_addr(dev->dev_addr)) {
@@@ -2158,6 -2159,11 +2160,11 @@@ static int smc_drv_probe(struct platfor
                lp->cfg.flags |= (nowait) ? SMC91X_NOWAIT : 0;
        }
  
+       if (!lp->cfg.leda && !lp->cfg.ledb) {
+               lp->cfg.leda = RPC_LSA_DEFAULT;
+               lp->cfg.ledb = RPC_LSB_DEFAULT;
+       }
        ndev->dma = (unsigned char)-1;
  
        res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "smc91x-regs");
diff --combined drivers/net/smc91x.h
index edea0732f1454dc0b5ee30a7e02256400dcc70c2,160873f0a817e9f81e0dce331c2c29a556a10daa..a07cc9351c6bfd7568fe3502f5242cb3034e9b19
@@@ -43,7 -43,8 +43,8 @@@
  #if defined(CONFIG_ARCH_LUBBOCK) ||\
      defined(CONFIG_MACH_MAINSTONE) ||\
      defined(CONFIG_MACH_ZYLONITE) ||\
-     defined(CONFIG_MACH_LITTLETON)
+     defined(CONFIG_MACH_LITTLETON) ||\
+     defined(CONFIG_ARCH_VIPER)
  
  #include <asm/mach-types.h>
  
@@@ -446,8 -447,6 +447,8 @@@ static inline void LPD7_SMC_outsw (unsi
  #define SMC_CAN_USE_32BIT     1
  #define SMC_NOWAIT            1
  
 +#define SMC_IO_SHIFT          (lp->io_shift)
 +
  #define SMC_inb(a, r)         readb((a) + (r))
  #define SMC_inw(a, r)         readw((a) + (r))
  #define SMC_inl(a, r)         readl((a) + (r))
@@@ -780,14 -779,6 +781,6 @@@ smc_pxa_dma_irq(int dma, void *dummy
  #define RPC_ANEG      0x0800  // When 1 PHY is in Auto-Negotiate Mode
  #define RPC_LSXA_SHFT 5       // Bits to shift LS2A,LS1A,LS0A to lsb
  #define RPC_LSXB_SHFT 2       // Bits to get LS2B,LS1B,LS0B to lsb
- #define RPC_LED_100_10        (0x00)  // LED = 100Mbps OR's with 10Mbps link detect
- #define RPC_LED_RES   (0x01)  // LED = Reserved
- #define RPC_LED_10    (0x02)  // LED = 10Mbps link detect
- #define RPC_LED_FD    (0x03)  // LED = Full Duplex Mode
- #define RPC_LED_TX_RX (0x04)  // LED = TX or RX packet occurred
- #define RPC_LED_100   (0x05)  // LED = 100Mbps link dectect
- #define RPC_LED_TX    (0x06)  // LED = TX packet occurred
- #define RPC_LED_RX    (0x07)  // LED = RX packet occurred
  
  #ifndef RPC_LSA_DEFAULT
  #define RPC_LSA_DEFAULT       RPC_LED_100
  #define RPC_LSB_DEFAULT RPC_LED_FD
  #endif
  
- #define RPC_DEFAULT (RPC_ANEG | (RPC_LSA_DEFAULT << RPC_LSXA_SHFT) | (RPC_LSB_DEFAULT << RPC_LSXB_SHFT) | RPC_SPEED | RPC_DPLX)
+ #define RPC_DEFAULT (RPC_ANEG | RPC_SPEED | RPC_DPLX)
  
  
  /* Bank 0 0x0C is reserved */
diff --combined sound/arm/pxa2xx-ac97.c
index cba71d867542ef43d4c43c27db3dd44f17b95a61,714b3baa4be776ddcec323e4871cdbec0c6be44a..c2635beb4c8897e01d5aa9f2a3213f58717cbfc4
  
  #include <linux/init.h>
  #include <linux/module.h>
 -#include <linux/kernel.h>
  #include <linux/platform_device.h>
 -#include <linux/interrupt.h>
 -#include <linux/wait.h>
 -#include <linux/clk.h>
 -#include <linux/delay.h>
  
  #include <sound/core.h>
  #include <sound/pcm.h>
  #include <sound/ac97_codec.h>
  #include <sound/initval.h>
 +#include <sound/pxa2xx-lib.h>
  
 -#include <asm/irq.h>
 -#include <linux/mutex.h>
  #include <mach/hardware.h>
  #include <mach/pxa-regs.h>
 -#include <mach/pxa2xx-gpio.h>
  #include <mach/audio.h>
  
  #include "pxa2xx-pcm.h"
  
 -
 -static DEFINE_MUTEX(car_mutex);
 -static DECLARE_WAIT_QUEUE_HEAD(gsr_wq);
 -static volatile long gsr_bits;
 -static struct clk *ac97_clk;
 -#ifdef CONFIG_PXA27x
 -static struct clk *ac97conf_clk;
 -#endif
 -
 -/*
 - * Beware PXA27x bugs:
 - *
 - *   o Slot 12 read from modem space will hang controller.
 - *   o CDONE, SDONE interrupt fails after any slot 12 IO.
 - *
 - * We therefore have an hybrid approach for waiting on SDONE (interrupt or
 - * 1 jiffy timeout if interrupt never comes).
 - */ 
 -
 -static unsigned short pxa2xx_ac97_read(struct snd_ac97 *ac97, unsigned short reg)
 -{
 -      unsigned short val = -1;
 -      volatile u32 *reg_addr;
 -
 -      mutex_lock(&car_mutex);
 -
 -      /* set up primary or secondary codec space */
 -      reg_addr = (ac97->num & 1) ? &SAC_REG_BASE : &PAC_REG_BASE;
 -      reg_addr += (reg >> 1);
 -
 -      /* start read access across the ac97 link */
 -      GSR = GSR_CDONE | GSR_SDONE;
 -      gsr_bits = 0;
 -      val = *reg_addr;
 -      if (reg == AC97_GPIO_STATUS)
 -              goto out;
 -      if (wait_event_timeout(gsr_wq, (GSR | gsr_bits) & GSR_SDONE, 1) <= 0 &&
 -          !((GSR | gsr_bits) & GSR_SDONE)) {
 -              printk(KERN_ERR "%s: read error (ac97_reg=%d GSR=%#lx)\n",
 -                              __func__, reg, GSR | gsr_bits);
 -              val = -1;
 -              goto out;
 -      }
 -
 -      /* valid data now */
 -      GSR = GSR_CDONE | GSR_SDONE;
 -      gsr_bits = 0;
 -      val = *reg_addr;                        
 -      /* but we've just started another cycle... */
 -      wait_event_timeout(gsr_wq, (GSR | gsr_bits) & GSR_SDONE, 1);
 -
 -out:  mutex_unlock(&car_mutex);
 -      return val;
 -}
 -
 -static void pxa2xx_ac97_write(struct snd_ac97 *ac97, unsigned short reg, unsigned short val)
 -{
 -      volatile u32 *reg_addr;
 -
 -      mutex_lock(&car_mutex);
 -
 -      /* set up primary or secondary codec space */
 -      reg_addr = (ac97->num & 1) ? &SAC_REG_BASE : &PAC_REG_BASE;
 -      reg_addr += (reg >> 1);
 -
 -      GSR = GSR_CDONE | GSR_SDONE;
 -      gsr_bits = 0;
 -      *reg_addr = val;
 -      if (wait_event_timeout(gsr_wq, (GSR | gsr_bits) & GSR_CDONE, 1) <= 0 &&
 -          !((GSR | gsr_bits) & GSR_CDONE))
 -              printk(KERN_ERR "%s: write error (ac97_reg=%d GSR=%#lx)\n",
 -                              __func__, reg, GSR | gsr_bits);
 -
 -      mutex_unlock(&car_mutex);
 -}
 -
  static void pxa2xx_ac97_reset(struct snd_ac97 *ac97)
  {
 -      /* First, try cold reset */
 -#ifdef CONFIG_PXA3xx
 -      int timeout;
 -
 -      /* Hold CLKBPB for 100us */
 -      GCR = 0;
 -      GCR = GCR_CLKBPB;
 -      udelay(100);
 -      GCR = 0;
 -#endif
 -
 -      GCR &=  GCR_COLD_RST;  /* clear everything but nCRST */
 -      GCR &= ~GCR_COLD_RST;  /* then assert nCRST */
 -
 -      gsr_bits = 0;
 -#ifdef CONFIG_PXA27x
 -      /* PXA27x Developers Manual section 13.5.2.2.1 */
 -      clk_enable(ac97conf_clk);
 -      udelay(5);
 -      clk_disable(ac97conf_clk);
 -      GCR = GCR_COLD_RST;
 -      udelay(50);
 -#elif defined(CONFIG_PXA3xx)
 -      timeout = 1000;
 -      /* Can't use interrupts on PXA3xx */
 -      GCR &= ~(GCR_PRIRDY_IEN|GCR_SECRDY_IEN);
 -
 -      GCR = GCR_WARM_RST | GCR_COLD_RST;
 -      while (!(GSR & (GSR_PCR | GSR_SCR)) && timeout--)
 -              mdelay(10);
 -#else
 -      GCR = GCR_COLD_RST;
 -      GCR |= GCR_CDONE_IE|GCR_SDONE_IE;
 -      wait_event_timeout(gsr_wq, gsr_bits & (GSR_PCR | GSR_SCR), 1);
 -#endif
 -
 -      if (!((GSR | gsr_bits) & (GSR_PCR | GSR_SCR))) {
 -              printk(KERN_INFO "%s: cold reset timeout (GSR=%#lx)\n",
 -                               __func__, gsr_bits);
 -
 -              /* let's try warm reset */
 -              gsr_bits = 0;
 -#ifdef CONFIG_PXA27x
 -              /* warm reset broken on Bulverde,
 -                 so manually keep AC97 reset high */
 -              pxa_gpio_mode(113 | GPIO_OUT | GPIO_DFLT_HIGH); 
 -              udelay(10);
 -              GCR |= GCR_WARM_RST;
 -              pxa_gpio_mode(113 | GPIO_ALT_FN_2_OUT);
 -              udelay(500);
 -#elif defined(CONFIG_PXA3xx)
 -              timeout = 100;
 -              /* Can't use interrupts */
 -              GCR |= GCR_WARM_RST;
 -              while (!((GSR | gsr_bits) & (GSR_PCR | GSR_SCR)) && timeout--)
 -                      mdelay(1);
 -#else
 -              GCR |= GCR_WARM_RST|GCR_PRIRDY_IEN|GCR_SECRDY_IEN;
 -              wait_event_timeout(gsr_wq, gsr_bits & (GSR_PCR | GSR_SCR), 1);
 -#endif                        
 -
 -              if (!((GSR | gsr_bits) & (GSR_PCR | GSR_SCR)))
 -                      printk(KERN_INFO "%s: warm reset timeout (GSR=%#lx)\n",
 -                                       __func__, gsr_bits);
 -      }
 -
 -      GCR &= ~(GCR_PRIRDY_IEN|GCR_SECRDY_IEN);
 -      GCR |= GCR_SDONE_IE|GCR_CDONE_IE;
 -}
 -
 -static irqreturn_t pxa2xx_ac97_irq(int irq, void *dev_id)
 -{
 -      long status;
 -
 -      status = GSR;
 -      if (status) {
 -              GSR = status;
 -              gsr_bits |= status;
 -              wake_up(&gsr_wq);
 -
 -#ifdef CONFIG_PXA27x
 -              /* Although we don't use those we still need to clear them
 -                 since they tend to spuriously trigger when MMC is used
 -                 (hardware bug? go figure)... */
 -              MISR = MISR_EOC;
 -              PISR = PISR_EOC;
 -              MCSR = MCSR_EOC;
 -#endif
 -
 -              return IRQ_HANDLED;
 +      if (!pxa2xx_ac97_try_cold_reset(ac97)) {
 +              pxa2xx_ac97_try_warm_reset(ac97);
        }
  
 -      return IRQ_NONE;
 +      pxa2xx_ac97_finish_reset(ac97);
  }
  
  static struct snd_ac97_bus_ops pxa2xx_ac97_ops = {
  static struct pxa2xx_pcm_dma_params pxa2xx_ac97_pcm_out = {
        .name                   = "AC97 PCM out",
        .dev_addr               = __PREG(PCDR),
-       .drcmr                  = &DRCMRTXPCDR,
+       .drcmr                  = &DRCMR(12),
        .dcmd                   = DCMD_INCSRCADDR | DCMD_FLOWTRG |
                                  DCMD_BURST32 | DCMD_WIDTH4,
  };
  static struct pxa2xx_pcm_dma_params pxa2xx_ac97_pcm_in = {
        .name                   = "AC97 PCM in",
        .dev_addr               = __PREG(PCDR),
-       .drcmr                  = &DRCMRRXPCDR,
+       .drcmr                  = &DRCMR(11),
        .dcmd                   = DCMD_INCTRGADDR | DCMD_FLOWSRC |
                                  DCMD_BURST32 | DCMD_WIDTH4,
  };
@@@ -117,19 -288,17 +117,19 @@@ static int pxa2xx_ac97_do_suspend(struc
        snd_ac97_suspend(pxa2xx_ac97_ac97);
        if (platform_ops && platform_ops->suspend)
                platform_ops->suspend(platform_ops->priv);
 -      GCR |= GCR_ACLINK_OFF;
 -      clk_disable(ac97_clk);
  
 -      return 0;
 +      return pxa2xx_ac97_hw_suspend();
  }
  
  static int pxa2xx_ac97_do_resume(struct snd_card *card)
  {
        pxa2xx_audio_ops_t *platform_ops = card->dev->platform_data;
 +      int rc;
 +
 +      rc = pxa2xx_ac97_hw_resume();
 +      if (rc)
 +              return rc;
  
 -      clk_enable(ac97_clk);
        if (platform_ops && platform_ops->resume)
                platform_ops->resume(platform_ops->priv);
        snd_ac97_resume(pxa2xx_ac97_ac97);
@@@ -185,17 -354,40 +185,17 @@@ static int __devinit pxa2xx_ac97_probe(
        if (ret)
                goto err;
  
 -      ret = request_irq(IRQ_AC97, pxa2xx_ac97_irq, 0, "AC97", NULL);
 -      if (ret < 0)
 -              goto err;
 -
 -      pxa_gpio_mode(GPIO31_SYNC_AC97_MD);
 -      pxa_gpio_mode(GPIO30_SDATA_OUT_AC97_MD);
 -      pxa_gpio_mode(GPIO28_BITCLK_AC97_MD);
 -      pxa_gpio_mode(GPIO29_SDATA_IN_AC97_MD);
 -#ifdef CONFIG_PXA27x
 -      /* Use GPIO 113 as AC97 Reset on Bulverde */
 -      pxa_gpio_mode(113 | GPIO_ALT_FN_2_OUT);
 -      ac97conf_clk = clk_get(&dev->dev, "AC97CONFCLK");
 -      if (IS_ERR(ac97conf_clk)) {
 -              ret = PTR_ERR(ac97conf_clk);
 -              ac97conf_clk = NULL;
 -              goto err;
 -      }
 -#endif
 -
 -      ac97_clk = clk_get(&dev->dev, "AC97CLK");
 -      if (IS_ERR(ac97_clk)) {
 -              ret = PTR_ERR(ac97_clk);
 -              ac97_clk = NULL;
 +      ret = pxa2xx_ac97_hw_probe(dev);
 +      if (ret)
                goto err;
 -      }
 -      clk_enable(ac97_clk);
  
        ret = snd_ac97_bus(card, 0, &pxa2xx_ac97_ops, NULL, &ac97_bus);
        if (ret)
 -              goto err;
 +              goto err_remove;
        memset(&ac97_template, 0, sizeof(ac97_template));
        ret = snd_ac97_mixer(ac97_bus, &ac97_template, &pxa2xx_ac97_ac97);
        if (ret)
 -              goto err;
 +              goto err_remove;
  
        snprintf(card->shortname, sizeof(card->shortname),
                 "%s", snd_ac97_get_short_name(pxa2xx_ac97_ac97));
                return 0;
        }
  
 - err:
 +err_remove:
 +      pxa2xx_ac97_hw_remove(dev);
 +err:
        if (card)
                snd_card_free(card);
 -      if (ac97_clk) {
 -              GCR |= GCR_ACLINK_OFF;
 -              free_irq(IRQ_AC97, NULL);
 -              clk_disable(ac97_clk);
 -              clk_put(ac97_clk);
 -              ac97_clk = NULL;
 -      }
 -#ifdef CONFIG_PXA27x
 -      if (ac97conf_clk) {
 -              clk_put(ac97conf_clk);
 -              ac97conf_clk = NULL;
 -      }
 -#endif
        return ret;
  }
  
@@@ -224,7 -427,15 +224,7 @@@ static int __devexit pxa2xx_ac97_remove
        if (card) {
                snd_card_free(card);
                platform_set_drvdata(dev, NULL);
 -              GCR |= GCR_ACLINK_OFF;
 -              free_irq(IRQ_AC97, NULL);
 -              clk_disable(ac97_clk);
 -              clk_put(ac97_clk);
 -              ac97_clk = NULL;
 -#ifdef CONFIG_PXA27x
 -              clk_put(ac97conf_clk);
 -              ac97conf_clk = NULL;
 -#endif
 +              pxa2xx_ac97_hw_remove(dev);
        }
  
        return 0;
diff --combined sound/soc/pxa/corgi.c
index 72b7a5140bf832d97667dd01bfbf4c936d9fc0fd,fa69faa886efaeb8409f0d6940cd0d702fe03b1e..1a8373de7f3a3badc8a58b5f3559186cff21c584
  #include <linux/timer.h>
  #include <linux/interrupt.h>
  #include <linux/platform_device.h>
+ #include <linux/gpio.h>
  #include <sound/core.h>
  #include <sound/pcm.h>
  #include <sound/soc.h>
  #include <sound/soc-dapm.h>
  
  #include <asm/mach-types.h>
- #include <asm/hardware/scoop.h>
  #include <mach/pxa-regs.h>
  #include <mach/hardware.h>
  #include <mach/corgi.h>
@@@ -54,8 -54,8 +54,8 @@@ static void corgi_ext_control(struct sn
        switch (corgi_jack_func) {
        case CORGI_HP:
                /* set = unmute headphone */
-               set_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MUTE_L);
-               set_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MUTE_R);
+               gpio_set_value(CORGI_GPIO_MUTE_L, 1);
+               gpio_set_value(CORGI_GPIO_MUTE_R, 1);
                snd_soc_dapm_disable_pin(codec, "Mic Jack");
                snd_soc_dapm_disable_pin(codec, "Line Jack");
                snd_soc_dapm_enable_pin(codec, "Headphone Jack");
                break;
        case CORGI_MIC:
                /* reset = mute headphone */
-               reset_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MUTE_L);
-               reset_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MUTE_R);
+               gpio_set_value(CORGI_GPIO_MUTE_L, 0);
+               gpio_set_value(CORGI_GPIO_MUTE_R, 0);
                snd_soc_dapm_enable_pin(codec, "Mic Jack");
                snd_soc_dapm_disable_pin(codec, "Line Jack");
                snd_soc_dapm_disable_pin(codec, "Headphone Jack");
                snd_soc_dapm_disable_pin(codec, "Headset Jack");
                break;
        case CORGI_LINE:
-               reset_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MUTE_L);
-               reset_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MUTE_R);
+               gpio_set_value(CORGI_GPIO_MUTE_L, 0);
+               gpio_set_value(CORGI_GPIO_MUTE_R, 0);
                snd_soc_dapm_disable_pin(codec, "Mic Jack");
                snd_soc_dapm_enable_pin(codec, "Line Jack");
                snd_soc_dapm_disable_pin(codec, "Headphone Jack");
                snd_soc_dapm_disable_pin(codec, "Headset Jack");
                break;
        case CORGI_HEADSET:
-               reset_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MUTE_L);
-               set_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MUTE_R);
+               gpio_set_value(CORGI_GPIO_MUTE_L, 0);
+               gpio_set_value(CORGI_GPIO_MUTE_R, 1);
                snd_soc_dapm_enable_pin(codec, "Mic Jack");
                snd_soc_dapm_disable_pin(codec, "Line Jack");
                snd_soc_dapm_disable_pin(codec, "Headphone Jack");
@@@ -114,8 -114,8 +114,8 @@@ static int corgi_shutdown(struct snd_pc
        struct snd_soc_codec *codec = rtd->socdev->codec;
  
        /* set = unmute headphone */
-       set_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MUTE_L);
-       set_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MUTE_R);
+       gpio_set_value(CORGI_GPIO_MUTE_L, 1);
+       gpio_set_value(CORGI_GPIO_MUTE_R, 1);
        return 0;
  }
  
@@@ -218,22 -218,14 +218,14 @@@ static int corgi_set_spk(struct snd_kco
  static int corgi_amp_event(struct snd_soc_dapm_widget *w,
        struct snd_kcontrol *k, int event)
  {
-       if (SND_SOC_DAPM_EVENT_ON(event))
-               set_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_APM_ON);
-       else
-               reset_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_APM_ON);
+       gpio_set_value(CORGI_GPIO_APM_ON, SND_SOC_DAPM_EVENT_ON(event));
        return 0;
  }
  
  static int corgi_mic_event(struct snd_soc_dapm_widget *w,
        struct snd_kcontrol *k, int event)
  {
-       if (SND_SOC_DAPM_EVENT_ON(event))
-               set_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MIC_BIAS);
-       else
-               reset_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MIC_BIAS);
+       gpio_set_value(CORGI_GPIO_MIC_BIAS, SND_SOC_DAPM_EVENT_ON(event));
        return 0;
  }
  
@@@ -330,7 -322,6 +322,7 @@@ static struct snd_soc_machine snd_soc_m
  
  /* corgi audio private data */
  static struct wm8731_setup_data corgi_wm8731_setup = {
 +      .i2c_bus = 0,
        .i2c_address = 0x1b,
  };
  
index a80ae074b0906b9664f5198caf776f209aed3c04,ac8f227bab0be806307b6cc0cbcaa22af6647f2b..a7a3a9c5c6ff41c6eee5ce690106de63823eb458
  #include <linux/init.h>
  #include <linux/module.h>
  #include <linux/platform_device.h>
 -#include <linux/interrupt.h>
 -#include <linux/wait.h>
 -#include <linux/clk.h>
 -#include <linux/delay.h>
  
  #include <sound/core.h>
 -#include <sound/pcm.h>
  #include <sound/ac97_codec.h>
 -#include <sound/initval.h>
  #include <sound/soc.h>
 +#include <sound/pxa2xx-lib.h>
  
 -#include <asm/irq.h>
 -#include <linux/mutex.h>
  #include <mach/hardware.h>
  #include <mach/pxa-regs.h>
 -#include <mach/pxa2xx-gpio.h>
 -#include <mach/audio.h>
  
  #include "pxa2xx-pcm.h"
  #include "pxa2xx-ac97.h"
  
 -static DEFINE_MUTEX(car_mutex);
 -static DECLARE_WAIT_QUEUE_HEAD(gsr_wq);
 -static volatile long gsr_bits;
 -static struct clk *ac97_clk;
 -#ifdef CONFIG_PXA27x
 -static struct clk *ac97conf_clk;
 -#endif
 -
 -/*
 - * Beware PXA27x bugs:
 - *
 - *   o Slot 12 read from modem space will hang controller.
 - *   o CDONE, SDONE interrupt fails after any slot 12 IO.
 - *
 - * We therefore have an hybrid approach for waiting on SDONE (interrupt or
 - * 1 jiffy timeout if interrupt never comes).
 - */
 -
 -static unsigned short pxa2xx_ac97_read(struct snd_ac97 *ac97,
 -      unsigned short reg)
 -{
 -      unsigned short val = -1;
 -      volatile u32 *reg_addr;
 -
 -      mutex_lock(&car_mutex);
 -
 -      /* set up primary or secondary codec/modem space */
 -#if defined(CONFIG_PXA27x) || defined(CONFIG_PXA3xx)
 -      reg_addr = ac97->num ? &SAC_REG_BASE : &PAC_REG_BASE;
 -#else
 -      if (reg == AC97_GPIO_STATUS)
 -              reg_addr = ac97->num ? &SMC_REG_BASE : &PMC_REG_BASE;
 -      else
 -              reg_addr = ac97->num ? &SAC_REG_BASE : &PAC_REG_BASE;
 -#endif
 -      reg_addr += (reg >> 1);
 -
 -#ifndef CONFIG_PXA27x
 -      if (reg == AC97_GPIO_STATUS) {
 -              /* read from controller cache */
 -              val = *reg_addr;
 -              goto out;
 -      }
 -#endif
 -
 -      /* start read access across the ac97 link */
 -      GSR = GSR_CDONE | GSR_SDONE;
 -      gsr_bits = 0;
 -      val = *reg_addr;
 -
 -      wait_event_timeout(gsr_wq, (GSR | gsr_bits) & GSR_SDONE, 1);
 -      if (!((GSR | gsr_bits) & GSR_SDONE)) {
 -              printk(KERN_ERR "%s: read error (ac97_reg=%x GSR=%#lx)\n",
 -                              __func__, reg, GSR | gsr_bits);
 -              val = -1;
 -              goto out;
 -      }
 -
 -      /* valid data now */
 -      GSR = GSR_CDONE | GSR_SDONE;
 -      gsr_bits = 0;
 -      val = *reg_addr;
 -      /* but we've just started another cycle... */
 -      wait_event_timeout(gsr_wq, (GSR | gsr_bits) & GSR_SDONE, 1);
 -
 -out:  mutex_unlock(&car_mutex);
 -      return val;
 -}
 -
 -static void pxa2xx_ac97_write(struct snd_ac97 *ac97, unsigned short reg,
 -      unsigned short val)
 -{
 -      volatile u32 *reg_addr;
 -
 -      mutex_lock(&car_mutex);
 -
 -      /* set up primary or secondary codec/modem space */
 -#if defined(CONFIG_PXA27x) || defined(CONFIG_PXA3xx)
 -      reg_addr = ac97->num ? &SAC_REG_BASE : &PAC_REG_BASE;
 -#else
 -      if (reg == AC97_GPIO_STATUS)
 -              reg_addr = ac97->num ? &SMC_REG_BASE : &PMC_REG_BASE;
 -      else
 -              reg_addr = ac97->num ? &SAC_REG_BASE : &PAC_REG_BASE;
 -#endif
 -      reg_addr += (reg >> 1);
 -
 -      GSR = GSR_CDONE | GSR_SDONE;
 -      gsr_bits = 0;
 -      *reg_addr = val;
 -      wait_event_timeout(gsr_wq, (GSR | gsr_bits) & GSR_CDONE, 1);
 -      if (!((GSR | gsr_bits) & GSR_CDONE))
 -              printk(KERN_ERR "%s: write error (ac97_reg=%x GSR=%#lx)\n",
 -                              __func__, reg, GSR | gsr_bits);
 -
 -      mutex_unlock(&car_mutex);
 -}
 -
  static void pxa2xx_ac97_warm_reset(struct snd_ac97 *ac97)
  {
 -#ifdef CONFIG_PXA3xx
 -      int timeout = 100;
 -#endif
 -      gsr_bits = 0;
 -
 -#ifdef CONFIG_PXA27x
 -      /* warm reset broken on Bulverde,
 -         so manually keep AC97 reset high */
 -      pxa_gpio_mode(113 | GPIO_OUT | GPIO_DFLT_HIGH);
 -      udelay(10);
 -      GCR |= GCR_WARM_RST;
 -      pxa_gpio_mode(113 | GPIO_ALT_FN_2_OUT);
 -      udelay(500);
 -#elif defined(CONFIG_PXA3xx)
 -      /* Can't use interrupts */
 -      GCR |= GCR_WARM_RST;
 -      while (!((GSR | gsr_bits) & (GSR_PCR | GSR_SCR)) && timeout--)
 -              mdelay(1);
 -#else
 -      GCR |= GCR_WARM_RST | GCR_PRIRDY_IEN | GCR_SECRDY_IEN;
 -      wait_event_timeout(gsr_wq, gsr_bits & (GSR_PCR | GSR_SCR), 1);
 -#endif
 +      pxa2xx_ac97_try_warm_reset(ac97);
  
 -      if (!((GSR | gsr_bits) & (GSR_PCR | GSR_SCR)))
 -              printk(KERN_INFO "%s: warm reset timeout (GSR=%#lx)\n",
 -                               __func__, gsr_bits);
 -
 -      GCR &= ~(GCR_PRIRDY_IEN|GCR_SECRDY_IEN);
 -      GCR |= GCR_SDONE_IE|GCR_CDONE_IE;
 +      pxa2xx_ac97_finish_reset(ac97);
  }
  
  static void pxa2xx_ac97_cold_reset(struct snd_ac97 *ac97)
  {
 -#ifdef CONFIG_PXA3xx
 -      int timeout = 1000;
 -
 -      /* Hold CLKBPB for 100us */
 -      GCR = 0;
 -      GCR = GCR_CLKBPB;
 -      udelay(100);
 -      GCR = 0;
 -#endif
 -
 -      GCR &=  GCR_COLD_RST;  /* clear everything but nCRST */
 -      GCR &= ~GCR_COLD_RST;  /* then assert nCRST */
 +      pxa2xx_ac97_try_cold_reset(ac97);
  
 -      gsr_bits = 0;
 -#ifdef CONFIG_PXA27x
 -      /* PXA27x Developers Manual section 13.5.2.2.1 */
 -      clk_enable(ac97conf_clk);
 -      udelay(5);
 -      clk_disable(ac97conf_clk);
 -      GCR = GCR_COLD_RST;
 -      udelay(50);
 -#elif defined(CONFIG_PXA3xx)
 -      /* Can't use interrupts on PXA3xx */
 -      GCR &= ~(GCR_PRIRDY_IEN|GCR_SECRDY_IEN);
 -
 -      GCR = GCR_WARM_RST | GCR_COLD_RST;
 -      while (!(GSR & (GSR_PCR | GSR_SCR)) && timeout--)
 -              mdelay(10);
 -#else
 -      GCR = GCR_COLD_RST;
 -      GCR |= GCR_CDONE_IE|GCR_SDONE_IE;
 -      wait_event_timeout(gsr_wq, gsr_bits & (GSR_PCR | GSR_SCR), 1);
 -#endif
 -
 -      if (!((GSR | gsr_bits) & (GSR_PCR | GSR_SCR)))
 -              printk(KERN_INFO "%s: cold reset timeout (GSR=%#lx)\n",
 -                               __func__, gsr_bits);
 -
 -      GCR &= ~(GCR_PRIRDY_IEN|GCR_SECRDY_IEN);
 -      GCR |= GCR_SDONE_IE|GCR_CDONE_IE;
 -}
 -
 -static irqreturn_t pxa2xx_ac97_irq(int irq, void *dev_id)
 -{
 -      long status;
 -
 -      status = GSR;
 -      if (status) {
 -              GSR = status;
 -              gsr_bits |= status;
 -              wake_up(&gsr_wq);
 -
 -#ifdef CONFIG_PXA27x
 -              /* Although we don't use those we still need to clear them
 -                 since they tend to spuriously trigger when MMC is used
 -                 (hardware bug? go figure)... */
 -              MISR = MISR_EOC;
 -              PISR = PISR_EOC;
 -              MCSR = MCSR_EOC;
 -#endif
 -
 -              return IRQ_HANDLED;
 -      }
 -
 -      return IRQ_NONE;
 +      pxa2xx_ac97_finish_reset(ac97);
  }
  
  struct snd_ac97_bus_ops soc_ac97_ops = {
  static struct pxa2xx_pcm_dma_params pxa2xx_ac97_pcm_stereo_out = {
        .name                   = "AC97 PCM Stereo out",
        .dev_addr               = __PREG(PCDR),
-       .drcmr                  = &DRCMRTXPCDR,
+       .drcmr                  = &DRCMR(12),
        .dcmd                   = DCMD_INCSRCADDR | DCMD_FLOWTRG |
                                  DCMD_BURST32 | DCMD_WIDTH4,
  };
  static struct pxa2xx_pcm_dma_params pxa2xx_ac97_pcm_stereo_in = {
        .name                   = "AC97 PCM Stereo in",
        .dev_addr               = __PREG(PCDR),
-       .drcmr                  = &DRCMRRXPCDR,
+       .drcmr                  = &DRCMR(11),
        .dcmd                   = DCMD_INCTRGADDR | DCMD_FLOWSRC |
                                  DCMD_BURST32 | DCMD_WIDTH4,
  };
  static struct pxa2xx_pcm_dma_params pxa2xx_ac97_pcm_aux_mono_out = {
        .name                   = "AC97 Aux PCM (Slot 5) Mono out",
        .dev_addr               = __PREG(MODR),
-       .drcmr                  = &DRCMRTXMODR,
+       .drcmr                  = &DRCMR(10),
        .dcmd                   = DCMD_INCSRCADDR | DCMD_FLOWTRG |
                                  DCMD_BURST16 | DCMD_WIDTH2,
  };
  static struct pxa2xx_pcm_dma_params pxa2xx_ac97_pcm_aux_mono_in = {
        .name                   = "AC97 Aux PCM (Slot 5) Mono in",
        .dev_addr               = __PREG(MODR),
-       .drcmr                  = &DRCMRRXMODR,
+       .drcmr                  = &DRCMR(9),
        .dcmd                   = DCMD_INCTRGADDR | DCMD_FLOWSRC |
                                  DCMD_BURST16 | DCMD_WIDTH2,
  };
  static struct pxa2xx_pcm_dma_params pxa2xx_ac97_pcm_mic_mono_in = {
        .name                   = "AC97 Mic PCM (Slot 6) Mono in",
        .dev_addr               = __PREG(MCDR),
-       .drcmr                  = &DRCMRRXMCDR,
+       .drcmr                  = &DRCMR(8),
        .dcmd                   = DCMD_INCTRGADDR | DCMD_FLOWSRC |
                                  DCMD_BURST16 | DCMD_WIDTH2,
  };
  static int pxa2xx_ac97_suspend(struct platform_device *pdev,
        struct snd_soc_dai *dai)
  {
 -      GCR |= GCR_ACLINK_OFF;
 -      clk_disable(ac97_clk);
 -      return 0;
 +      return pxa2xx_ac97_hw_suspend();
  }
  
  static int pxa2xx_ac97_resume(struct platform_device *pdev,
        struct snd_soc_dai *dai)
  {
 -      clk_enable(ac97_clk);
 -      return 0;
 +      return pxa2xx_ac97_hw_resume();
  }
  
  #else
  static int pxa2xx_ac97_probe(struct platform_device *pdev,
                             struct snd_soc_dai *dai)
  {
 -      int ret;
 -
 -      ret = request_irq(IRQ_AC97, pxa2xx_ac97_irq, IRQF_DISABLED, "AC97", NULL);
 -      if (ret < 0)
 -              goto err;
 -
 -      pxa_gpio_mode(GPIO31_SYNC_AC97_MD);
 -      pxa_gpio_mode(GPIO30_SDATA_OUT_AC97_MD);
 -      pxa_gpio_mode(GPIO28_BITCLK_AC97_MD);
 -      pxa_gpio_mode(GPIO29_SDATA_IN_AC97_MD);
 -#ifdef CONFIG_PXA27x
 -      /* Use GPIO 113 as AC97 Reset on Bulverde */
 -      pxa_gpio_mode(113 | GPIO_ALT_FN_2_OUT);
 -
 -      ac97conf_clk = clk_get(&pdev->dev, "AC97CONFCLK");
 -      if (IS_ERR(ac97conf_clk)) {
 -              ret = PTR_ERR(ac97conf_clk);
 -              ac97conf_clk = NULL;
 -              goto err_irq;
 -      }
 -#endif
 -      ac97_clk = clk_get(&pdev->dev, "AC97CLK");
 -      if (IS_ERR(ac97_clk)) {
 -              ret = PTR_ERR(ac97_clk);
 -              ac97_clk = NULL;
 -              goto err_irq;
 -      }
 -      clk_enable(ac97_clk);
 -      return 0;
 -
 - err_irq:
 -      GCR |= GCR_ACLINK_OFF;
 -#ifdef CONFIG_PXA27x
 -      if (ac97conf_clk) {
 -              clk_put(ac97conf_clk);
 -              ac97conf_clk = NULL;
 -      }
 -#endif
 -      free_irq(IRQ_AC97, NULL);
 - err:
 -      return ret;
 +      return pxa2xx_ac97_hw_probe(pdev);
  }
  
  static void pxa2xx_ac97_remove(struct platform_device *pdev,
                               struct snd_soc_dai *dai)
  {
 -      GCR |= GCR_ACLINK_OFF;
 -      free_irq(IRQ_AC97, NULL);
 -#ifdef CONFIG_PXA27x
 -      clk_put(ac97conf_clk);
 -      ac97conf_clk = NULL;
 -#endif
 -      clk_disable(ac97_clk);
 -      clk_put(ac97_clk);
 -      ac97_clk = NULL;
 +      pxa2xx_ac97_hw_remove(pdev);
  }
  
  static int pxa2xx_ac97_hw_params(struct snd_pcm_substream *substream,
index 39d19212f6d3c3fb5a3bfe4cb828d5294c25a82a,ad4c31ddb3d400cbdf7b58bcc75cf26ea53d3e6c..2fb58298513b32c88e5cf2f74184db37a883d163
@@@ -21,7 -21,6 +21,7 @@@
  #include <sound/pcm.h>
  #include <sound/initval.h>
  #include <sound/soc.h>
 +#include <sound/pxa2xx-lib.h>
  
  #include <mach/hardware.h>
  #include <mach/pxa-regs.h>
  #include "pxa2xx-pcm.h"
  #include "pxa2xx-i2s.h"
  
 +struct pxa2xx_gpio {
 +      u32 sys;
 +      u32     rx;
 +      u32 tx;
 +      u32 clk;
 +      u32 frm;
 +};
 +
+ /*
+  * I2S Controller Register and Bit Definitions
+  */
+ #define SACR0         __REG(0x40400000)  /* Global Control Register */
+ #define SACR1         __REG(0x40400004)  /* Serial Audio I 2 S/MSB-Justified Control Register */
+ #define SASR0         __REG(0x4040000C)  /* Serial Audio I 2 S/MSB-Justified Interface and FIFO Status Register */
+ #define SAIMR         __REG(0x40400014)  /* Serial Audio Interrupt Mask Register */
+ #define SAICR         __REG(0x40400018)  /* Serial Audio Interrupt Clear Register */
+ #define SADIV         __REG(0x40400060)  /* Audio Clock Divider Register. */
+ #define SADR          __REG(0x40400080)  /* Serial Audio Data Register (TX and RX FIFO access Register). */
+ #define SACR0_RFTH(x) ((x) << 12)     /* Rx FIFO Interrupt or DMA Trigger Threshold */
+ #define SACR0_TFTH(x) ((x) << 8)      /* Tx FIFO Interrupt or DMA Trigger Threshold */
+ #define SACR0_STRF    (1 << 5)        /* FIFO Select for EFWR Special Function */
+ #define SACR0_EFWR    (1 << 4)        /* Enable EFWR Function  */
+ #define SACR0_RST     (1 << 3)        /* FIFO, i2s Register Reset */
+ #define SACR0_BCKD    (1 << 2)        /* Bit Clock Direction */
+ #define SACR0_ENB     (1 << 0)        /* Enable I2S Link */
+ #define SACR1_ENLBF   (1 << 5)        /* Enable Loopback */
+ #define SACR1_DRPL    (1 << 4)        /* Disable Replaying Function */
+ #define SACR1_DREC    (1 << 3)        /* Disable Recording Function */
+ #define SACR1_AMSL    (1 << 0)        /* Specify Alternate Mode */
+ #define SASR0_I2SOFF  (1 << 7)        /* Controller Status */
+ #define SASR0_ROR     (1 << 6)        /* Rx FIFO Overrun */
+ #define SASR0_TUR     (1 << 5)        /* Tx FIFO Underrun */
+ #define SASR0_RFS     (1 << 4)        /* Rx FIFO Service Request */
+ #define SASR0_TFS     (1 << 3)        /* Tx FIFO Service Request */
+ #define SASR0_BSY     (1 << 2)        /* I2S Busy */
+ #define SASR0_RNE     (1 << 1)        /* Rx FIFO Not Empty */
+ #define SASR0_TNF     (1 << 0)        /* Tx FIFO Not Empty */
+ #define SAICR_ROR     (1 << 6)        /* Clear Rx FIFO Overrun Interrupt */
+ #define SAICR_TUR     (1 << 5)        /* Clear Tx FIFO Underrun Interrupt */
+ #define SAIMR_ROR     (1 << 6)        /* Enable Rx FIFO Overrun Condition Interrupt */
+ #define SAIMR_TUR     (1 << 5)        /* Enable Tx FIFO Underrun Condition Interrupt */
+ #define SAIMR_RFS     (1 << 4)        /* Enable Rx FIFO Service Interrupt */
+ #define SAIMR_TFS     (1 << 3)        /* Enable Tx FIFO Service Interrupt */
  
  struct pxa_i2s_port {
        u32 sadiv;
@@@ -54,7 -84,7 +93,7 @@@ static struct clk *clk_i2s
  static struct pxa2xx_pcm_dma_params pxa2xx_i2s_pcm_stereo_out = {
        .name                   = "I2S PCM Stereo out",
        .dev_addr               = __PREG(SADR),
-       .drcmr                  = &DRCMRTXSADR,
+       .drcmr                  = &DRCMR(3),
        .dcmd                   = DCMD_INCSRCADDR | DCMD_FLOWTRG |
                                  DCMD_BURST32 | DCMD_WIDTH4,
  };
  static struct pxa2xx_pcm_dma_params pxa2xx_i2s_pcm_stereo_in = {
        .name                   = "I2S PCM Stereo in",
        .dev_addr               = __PREG(SADR),
-       .drcmr                  = &DRCMRRXSADR,
+       .drcmr                  = &DRCMR(2),
        .dcmd                   = DCMD_INCTRGADDR | DCMD_FLOWSRC |
                                  DCMD_BURST32 | DCMD_WIDTH4,
  };
@@@ -75,6 -105,11 +114,6 @@@ static struct pxa2xx_gpio gpio_bus[] = 
                .frm = GPIO31_SYNC_I2S_MD,
        },
        { /* I2S SoC Master */
 -#ifdef CONFIG_PXA27x
 -              .sys = GPIO113_I2S_SYSCLK_MD,
 -#else
 -              .sys = GPIO32_SYSCLK_I2S_MD,
 -#endif
                .rx = GPIO29_SDATA_IN_I2S_MD,
                .tx = GPIO30_SDATA_OUT_I2S_MD,
                .clk = GPIO28_BITCLK_OUT_I2S_MD,
@@@ -348,11 -383,6 +387,11 @@@ static struct platform_driver pxa2xx_i2
  
  static int __init pxa2xx_i2s_init(void)
  {
 +      if (cpu_is_pxa27x())
 +              gpio_bus[1].sys = GPIO113_I2S_SYSCLK_MD;
 +      else
 +              gpio_bus[1].sys = GPIO32_SYSCLK_I2S_MD;
 +
        clk_i2s = ERR_PTR(-ENOENT);
        return platform_driver_register(&pxa2xx_i2s_driver);
  }
diff --combined sound/soc/pxa/spitz.c
index 3d4738c06e7eecc239abd796cb325b63766dff71,b89a3edd218360c8dc9a2a9353b12e70feafe07e..9a70b00fc30e6d8100c2698b56adad67f2d08594
  #include <linux/timer.h>
  #include <linux/interrupt.h>
  #include <linux/platform_device.h>
+ #include <linux/gpio.h>
  #include <sound/core.h>
  #include <sound/pcm.h>
  #include <sound/soc.h>
  #include <sound/soc-dapm.h>
  
  #include <asm/mach-types.h>
- #include <asm/hardware/scoop.h>
  #include <mach/pxa-regs.h>
  #include <mach/hardware.h>
- #include <mach/akita.h>
  #include <mach/spitz.h>
  #include "../codecs/wm8750.h"
  #include "pxa2xx-pcm.h"
@@@ -63,8 -62,8 +62,8 @@@ static void spitz_ext_control(struct sn
                snd_soc_dapm_disable_pin(codec, "Mic Jack");
                snd_soc_dapm_disable_pin(codec, "Line Jack");
                snd_soc_dapm_enable_pin(codec, "Headphone Jack");
-               set_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_MUTE_L);
-               set_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_MUTE_R);
+               gpio_set_value(SPITZ_GPIO_MUTE_L, 1);
+               gpio_set_value(SPITZ_GPIO_MUTE_R, 1);
                break;
        case SPITZ_MIC:
                /* enable mic jack and bias, mute hp */
@@@ -72,8 -71,8 +71,8 @@@
                snd_soc_dapm_disable_pin(codec, "Headset Jack");
                snd_soc_dapm_disable_pin(codec, "Line Jack");
                snd_soc_dapm_enable_pin(codec, "Mic Jack");
-               reset_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_MUTE_L);
-               reset_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_MUTE_R);
+               gpio_set_value(SPITZ_GPIO_MUTE_L, 0);
+               gpio_set_value(SPITZ_GPIO_MUTE_R, 0);
                break;
        case SPITZ_LINE:
                /* enable line jack, disable mic bias and mute hp */
@@@ -81,8 -80,8 +80,8 @@@
                snd_soc_dapm_disable_pin(codec, "Headset Jack");
                snd_soc_dapm_disable_pin(codec, "Mic Jack");
                snd_soc_dapm_enable_pin(codec, "Line Jack");
-               reset_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_MUTE_L);
-               reset_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_MUTE_R);
+               gpio_set_value(SPITZ_GPIO_MUTE_L, 0);
+               gpio_set_value(SPITZ_GPIO_MUTE_R, 0);
                break;
        case SPITZ_HEADSET:
                /* enable and unmute headset jack enable mic bias, mute L hp */
@@@ -90,8 -89,8 +89,8 @@@
                snd_soc_dapm_enable_pin(codec, "Mic Jack");
                snd_soc_dapm_disable_pin(codec, "Line Jack");
                snd_soc_dapm_enable_pin(codec, "Headset Jack");
-               reset_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_MUTE_L);
-               set_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_MUTE_R);
+               gpio_set_value(SPITZ_GPIO_MUTE_L, 0);
+               gpio_set_value(SPITZ_GPIO_MUTE_R, 1);
                break;
        case SPITZ_HP_OFF:
  
                snd_soc_dapm_disable_pin(codec, "Headset Jack");
                snd_soc_dapm_disable_pin(codec, "Mic Jack");
                snd_soc_dapm_disable_pin(codec, "Line Jack");
-               reset_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_MUTE_L);
-               reset_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_MUTE_R);
+               gpio_set_value(SPITZ_GPIO_MUTE_L, 0);
+               gpio_set_value(SPITZ_GPIO_MUTE_R, 0);
                break;
        }
        snd_soc_dapm_sync(codec);
@@@ -215,23 -214,14 +214,14 @@@ static int spitz_set_spk(struct snd_kco
  static int spitz_mic_bias(struct snd_soc_dapm_widget *w,
        struct snd_kcontrol *k, int event)
  {
-       if (machine_is_borzoi() || machine_is_spitz()) {
-               if (SND_SOC_DAPM_EVENT_ON(event))
-                       set_scoop_gpio(&spitzscoop2_device.dev,
-                               SPITZ_SCP2_MIC_BIAS);
-               else
-                       reset_scoop_gpio(&spitzscoop2_device.dev,
-                               SPITZ_SCP2_MIC_BIAS);
-       }
+       if (machine_is_borzoi() || machine_is_spitz())
+               gpio_set_value(SPITZ_GPIO_MIC_BIAS,
+                               SND_SOC_DAPM_EVENT_ON(event));
+       if (machine_is_akita())
+               gpio_set_value(AKITA_GPIO_MIC_BIAS,
+                               SND_SOC_DAPM_EVENT_ON(event));
  
-       if (machine_is_akita()) {
-               if (SND_SOC_DAPM_EVENT_ON(event))
-                       akita_set_ioexp(&akitaioexp_device.dev,
-                               AKITA_IOEXP_MIC_BIAS);
-               else
-                       akita_reset_ioexp(&akitaioexp_device.dev,
-                               AKITA_IOEXP_MIC_BIAS);
-       }
        return 0;
  }
  
@@@ -337,7 -327,6 +327,7 @@@ static struct snd_soc_machine snd_soc_m
  
  /* spitz audio private data */
  static struct wm8750_setup_data spitz_wm8750_setup = {
 +      .i2c_bus = 0,
        .i2c_address = 0x1b,
  };