Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 13 Jan 2011 18:32:54 +0000 (10:32 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 13 Jan 2011 18:32:54 +0000 (10:32 -0800)
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6: (348 commits)
  ALSA: hda - Fix NULL-derefence with a single mic in STAC auto-mic detection
  ALSA: hda - Add missing NID 0x19 fixup for Sony VAIO
  ALSA: hda - Fix ALC275 enable hardware EQ for SONY VAIO
  ALSA: oxygen: fix Xonar DG input
  ALSA: hda - Fix EAPD on Lenovo NB ALC269 to low
  ALSA: hda - Fix missing EAPD for Acer 4930G
  ALSA: hda: Disable 4/6 channels on some NVIDIA GPUs.
  ALSA: hda - Add static_hdmi_pcm option to HDMI codec parser
  ALSA: hda - Don't refer ELD when unplugged
  ASoC: tpa6130a2: Fix compiler warning
  ASoC: tlv320dac33: Add DAPM selection for LOM invert
  ASoC: DMIC codec: Adding a generic DMIC codec
  ALSA: snd-usb-us122l: Fix missing NULL checks
  ALSA: snd-usb-us122l: Fix MIDI output
  ASoC: soc-cache: Fix invalid memory access during snd_soc_lzo_cache_sync()
  ASoC: Fix section mismatch in wm8995.c
  ALSA: oxygen: add S/PDIF source selection for Claro cards
  ALSA: oxygen: fix CD/MIDI for X-Meridian (2G)
  ASoC: fix migor audio build
  ALSA: include delay.h for msleep in Xonar DG support
  ...

1  2 
MAINTAINERS
arch/arm/mach-shmobile/board-ap4evb.c
drivers/regulator/wm8994-regulator.c
drivers/video/sh_mobile_hdmi.c
sound/core/pcm_native.c
sound/soc/codecs/max98088.c
sound/soc/samsung/smdk_spdif.c

diff --combined MAINTAINERS
@@@ -166,8 -166,9 +166,8 @@@ F: drivers/serial/8250
  F:    include/linux/serial_8250.h
  
  8390 NETWORK DRIVERS [WD80x3/SMC-ELITE, SMC-ULTRA, NE2000, 3C503, etc.]
 -M:    Paul Gortmaker <p_gortmaker@yahoo.com>
  L:    netdev@vger.kernel.org
 -S:    Maintained
 +S:    Orphan / Obsolete
  F:    drivers/net/*8390*
  F:    drivers/net/ax88796.c
  
@@@ -285,41 -286,6 +285,41 @@@ L:       linux-parisc@vger.kernel.or
  S:    Maintained
  F:    sound/pci/ad1889.*
  
 +AD525X ANALOG DEVICES DIGITAL POTENTIOMETERS DRIVER
 +M:    Michael Hennerich <michael.hennerich@analog.com>
 +L:    device-driver-devel@blackfin.uclinux.org
 +W:    http://wiki-analog.com/AD5254
 +S:    Supported
 +F:    drivers/misc/ad525x_dpot.c
 +
 +AD5398 CURRENT REGULATOR DRIVER (AD5398/AD5821)
 +M:    Michael Hennerich <michael.hennerich@analog.com>
 +L:    device-driver-devel@blackfin.uclinux.org
 +W:    http://wiki-analog.com/AD5398
 +S:    Supported
 +F:    drivers/regulator/ad5398.c
 +
 +AD714X CAPACITANCE TOUCH SENSOR DRIVER (AD7142/3/7/8/7A)
 +M:    Michael Hennerich <michael.hennerich@analog.com>
 +L:    device-driver-devel@blackfin.uclinux.org
 +W:    http://wiki-analog.com/AD7142
 +S:    Supported
 +F:    drivers/input/misc/ad714x.c
 +
 +AD7877 TOUCHSCREEN DRIVER
 +M:    Michael Hennerich <michael.hennerich@analog.com>
 +L:    device-driver-devel@blackfin.uclinux.org
 +W:    http://wiki-analog.com/AD7877
 +S:    Supported
 +F:    drivers/input/touchscreen/ad7877.c
 +
 +AD7879 TOUCHSCREEN DRIVER (AD7879/AD7889)
 +M:    Michael Hennerich <michael.hennerich@analog.com>
 +L:    device-driver-devel@blackfin.uclinux.org
 +W:    http://wiki-analog.com/AD7879
 +S:    Supported
 +F:    drivers/input/touchscreen/ad7879.c
 +
  ADM1025 HARDWARE MONITOR DRIVER
  M:    Jean Delvare <khali@linux-fr.org>
  L:    lm-sensors@lm-sensors.org
@@@ -339,32 -305,6 +339,32 @@@ W:       http://linuxwireless.org
  S:    Orphan
  F:    drivers/net/wireless/adm8211.*
  
 +ADP5520 BACKLIGHT DRIVER WITH IO EXPANDER (ADP5520/ADP5501)
 +M:    Michael Hennerich <michael.hennerich@analog.com>
 +L:    device-driver-devel@blackfin.uclinux.org
 +W:    http://wiki-analog.com/ADP5520
 +S:    Supported
 +F:    drivers/mfd/adp5520.c
 +F:    drivers/video/backlight/adp5520_bl.c
 +F:    drivers/led/leds-adp5520.c
 +F:    drivers/gpio/adp5520-gpio.c
 +F:    drivers/input/keyboard/adp5520-keys.c
 +
 +ADP5588 QWERTY KEYPAD AND IO EXPANDER DRIVER (ADP5588/ADP5587)
 +M:    Michael Hennerich <michael.hennerich@analog.com>
 +L:    device-driver-devel@blackfin.uclinux.org
 +W:    http://wiki-analog.com/ADP5588
 +S:    Supported
 +F:    drivers/input/keyboard/adp5588-keys.c
 +F:    drivers/gpio/adp5588-gpio.c
 +
 +ADP8860 BACKLIGHT DRIVER (ADP8860/ADP8861/ADP8863)
 +M:    Michael Hennerich <michael.hennerich@analog.com>
 +L:    device-driver-devel@blackfin.uclinux.org
 +W:    http://wiki-analog.com/ADP8860
 +S:    Supported
 +F:    drivers/video/backlight/adp8860_bl.c
 +
  ADT746X FAN DRIVER
  M:    Colin Leroy <colin@colino.net>
  S:    Maintained
@@@ -377,13 -317,6 +377,13 @@@ S:       Maintaine
  F:    Documentation/hwmon/adt7475
  F:    drivers/hwmon/adt7475.c
  
 +ADXL34X THREE-AXIS DIGITAL ACCELEROMETER DRIVER (ADXL345/ADXL346)
 +M:    Michael Hennerich <michael.hennerich@analog.com>
 +L:    device-driver-devel@blackfin.uclinux.org
 +W:    http://wiki-analog.com/ADXL345
 +S:    Supported
 +F:    drivers/input/misc/adxl34x.c
 +
  ADVANSYS SCSI DRIVER
  M:    Matthew Wilcox <matthew@wil.cx>
  L:    linux-scsi@vger.kernel.org
@@@ -496,6 -429,7 +496,6 @@@ S: Supporte
  F:    arch/x86/kernel/microcode_amd.c
  
  AMS (Apple Motion Sensor) DRIVER
 -M:    Stelian Pop <stelian@popies.net>
  M:    Michael Hanselmann <linux-kernel@hansmi.ch>
  S:    Supported
  F:    drivers/macintosh/ams/
@@@ -507,23 -441,17 +507,23 @@@ L:      linux-rdma@vger.kernel.or
  S:    Maintained
  F:    drivers/infiniband/hw/amso1100/
  
 -ANALOG DEVICES INC ASOC DRIVERS
 -L:    uclinux-dist-devel@blackfin.uclinux.org
 +ANALOG DEVICES INC ASOC CODEC DRIVERS
 +L:    device-driver-devel@blackfin.uclinux.org
  L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
 -W:    http://blackfin.uclinux.org/
 +W:    http://wiki-analog.com/
  S:    Supported
 -F:    sound/soc/blackfin/*
  F:    sound/soc/codecs/ad1*
  F:    sound/soc/codecs/adau*
  F:    sound/soc/codecs/adav*
  F:    sound/soc/codecs/ssm*
  
 +ANALOG DEVICES INC ASOC DRIVERS
 +L:    uclinux-dist-devel@blackfin.uclinux.org
 +L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
 +W:    http://blackfin.uclinux.org/
 +S:    Supported
 +F:    sound/soc/blackfin/*
 +
  AOA (Apple Onboard Audio) ALSA DRIVER
  M:    Johannes Berg <johannes@sipsolutions.net>
  L:    linuxppc-dev@lists.ozlabs.org
@@@ -1167,12 -1095,6 +1167,12 @@@ S:    Supporte
  F:    Documentation/aoe/
  F:    drivers/block/aoe/
  
 +ATHEROS ATH GENERIC UTILITIES
 +M:    "Luis R. Rodriguez" <lrodriguez@atheros.com>
 +L:    linux-wireless@vger.kernel.org
 +S:    Supported
 +F:    drivers/net/wireless/ath/*
 +
  ATHEROS ATH5K WIRELESS DRIVER
  M:    Jiri Slaby <jirislaby@gmail.com>
  M:    Nick Kossifidis <mickflemm@gmail.com>
@@@ -1351,15 -1273,6 +1351,15 @@@ S:    Maintaine
  F:    drivers/video/backlight/
  F:    include/linux/backlight.h
  
 +BATMAN ADVANCED
 +M:    Marek Lindner <lindner_marek@yahoo.de>
 +M:    Simon Wunderlich <siwu@hrz.tu-chemnitz.de>
 +M:    Sven Eckelmann <sven@narfation.org>
 +L:    b.a.t.m.a.n@lists.open-mesh.org
 +W:    http://www.open-mesh.org/
 +S:    Maintained
 +F:    net/batman-adv/
 +
  BAYCOM/HDLCDRV DRIVERS FOR AX.25
  M:    Thomas Sailer <t.sailer@alumni.ethz.ch>
  L:    linux-hams@vger.kernel.org
@@@ -1496,9 -1409,7 +1496,9 @@@ F:      drivers/net/tg3.
  BROADCOM BRCM80211 IEEE802.11n WIRELESS DRIVER
  M:    Brett Rudley <brudley@broadcom.com>
  M:    Henry Ptasinski <henryp@broadcom.com>
 -M:    Nohee Ko <noheek@broadcom.com>
 +M:    Dowan Kim <dowan@broadcom.com>
 +M:    Roland Vossen <rvossen@broadcom.com>
 +M:    Arend van Spriel <arend@broadcom.com>
  L:    linux-wireless@vger.kernel.org
  S:    Supported
  F:    drivers/staging/brcm80211/
@@@ -1523,6 -1434,14 +1523,14 @@@ S:    Supporte
  F:    block/bsg.c
  F:    include/linux/bsg.h
  
+ BT87X AUDIO DRIVER
+ M:    Clemens Ladisch <clemens@ladisch.de>
+ L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
+ T:    git git://git.alsa-project.org/alsa-kernel.git
+ S:    Maintained
+ F:    Documentation/sound/alsa/Bt87x.txt
+ F:    sound/pci/bt87x.c
  BT8XXGPIO DRIVER
  M:    Michael Buesch <mb@bu3sch.de>
  W:    http://bu3sch.de/btgpio.php
@@@ -1548,6 -1467,13 +1556,13 @@@ S:    Maintaine
  F:    Documentation/video4linux/bttv/
  F:    drivers/media/video/bt8xx/bttv*
  
+ C-MEDIA CMI8788 DRIVER
+ M:    Clemens Ladisch <clemens@ladisch.de>
+ L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
+ T:    git git://git.alsa-project.org/alsa-kernel.git
+ S:    Maintained
+ F:    sound/pci/oxygen/
  CACHEFILES: FS-CACHE BACKEND FOR CACHING ON MOUNTED FILESYSTEMS
  M:    David Howells <dhowells@redhat.com>
  L:    linux-cachefs@redhat.com
@@@ -1784,8 -1710,7 +1799,8 @@@ S:      Maintaine
  F:    drivers/usb/atm/cxacru.c
  
  CONFIGFS
 -M:    Joel Becker <joel.becker@oracle.com>
 +M:    Joel Becker <jlbec@evilplan.org>
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jlbec/configfs.git
  S:    Supported
  F:    fs/configfs/
  F:    include/linux/configfs.h
@@@ -2007,7 -1932,7 +2022,7 @@@ F:      drivers/scsi/dc395x.
  DCCP PROTOCOL
  M:    Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
  L:    dccp@vger.kernel.org
 -W:    http://linux-net.osdl.org/index.php/DCCP
 +W:    http://www.linuxfoundation.org/collaborate/workgroups/networking/dccp
  S:    Maintained
  F:    include/linux/dccp.h
  F:    include/linux/tfrc.h
@@@ -2339,6 -2264,13 +2354,13 @@@ W:    bluesmoke.sourceforge.ne
  S:    Maintained
  F:    drivers/edac/r82600_edac.c
  
+ EDIROL UA-101/UA-1000 DRIVER
+ M:    Clemens Ladisch <clemens@ladisch.de>
+ L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
+ T:    git git://git.alsa-project.org/alsa-kernel.git
+ S:    Maintained
+ F:    sound/usb/misc/ua101.c
  EEEPC LAPTOP EXTRAS DRIVER
  M:    Corentin Chary <corentincj@iksaif.net>
  L:    acpi4asus-user@lists.sourceforge.net
@@@ -2347,14 -2279,6 +2369,14 @@@ W:    http://acpi4asus.sf.ne
  S:    Maintained
  F:    drivers/platform/x86/eeepc-laptop.c
  
 +EEEPC WMI EXTRAS DRIVER
 +M:    Corentin Chary <corentincj@iksaif.net>
 +L:    acpi4asus-user@lists.sourceforge.net
 +L:    platform-driver-x86@vger.kernel.org
 +W:    http://acpi4asus.sf.net
 +S:    Maintained
 +F:    drivers/platform/x86/eeepc-wmi.c
 +
  EFIFB FRAMEBUFFER DRIVER
  L:    linux-fbdev@vger.kernel.org
  M:    Peter Jones <pjones@redhat.com>
@@@ -2429,7 -2353,7 +2451,7 @@@ ETHERNET BRIDG
  M:    Stephen Hemminger <shemminger@linux-foundation.org>
  L:    bridge@lists.linux-foundation.org
  L:    netdev@vger.kernel.org
 -W:    http://www.linux-foundation.org/en/Net:Bridge
 +W:    http://www.linuxfoundation.org/en/Net:Bridge
  S:    Maintained
  F:    include/linux/netfilter_bridge/
  F:    net/bridge/
@@@ -2692,14 -2616,6 +2714,14 @@@ S:    Supporte
  F:    drivers/i2c/busses/i2c-gpio.c
  F:    include/linux/i2c-gpio.h
  
 +GENERIC GPIO I2C MULTIPLEXER DRIVER
 +M:    Peter Korsgaard <peter.korsgaard@barco.com>
 +L:    linux-i2c@vger.kernel.org
 +S:    Supported
 +F:    drivers/i2c/muxes/gpio-i2cmux.c
 +F:    include/linux/gpio-i2cmux.h
 +F:    Documentation/i2c/muxes/gpio-i2cmux
 +
  GENERIC HDLC (WAN) DRIVERS
  M:    Krzysztof Halasa <khc@pm.waw.pl>
  W:    http://www.kernel.org/pub/linux/utils/net/hdlc/
@@@ -2918,10 -2834,6 +2940,10 @@@ M:    Thomas Gleixner <tglx@linutronix.de
  S:    Maintained
  F:    Documentation/timers/
  F:    kernel/hrtimer.c
 +F:    kernel/time/clockevents.c
 +F:    kernel/time/tick*.*
 +F:    kernel/time/timer_*.c
 +F     include/linux/clockevents.h
  F:    include/linux/hrtimer.h
  
  HIGH-SPEED SCC DRIVER FOR AX.25
@@@ -3157,10 -3069,8 +3179,10 @@@ F:    drivers/input
  INPUT MULTITOUCH (MT) PROTOCOL
  M:    Henrik Rydberg <rydberg@euromail.se>
  L:    linux-input@vger.kernel.org
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/rydberg/input-mt.git
  S:    Maintained
  F:    Documentation/input/multi-touch-protocol.txt
 +F:    drivers/input/input-mt.c
  K:    \b(ABS|SYN)_MT_
  
  INTEL IDLE DRIVER
@@@ -3247,8 -3157,6 +3269,8 @@@ M:      Alex Duyck <alexander.h.duyck@intel.
  M:    John Ronciak <john.ronciak@intel.com>
  L:    e1000-devel@lists.sourceforge.net
  W:    http://e1000.sourceforge.net/
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-2.6.git
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next-2.6.git
  S:    Supported
  F:    Documentation/networking/e100.txt
  F:    Documentation/networking/e1000.txt
@@@ -3507,6 -3415,13 +3529,13 @@@ L:    linux-serial@vger.kernel.or
  S:    Maintained
  F:    drivers/serial/jsm/
  
+ K10TEMP HARDWARE MONITORING DRIVER
+ M:    Clemens Ladisch <clemens@ladisch.de>
+ L:    lm-sensors@lm-sensors.org
+ S:    Maintained
+ F:    Documentation/hwmon/k10temp
+ F:    drivers/hwmon/k10temp.c
  K8TEMP HARDWARE MONITORING DRIVER
  M:    Rudolf Marek <r.marek@assembler.cz>
  L:    lm-sensors@lm-sensors.org
@@@ -4092,8 -4007,9 +4121,8 @@@ F:      include/linux/module.
  F:    kernel/module.c
  
  MOTION EYE VAIO PICTUREBOOK CAMERA DRIVER
 -M:    Stelian Pop <stelian@popies.net>
  W:    http://popies.net/meye/
 -S:    Maintained
 +S:    Orphan
  F:    Documentation/video4linux/meye.txt
  F:    drivers/media/video/meye.*
  F:    include/linux/meye.h
@@@ -4359,7 -4275,6 +4388,7 @@@ NILFS2 FILESYSTE
  M:    KONISHI Ryusuke <konishi.ryusuke@lab.ntt.co.jp>
  L:    linux-nilfs@vger.kernel.org
  W:    http://www.nilfs.org/en/
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/ryusuke/nilfs2.git
  S:    Supported
  F:    Documentation/filesystems/nilfs2.txt
  F:    fs/nilfs2/
@@@ -4381,11 -4296,11 +4410,11 @@@ F:   Documentation/scsi/NinjaSCSI.tx
  F:    drivers/scsi/nsp32*
  
  NTFS FILESYSTEM
 -M:    Anton Altaparmakov <aia21@cantab.net>
 +M:    Anton Altaparmakov <anton@tuxera.com>
  L:    linux-ntfs-dev@lists.sourceforge.net
 -W:    http://www.linux-ntfs.org/
 +W:    http://www.tuxera.com/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/aia21/ntfs-2.6.git
 -S:    Maintained
 +S:    Supported
  F:    Documentation/filesystems/ntfs.txt
  F:    fs/ntfs/
  
@@@ -4457,20 -4372,6 +4486,20 @@@ M:    Deepak Saxena <dsaxena@plexity.net
  S:    Maintained
  F:    drivers/char/hw_random/omap-rng.c
  
 +OMAP HWMOD SUPPORT
 +M:    Benoît Cousson <b-cousson@ti.com>
 +M:    Paul Walmsley <paul@pwsan.com>
 +L:    linux-omap@vger.kernel.org
 +S:    Maintained
 +F:    arch/arm/mach-omap2/omap_hwmod.c
 +F:    arch/arm/plat-omap/include/plat/omap_hwmod.h
 +
 +OMAP HWMOD DATA FOR OMAP4-BASED DEVICES
 +M:    Benoît Cousson <b-cousson@ti.com>
 +L:    linux-omap@vger.kernel.org
 +S:    Maintained
 +F:    arch/arm/mach-omap2/omap_hwmod_44xx_data.c
 +
  OMAP USB SUPPORT
  M:    Felipe Balbi <balbi@ti.com>
  M:    David Brownell <dbrownell@users.sourceforge.net>
@@@ -4537,6 -4438,13 +4566,13 @@@ F:    drivers/o
  F:    include/linux/of*.h
  K:    of_get_property
  
+ OPL4 DRIVER
+ M:    Clemens Ladisch <clemens@ladisch.de>
+ L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
+ T:    git git://git.alsa-project.org/alsa-kernel.git
+ S:    Maintained
+ F:    sound/drivers/opl4/
  OPROFILE
  M:    Robert Richter <robert.richter@amd.com>
  L:    oprofile-list@lists.sf.net
@@@ -4548,7 -4456,7 +4584,7 @@@ F:      include/linux/oprofile.
  
  ORACLE CLUSTER FILESYSTEM 2 (OCFS2)
  M:    Mark Fasheh <mfasheh@suse.com>
 -M:    Joel Becker <joel.becker@oracle.com>
 +M:    Joel Becker <jlbec@evilplan.org>
  L:    ocfs2-devel@oss.oracle.com (moderated for non-subscribers)
  W:    http://oss.oracle.com/projects/ocfs2/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jlbec/ocfs2.git
@@@ -4633,7 -4541,7 +4669,7 @@@ M:      Jeremy Fitzhardinge <jeremy@xensourc
  M:    Chris Wright <chrisw@sous-sol.org>
  M:    Alok Kataria <akataria@vmware.com>
  M:    Rusty Russell <rusty@rustcorp.com.au>
 -L:    virtualization@lists.osdl.org
 +L:    virtualization@lists.linux-foundation.org
  S:    Supported
  F:    Documentation/ia64/paravirt_ops.txt
  F:    arch/*/kernel/paravirt*
@@@ -4745,16 -4653,6 +4781,16 @@@ S:    Maintaine
  F:    crypto/pcrypt.c
  F:    include/crypto/pcrypt.h
  
 +PER-CPU MEMORY ALLOCATOR
 +M:    Tejun Heo <tj@kernel.org>
 +M:    Christoph Lameter <cl@linux-foundation.org>
 +L:    linux-kernel@vger.kernel.org
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu.git
 +S:    Maintained
 +F:    include/linux/percpu*.h
 +F:    mm/percpu*.c
 +F:    arch/*/include/asm/percpu.h
 +
  PER-TASK DELAY ACCOUNTING
  M:    Balbir Singh <balbir@linux.vnet.ibm.com>
  S:    Maintained
@@@ -4765,7 -4663,7 +4801,7 @@@ PERFORMANCE EVENTS SUBSYSTE
  M:    Peter Zijlstra <a.p.zijlstra@chello.nl>
  M:    Paul Mackerras <paulus@samba.org>
  M:    Ingo Molnar <mingo@elte.hu>
 -M:    Arnaldo Carvalho de Melo <acme@redhat.com>
 +M:    Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
  S:    Supported
  F:    kernel/perf_event*.c
  F:    include/linux/perf_event.h
@@@ -5131,6 -5029,11 +5167,6 @@@ F:     kernel/rcu
  F:    kernel/srcu*
  X:    kernel/rcutorture.c
  
 -REAL TIME CLOCK DRIVER (LEGACY)
 -M:    Paul Gortmaker <p_gortmaker@yahoo.com>
 -S:    Maintained
 -F:    drivers/char/rtc.c
 -
  REAL TIME CLOCK (RTC) SUBSYSTEM
  M:    Alessandro Zummo <a.zummo@towertech.it>
  L:    rtc-linux@googlegroups.com
@@@ -5185,7 -5088,7 +5221,7 @@@ L:      linux-wireless@vger.kernel.or
  W:    http://linuxwireless.org/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git
  S:    Maintained
 -F:    drivers/net/wireless/rtl818x/rtl8180*
 +F:    drivers/net/wireless/rtl818x/rtl8180/
  
  RTL8187 WIRELESS DRIVER
  M:    Herton Ronaldo Krzesinski <herton@mandriva.com.br>
@@@ -5195,17 -5098,7 +5231,17 @@@ L:    linux-wireless@vger.kernel.or
  W:    http://linuxwireless.org/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git
  S:    Maintained
 -F:    drivers/net/wireless/rtl818x/rtl8187*
 +F:    drivers/net/wireless/rtl818x/rtl8187/
 +
 +RTL8192CE WIRELESS DRIVER
 +M:    Larry Finger <Larry.Finger@lwfinger.net>
 +M:    Chaoming Li <chaoming_li@realsil.com.cn>
 +L:    linux-wireless@vger.kernel.org
 +W:    http://linuxwireless.org/
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git
 +S:    Maintained
 +F:    drivers/net/wireless/rtlwifi/
 +F:    drivers/net/wireless/rtlwifi/rtl8192ce/
  
  S3 SAVAGE FRAMEBUFFER DRIVER
  M:    Antonino Daplas <adaplas@gmail.com>
@@@ -5283,20 -5176,8 +5319,20 @@@ SAMSUNG AUDIO (ASoC) DRIVER
  M:    Jassi Brar <jassi.brar@samsung.com>
  L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
  S:    Supported
- F:    sound/soc/s3c24xx
+ F:    sound/soc/samsung
  
 +TIMEKEEPING, NTP
 +M:    John Stultz <johnstul@us.ibm.com>
 +M:    Thomas Gleixner <tglx@linutronix.de>
 +S:    Supported
 +F:    include/linux/clocksource.h
 +F:    include/linux/time.h
 +F:    include/linux/timex.h
 +F:    include/linux/timekeeping.h
 +F:    kernel/time/clocksource.c
 +F:    kernel/time/time*.c
 +F:    kernel/time/ntp.c
 +
  TLG2300 VIDEO4LINUX-2 DRIVER
  M:    Huang Shijie <shijie8@gmail.com>
  M:    Kang Yong <kangyong@telegent.com>
@@@ -5867,6 -5748,12 +5903,6 @@@ M:     Ion Badulescu <ionut@badula.org
  S:    Odd Fixes
  F:    drivers/net/starfire*
  
 -STRADIS MPEG-2 DECODER DRIVER
 -M:    Nathan Laredo <laredo@gnu.org>
 -W:    http://www.stradis.com/
 -S:    Maintained
 -F:    drivers/media/video/stradis.c
 -
  SUN3/3X
  M:    Sam Creasey <sammy@sammy.net>
  W:    http://sammy.net/sun3/
@@@ -6016,8 -5903,7 +6052,8 @@@ F:      drivers/net/tlan.
  TOMOYO SECURITY MODULE
  M:    Kentaro Takeda <takedakn@nttdata.co.jp>
  M:    Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
 -L:    tomoyo-users-en@lists.sourceforge.jp (subscribers-only, for developers and users in English)
 +L:    tomoyo-dev-en@lists.sourceforge.jp (subscribers-only, for developers in English)
 +L:    tomoyo-users-en@lists.sourceforge.jp (subscribers-only, for users in English)
  L:    tomoyo-dev@lists.sourceforge.jp (subscribers-only, for developers in Japanese)
  L:    tomoyo-users@lists.sourceforge.jp (subscribers-only, for users in Japanese)
  W:    http://tomoyo.sourceforge.jp/
@@@ -6291,6 -6177,13 +6327,13 @@@ S:    Maintaine
  W:    http://www.one-eyed-alien.net/~mdharm/linux-usb/
  F:    drivers/usb/storage/
  
+ USB MIDI DRIVER
+ M:    Clemens Ladisch <clemens@ladisch.de>
+ L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
+ T:    git git://git.alsa-project.org/alsa-kernel.git
+ S:    Maintained
+ F:    sound/usb/midi.*
  USB OHCI DRIVER
  M:    David Brownell <dbrownell@users.sourceforge.net>
  L:    linux-usb@vger.kernel.org
@@@ -6530,7 -6423,7 +6573,7 @@@ F:      include/linux/virtio_console.
  VIRTIO HOST (VHOST)
  M:    "Michael S. Tsirkin" <mst@redhat.com>
  L:    kvm@vger.kernel.org
 -L:    virtualization@lists.osdl.org
 +L:    virtualization@lists.linux-foundation.org
  L:    netdev@vger.kernel.org
  S:    Maintained
  F:    drivers/vhost/
@@@ -6580,7 -6473,7 +6623,7 @@@ F:      net/8021q
  
  VLYNQ BUS
  M:    Florian Fainelli <florian@openwrt.org>
 -L:    openwrt-devel@lists.openwrt.org
 +L:    openwrt-devel@lists.openwrt.org (subscribers-only)
  S:    Maintained
  F:    drivers/vlynq/vlynq.c
  F:    include/linux/vlynq.h
@@@ -6800,7 -6693,7 +6843,7 @@@ XEN HYPERVISOR INTERFAC
  M:    Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
  M:    Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
  L:    xen-devel@lists.xensource.com (moderated for non-subscribers)
 -L:    virtualization@lists.osdl.org
 +L:    virtualization@lists.linux-foundation.org
  S:    Supported
  F:    arch/x86/xen/
  F:    drivers/*/xen-*front.c
@@@ -61,7 -61,6 +61,7 @@@
  #include <asm/mach/arch.h>
  #include <asm/mach/map.h>
  #include <asm/mach/time.h>
 +#include <asm/setup.h>
  
  /*
   * Address    Interface               BusWidth        note
@@@ -273,15 -272,6 +273,15 @@@ static struct resource sh_mmcif_resourc
        },
  };
  
 +static struct sh_mmcif_dma sh_mmcif_dma = {
 +      .chan_priv_rx   = {
 +              .slave_id       = SHDMA_SLAVE_MMCIF_RX,
 +      },
 +      .chan_priv_tx   = {
 +              .slave_id       = SHDMA_SLAVE_MMCIF_TX,
 +      },
 +};
 +
  static struct sh_mmcif_plat_data sh_mmcif_plat = {
        .sup_pclk       = 0,
        .ocr            = MMC_VDD_165_195 | MMC_VDD_32_33 | MMC_VDD_33_34,
                          MMC_CAP_8_BIT_DATA |
                          MMC_CAP_NEEDS_POLL,
        .get_cd         = slot_cn7_get_cd,
 +      .dma            = &sh_mmcif_dma,
  };
  
  static struct platform_device sh_mmcif_device = {
@@@ -512,12 -501,7 +512,12 @@@ static struct platform_device keysc_dev
  static struct resource mipidsi0_resources[] = {
        [0] = {
                .start  = 0xffc60000,
 -              .end    = 0xffc68fff,
 +              .end    = 0xffc63073,
 +              .flags  = IORESOURCE_MEM,
 +      },
 +      [1] = {
 +              .start  = 0xffc68000,
 +              .end    = 0xffc680ef,
                .flags  = IORESOURCE_MEM,
        },
  };
  static struct sh_mipi_dsi_info mipidsi0_info = {
        .data_format    = MIPI_RGB888,
        .lcd_chan       = &lcdc_info.ch[0],
 +      .vsynw_offset   = 17,
  };
  
  static struct platform_device mipidsi0_device = {
        },
  };
  
 -/* This function will disappear when we switch to (runtime) PM */
 -static int __init ap4evb_init_display_clk(void)
 -{
 -      struct clk *lcdc_clk;
 -      struct clk *dsitx_clk;
 -      int ret;
 -
 -      lcdc_clk = clk_get(&lcdc_device.dev, "sh_mobile_lcdc_fb.0");
 -      if (IS_ERR(lcdc_clk))
 -              return PTR_ERR(lcdc_clk);
 -
 -      dsitx_clk = clk_get(&mipidsi0_device.dev, "sh-mipi-dsi.0");
 -      if (IS_ERR(dsitx_clk)) {
 -              ret = PTR_ERR(dsitx_clk);
 -              goto eclkdsitxget;
 -      }
 -
 -      ret = clk_enable(lcdc_clk);
 -      if (ret < 0)
 -              goto eclklcdcon;
 -
 -      ret = clk_enable(dsitx_clk);
 -      if (ret < 0)
 -              goto eclkdsitxon;
 -
 -      return 0;
 -
 -eclkdsitxon:
 -      clk_disable(lcdc_clk);
 -eclklcdcon:
 -      clk_put(dsitx_clk);
 -eclkdsitxget:
 -      clk_put(lcdc_clk);
 -
 -      return ret;
 -}
 -device_initcall(ap4evb_init_display_clk);
 -
  static struct platform_device *qhd_devices[] __initdata = {
        &mipidsi0_device,
        &keysc_device,
@@@ -643,8 -664,9 +643,8 @@@ static int fsi_hdmi_set_rate(struct dev
                return -EIO;
  
        ret = __fsi_set_round_rate(fsib_clk, fsib_rate, enable);
 -      clk_put(fsib_clk);
        if (ret < 0)
 -              return ret;
 +              goto fsi_set_rate_end;
  
        /* FSI DIV setting */
        ret = __fsi_set_round_rate(fdiv_clk, fdiv_rate, enable);
                /* disable FSI B */
                if (enable)
                        __fsi_set_round_rate(fsib_clk, fsib_rate, 0);
 -              return ret;
 +              goto fsi_set_rate_end;
        }
  
 -      return ackmd_bpfmd;
 +      ret = ackmd_bpfmd;
 +
 +fsi_set_rate_end:
 +      clk_put(fsib_clk);
 +      return ret;
  }
  
  static int fsi_set_rate(struct device *dev, int is_porta, int rate, int enable)
@@@ -711,6 -729,10 +711,10 @@@ static struct platform_device fsi_devic
        },
  };
  
+ static struct platform_device fsi_ak4643_device = {
+       .name           = "sh_fsi2_a_ak4643",
+ };
  static struct sh_mobile_lcdc_info sh_mobile_lcdc1_info = {
        .clock_source = LCDC_CLK_EXTERNAL,
        .ch[0] = {
@@@ -746,15 -768,10 +750,15 @@@ static struct platform_device lcdc1_dev
        },
  };
  
 +static long ap4evb_clk_optimize(unsigned long target, unsigned long *best_freq,
 +                              unsigned long *parent_freq);
 +
 +
  static struct sh_mobile_hdmi_info hdmi_info = {
        .lcd_chan = &sh_mobile_lcdc1_info.ch[0],
        .lcd_dev = &lcdc1_device.dev,
        .flags = HDMI_SND_SRC_SPDIF,
 +      .clk_optimize_parent = ap4evb_clk_optimize,
  };
  
  static struct resource hdmi_resources[] = {
@@@ -781,25 -798,6 +785,25 @@@ static struct platform_device hdmi_devi
        },
  };
  
 +static long ap4evb_clk_optimize(unsigned long target, unsigned long *best_freq,
 +                              unsigned long *parent_freq)
 +{
 +      struct clk *hdmi_ick = clk_get(&hdmi_device.dev, "ick");
 +      long error;
 +
 +      if (IS_ERR(hdmi_ick)) {
 +              int ret = PTR_ERR(hdmi_ick);
 +              pr_err("Cannot get HDMI ICK: %d\n", ret);
 +              return ret;
 +      }
 +
 +      error = clk_round_parent(hdmi_ick, target, best_freq, parent_freq, 1, 64);
 +
 +      clk_put(hdmi_ick);
 +
 +      return error;
 +}
 +
  static struct gpio_led ap4evb_leds[] = {
        {
                .name                   = "led4",
@@@ -933,6 -931,7 +937,7 @@@ static struct platform_device *ap4evb_d
        &sdhi1_device,
        &usb1_host_device,
        &fsi_device,
+       &fsi_ak4643_device,
        &sh_mmcif_device,
        &lcdc1_device,
        &lcdc_device,
@@@ -1187,7 -1186,7 +1192,7 @@@ static void __init ap4evb_init(void
        gpio_request(GPIO_FN_OVCN2_1,    NULL);
  
        /* setup USB phy */
 -      __raw_writew(0x8a0a, 0xE6058130);       /* USBCR2 */
 +      __raw_writew(0x8a0a, 0xE6058130);       /* USBCR4 */
  
        /* enable FSI2 port A (ak4643) */
        gpio_request(GPIO_FN_FSIAIBT,   NULL);
@@@ -1361,7 -1360,6 +1366,7 @@@ static struct sys_timer ap4evb_timer = 
  MACHINE_START(AP4EVB, "ap4evb")
        .map_io         = ap4evb_map_io,
        .init_irq       = sh7372_init_irq,
 +      .handle_irq     = shmobile_handle_irq_intc,
        .init_machine   = ap4evb_init,
        .timer          = &ap4evb_timer,
  MACHINE_END
@@@ -86,7 -86,7 +86,7 @@@ static int wm8994_ldo1_list_voltage(str
        return (selector * 100000) + 2400000;
  }
  
 -static int wm8994_ldo1_get_voltage(struct regulator_dev *rdev)
 +static int wm8994_ldo1_get_voltage_sel(struct regulator_dev *rdev)
  {
        struct wm8994_ldo *ldo = rdev_get_drvdata(rdev);
        int val;
        if (val < 0)
                return val;
  
 -      val = (val & WM8994_LDO1_VSEL_MASK) >> WM8994_LDO1_VSEL_SHIFT;
 -
 -      return wm8994_ldo1_list_voltage(rdev, val);
 +      return (val & WM8994_LDO1_VSEL_MASK) >> WM8994_LDO1_VSEL_SHIFT;
  }
  
  static int wm8994_ldo1_set_voltage(struct regulator_dev *rdev,
 -                                 int min_uV, int max_uV)
 +                                 int min_uV, int max_uV, unsigned *s)
  {
        struct wm8994_ldo *ldo = rdev_get_drvdata(rdev);
        int selector, v;
        if (v < 0 || v > max_uV)
                return -EINVAL;
  
 +      *s = selector;
        selector <<= WM8994_LDO1_VSEL_SHIFT;
  
        return wm8994_set_bits(ldo->wm8994, WM8994_LDO_1,
@@@ -123,20 -124,29 +123,29 @@@ static struct regulator_ops wm8994_ldo1
        .enable_time = wm8994_ldo_enable_time,
  
        .list_voltage = wm8994_ldo1_list_voltage,
 -      .get_voltage = wm8994_ldo1_get_voltage,
 +      .get_voltage_sel = wm8994_ldo1_get_voltage_sel,
        .set_voltage = wm8994_ldo1_set_voltage,
  };
  
  static int wm8994_ldo2_list_voltage(struct regulator_dev *rdev,
                                    unsigned int selector)
  {
+       struct wm8994_ldo *ldo = rdev_get_drvdata(rdev);
        if (selector > WM8994_LDO2_MAX_SELECTOR)
                return -EINVAL;
  
-       return (selector * 100000) + 900000;
+       switch (ldo->wm8994->type) {
+       case WM8994:
+               return (selector * 100000) + 900000;
+       case WM8958:
+               return (selector * 100000) + 1000000;
+       default:
+               return -EINVAL;
+       }
  }
  
 -static int wm8994_ldo2_get_voltage(struct regulator_dev *rdev)
 +static int wm8994_ldo2_get_voltage_sel(struct regulator_dev *rdev)
  {
        struct wm8994_ldo *ldo = rdev_get_drvdata(rdev);
        int val;
        if (val < 0)
                return val;
  
 -      val = (val & WM8994_LDO2_VSEL_MASK) >> WM8994_LDO2_VSEL_SHIFT;
 -
 -      return wm8994_ldo2_list_voltage(rdev, val);
 +      return (val & WM8994_LDO2_VSEL_MASK) >> WM8994_LDO2_VSEL_SHIFT;
  }
  
  static int wm8994_ldo2_set_voltage(struct regulator_dev *rdev,
 -                                 int min_uV, int max_uV)
 +                                 int min_uV, int max_uV, unsigned *s)
  {
        struct wm8994_ldo *ldo = rdev_get_drvdata(rdev);
        int selector, v;
  
-       selector = (min_uV - 900000) / 100000;
+       switch (ldo->wm8994->type) {
+       case WM8994:
+               selector = (min_uV - 900000) / 100000;
+               break;
+       case WM8958:
+               selector = (min_uV - 1000000) / 100000;
+               break;
+       default:
+               return -EINVAL;
+       }
        v = wm8994_ldo2_list_voltage(rdev, selector);
        if (v < 0 || v > max_uV)
                return -EINVAL;
  
 +      *s = selector;
        selector <<= WM8994_LDO2_VSEL_SHIFT;
  
        return wm8994_set_bits(ldo->wm8994, WM8994_LDO_2,
@@@ -173,7 -194,7 +192,7 @@@ static struct regulator_ops wm8994_ldo2
        .enable_time = wm8994_ldo_enable_time,
  
        .list_voltage = wm8994_ldo2_list_voltage,
 -      .get_voltage = wm8994_ldo2_get_voltage,
 +      .get_voltage_sel = wm8994_ldo2_get_voltage_sel,
        .set_voltage = wm8994_ldo2_set_voltage,
  };
  
@@@ -22,6 -22,7 +22,7 @@@
  #include <linux/slab.h>
  #include <linux/types.h>
  #include <linux/workqueue.h>
+ #include <sound/soc.h>
  #include <sound/soc-dapm.h>
  #include <sound/initval.h>
  
@@@ -209,11 -210,7 +210,11 @@@ enum hotplug_state 
  struct sh_hdmi {
        void __iomem *base;
        enum hotplug_state hp_state;    /* hot-plug status */
 -      bool preprogrammed_mode;        /* use a pre-programmed VIC or the external mode */
 +      u8 preprogrammed_vic;           /* use a pre-programmed VIC or
 +                                         the external mode */
 +      u8 edid_block_addr;
 +      u8 edid_segment_nr;
 +      u8 edid_blocks;
        struct clk *hdmi_clk;
        struct device *dev;
        struct fb_info *info;
@@@ -346,7 -343,7 +347,7 @@@ static void sh_hdmi_external_video_para
        hdmi_write(hdmi, var->vsync_len, HDMI_EXTERNAL_V_DURATION);
  
        /* Set bit 0 of HDMI_EXTERNAL_VIDEO_PARAM_SETTINGS here for external mode */
 -      if (!hdmi->preprogrammed_mode)
 +      if (!hdmi->preprogrammed_vic)
                hdmi_write(hdmi, sync | 1 | (voffset << 4),
                           HDMI_EXTERNAL_VIDEO_PARAM_SETTINGS);
  }
@@@ -470,18 -467,7 +471,18 @@@ static void sh_hdmi_audio_config(struc
   */
  static void sh_hdmi_phy_config(struct sh_hdmi *hdmi)
  {
 -      if (hdmi->var.yres > 480) {
 +      if (hdmi->var.pixclock < 10000) {
 +              /* for 1080p8bit 148MHz */
 +              hdmi_write(hdmi, 0x1d, HDMI_SLIPHDMIT_PARAM_SETTINGS_1);
 +              hdmi_write(hdmi, 0x00, HDMI_SLIPHDMIT_PARAM_SETTINGS_2);
 +              hdmi_write(hdmi, 0x00, HDMI_SLIPHDMIT_PARAM_SETTINGS_3);
 +              hdmi_write(hdmi, 0x4c, HDMI_SLIPHDMIT_PARAM_SETTINGS_5);
 +              hdmi_write(hdmi, 0x1e, HDMI_SLIPHDMIT_PARAM_SETTINGS_6);
 +              hdmi_write(hdmi, 0x48, HDMI_SLIPHDMIT_PARAM_SETTINGS_7);
 +              hdmi_write(hdmi, 0x0e, HDMI_SLIPHDMIT_PARAM_SETTINGS_8);
 +              hdmi_write(hdmi, 0x25, HDMI_SLIPHDMIT_PARAM_SETTINGS_9);
 +              hdmi_write(hdmi, 0x04, HDMI_SLIPHDMIT_PARAM_SETTINGS_10);
 +      } else if (hdmi->var.pixclock < 30000) {
                /* 720p, 8bit, 74.25MHz. Might need to be adjusted for other formats */
                /*
                 * [1:0]        Speed_A
@@@ -580,11 -566,13 +581,11 @@@ static void sh_hdmi_avi_infoframe_setup
        hdmi_write(hdmi, 0x00, HDMI_CTRL_PKT_BUF_ACCESS_PB3);
  
        /*
 -       * VIC = 1280 x 720p: ignored if external config is used
 -       * Send 2 for 720 x 480p, 16 for 1080p, ignored in external mode
 +       * VIC should be ignored if external config is used, so, we could just use 0,
 +       * but play safe and use a valid value in any case just in case
         */
 -      if (hdmi->var.yres == 1080 && hdmi->var.xres == 1920)
 -              vic = 16;
 -      else if (hdmi->var.yres == 480 && hdmi->var.xres == 720)
 -              vic = 2;
 +      if (hdmi->preprogrammed_vic)
 +              vic = hdmi->preprogrammed_vic;
        else
                vic = 4;
        hdmi_write(hdmi, vic, HDMI_CTRL_PKT_BUF_ACCESS_PB4);
@@@ -698,21 -686,11 +699,21 @@@ static void sh_hdmi_configure(struct sh
  }
  
  static unsigned long sh_hdmi_rate_error(struct sh_hdmi *hdmi,
 -                                      const struct fb_videomode *mode)
 +              const struct fb_videomode *mode,
 +              unsigned long *hdmi_rate, unsigned long *parent_rate)
  {
 -      long target = PICOS2KHZ(mode->pixclock) * 1000,
 -              rate = clk_round_rate(hdmi->hdmi_clk, target);
 -      unsigned long rate_error = rate > 0 ? abs(rate - target) : ULONG_MAX;
 +      unsigned long target = PICOS2KHZ(mode->pixclock) * 1000, rate_error;
 +      struct sh_mobile_hdmi_info *pdata = hdmi->dev->platform_data;
 +
 +      *hdmi_rate = clk_round_rate(hdmi->hdmi_clk, target);
 +      if ((long)*hdmi_rate < 0)
 +              *hdmi_rate = clk_get_rate(hdmi->hdmi_clk);
 +
 +      rate_error = (long)*hdmi_rate > 0 ? abs(*hdmi_rate - target) : ULONG_MAX;
 +      if (rate_error && pdata->clk_optimize_parent)
 +              rate_error = pdata->clk_optimize_parent(target, hdmi_rate, parent_rate);
 +      else if (clk_get_parent(hdmi->hdmi_clk))
 +              *parent_rate = clk_get_rate(clk_get_parent(hdmi->hdmi_clk));
  
        dev_dbg(hdmi->dev, "%u-%u-%u-%u x %u-%u-%u-%u\n",
                mode->left_margin, mode->xres,
                mode->upper_margin, mode->yres,
                mode->lower_margin, mode->vsync_len);
  
 -      dev_dbg(hdmi->dev, "\t@%lu(+/-%lu)Hz, e=%lu / 1000, r=%uHz\n", target,
 -               rate_error, rate_error ? 10000 / (10 * target / rate_error) : 0,
 -               mode->refresh);
 +      dev_dbg(hdmi->dev, "\t@%lu(+/-%lu)Hz, e=%lu / 1000, r=%uHz, p=%luHz\n", target,
 +              rate_error, rate_error ? 10000 / (10 * target / rate_error) : 0,
 +              mode->refresh, *parent_rate);
  
        return rate_error;
  }
  
 -static int sh_hdmi_read_edid(struct sh_hdmi *hdmi)
 +static int sh_hdmi_read_edid(struct sh_hdmi *hdmi, unsigned long *hdmi_rate,
 +                           unsigned long *parent_rate)
  {
        struct fb_var_screeninfo tmpvar;
        struct fb_var_screeninfo *var = &tmpvar;
        printk(KERN_CONT "\n");
  #endif
  
 -      fb_edid_to_monspecs(edid, &hdmi->monspec);
 +      if (!hdmi->edid_blocks) {
 +              fb_edid_to_monspecs(edid, &hdmi->monspec);
 +              hdmi->edid_blocks = edid[126] + 1;
 +
 +              dev_dbg(hdmi->dev, "%d main modes, %d extension blocks\n",
 +                      hdmi->monspec.modedb_len, hdmi->edid_blocks - 1);
 +      } else {
 +              dev_dbg(hdmi->dev, "Extension %u detected, DTD start %u\n",
 +                      edid[0], edid[2]);
 +              fb_edid_add_monspecs(edid, &hdmi->monspec);
 +      }
 +
 +      if (hdmi->edid_blocks > hdmi->edid_segment_nr * 2 +
 +          (hdmi->edid_block_addr >> 7) + 1) {
 +              /* More blocks to read */
 +              if (hdmi->edid_block_addr) {
 +                      hdmi->edid_block_addr = 0;
 +                      hdmi->edid_segment_nr++;
 +              } else {
 +                      hdmi->edid_block_addr = 0x80;
 +              }
 +              /* Set EDID word address  */
 +              hdmi_write(hdmi, hdmi->edid_block_addr, HDMI_EDID_WORD_ADDRESS);
 +              /* Enable EDID interrupt */
 +              hdmi_write(hdmi, 0xC6, HDMI_INTERRUPT_MASK_1);
 +              /* Set EDID segment pointer - starts reading EDID */
 +              hdmi_write(hdmi, hdmi->edid_segment_nr, HDMI_EDID_SEGMENT_POINTER);
 +              return -EAGAIN;
 +      }
 +
 +      /* All E-EDID blocks ready */
 +      dev_dbg(hdmi->dev, "%d main and extended modes\n", hdmi->monspec.modedb_len);
  
        fb_get_options("sh_mobile_lcdc", &forced);
        if (forced && *forced) {
        for (i = 0, mode = hdmi->monspec.modedb;
             f_width && f_height && i < hdmi->monspec.modedb_len && !exact_match;
             i++, mode++) {
 -              unsigned long rate_error = sh_hdmi_rate_error(hdmi, mode);
 +              unsigned long rate_error;
  
                /* No interest in unmatching modes */
                if (f_width != mode->xres || f_height != mode->yres)
                        continue;
 +
 +              rate_error = sh_hdmi_rate_error(hdmi, mode, hdmi_rate, parent_rate);
 +
                if (f_refresh == mode->refresh || (!f_refresh && !rate_error))
                        /*
                         * Exact match if either the refresh rate matches or it
  
                if (modelist) {
                        found = &modelist->mode;
 -                      found_rate_error = sh_hdmi_rate_error(hdmi, found);
 +                      found_rate_error = sh_hdmi_rate_error(hdmi, found, hdmi_rate, parent_rate);
                }
        }
  
        if (!found)
                return -ENXIO;
  
 -      dev_info(hdmi->dev, "Using %s mode %ux%u@%uHz (%luHz), clock error %luHz\n",
 -               modelist ? "default" : "EDID", found->xres, found->yres,
 -               found->refresh, PICOS2KHZ(found->pixclock) * 1000, found_rate_error);
 -
 -      if ((found->xres == 720 && found->yres == 480) ||
 -          (found->xres == 1280 && found->yres == 720) ||
 -          (found->xres == 1920 && found->yres == 1080))
 -              hdmi->preprogrammed_mode = true;
 +      if (found->xres == 640 && found->yres == 480 && found->refresh == 60)
 +              hdmi->preprogrammed_vic = 1;
 +      else if (found->xres == 720 && found->yres == 480 && found->refresh == 60)
 +              hdmi->preprogrammed_vic = 2;
 +      else if (found->xres == 720 && found->yres == 576 && found->refresh == 50)
 +              hdmi->preprogrammed_vic = 17;
 +      else if (found->xres == 1280 && found->yres == 720 && found->refresh == 60)
 +              hdmi->preprogrammed_vic = 4;
 +      else if (found->xres == 1920 && found->yres == 1080 && found->refresh == 24)
 +              hdmi->preprogrammed_vic = 32;
 +      else if (found->xres == 1920 && found->yres == 1080 && found->refresh == 50)
 +              hdmi->preprogrammed_vic = 31;
 +      else if (found->xres == 1920 && found->yres == 1080 && found->refresh == 60)
 +              hdmi->preprogrammed_vic = 16;
        else
 -              hdmi->preprogrammed_mode = false;
 +              hdmi->preprogrammed_vic = 0;
 +
 +      dev_dbg(hdmi->dev, "Using %s %s mode %ux%u@%uHz (%luHz), clock error %luHz\n",
 +              modelist ? "default" : "EDID", hdmi->preprogrammed_vic ? "VIC" : "external",
 +              found->xres, found->yres, found->refresh,
 +              PICOS2KHZ(found->pixclock) * 1000, found_rate_error);
  
        fb_videomode_to_var(&hdmi->var, found);
        sh_hdmi_external_video_param(hdmi);
@@@ -940,34 -872,32 +941,34 @@@ static irqreturn_t sh_hdmi_hotplug(int 
                /* Check, if hot plug & MSENS pin status are both high */
                if ((msens & 0xC0) == 0xC0) {
                        /* Display plug in */
 +                      hdmi->edid_segment_nr = 0;
 +                      hdmi->edid_block_addr = 0;
 +                      hdmi->edid_blocks = 0;
                        hdmi->hp_state = HDMI_HOTPLUG_CONNECTED;
  
                        /* Set EDID word address  */
                        hdmi_write(hdmi, 0x00, HDMI_EDID_WORD_ADDRESS);
 -                      /* Set EDID segment pointer */
 -                      hdmi_write(hdmi, 0x00, HDMI_EDID_SEGMENT_POINTER);
                        /* Enable EDID interrupt */
                        hdmi_write(hdmi, 0xC6, HDMI_INTERRUPT_MASK_1);
 +                      /* Set EDID segment pointer - starts reading EDID */
 +                      hdmi_write(hdmi, 0x00, HDMI_EDID_SEGMENT_POINTER);
                } else if (!(status1 & 0x80)) {
                        /* Display unplug, beware multiple interrupts */
 -                      if (hdmi->hp_state != HDMI_HOTPLUG_DISCONNECTED)
 +                      if (hdmi->hp_state != HDMI_HOTPLUG_DISCONNECTED) {
 +                              hdmi->hp_state = HDMI_HOTPLUG_DISCONNECTED;
                                schedule_delayed_work(&hdmi->edid_work, 0);
 -
 -                      hdmi->hp_state = HDMI_HOTPLUG_DISCONNECTED;
 +                      }
                        /* display_off will switch back to mode_a */
                }
        } else if (status1 & 2) {
                /* EDID error interrupt: retry */
                /* Set EDID word address  */
 -              hdmi_write(hdmi, 0x00, HDMI_EDID_WORD_ADDRESS);
 +              hdmi_write(hdmi, hdmi->edid_block_addr, HDMI_EDID_WORD_ADDRESS);
                /* Set EDID segment pointer */
 -              hdmi_write(hdmi, 0x00, HDMI_EDID_SEGMENT_POINTER);
 +              hdmi_write(hdmi, hdmi->edid_segment_nr, HDMI_EDID_SEGMENT_POINTER);
        } else if (status1 & 4) {
                /* Disable EDID interrupt */
                hdmi_write(hdmi, 0xC0, HDMI_INTERRUPT_MASK_1);
 -              hdmi->hp_state = HDMI_HOTPLUG_EDID_DONE;
                schedule_delayed_work(&hdmi->edid_work, msecs_to_jiffies(10));
        }
  
@@@ -1050,37 -980,39 +1051,37 @@@ static bool sh_hdmi_must_reconfigure(st
  
  /**
   * sh_hdmi_clk_configure() - set HDMI clock frequency and enable the clock
 - * @hdmi:     driver context
 - * @pixclock: pixel clock period in picoseconds
 - * return:    configured positive rate if successful
 - *            0 if couldn't set the rate, but managed to enable the clock
 - *            negative error, if couldn't enable the clock
 + * @hdmi:             driver context
 + * @hdmi_rate:                HDMI clock frequency in Hz
 + * @parent_rate:      if != 0 - set parent clock rate for optimal precision
 + * return:            configured positive rate if successful
 + *                    0 if couldn't set the rate, but managed to enable the
 + *                    clock, negative error, if couldn't enable the clock
   */
 -static long sh_hdmi_clk_configure(struct sh_hdmi *hdmi, unsigned long pixclock)
 +static long sh_hdmi_clk_configure(struct sh_hdmi *hdmi, unsigned long hdmi_rate,
 +                                unsigned long parent_rate)
  {
 -      long rate;
        int ret;
  
 -      rate = PICOS2KHZ(pixclock) * 1000;
 -      rate = clk_round_rate(hdmi->hdmi_clk, rate);
 -      if (rate > 0) {
 -              ret = clk_set_rate(hdmi->hdmi_clk, rate);
 +      if (parent_rate && clk_get_parent(hdmi->hdmi_clk)) {
 +              ret = clk_set_rate(clk_get_parent(hdmi->hdmi_clk), parent_rate);
                if (ret < 0) {
 -                      dev_warn(hdmi->dev, "Cannot set rate %ld: %d\n", rate, ret);
 -                      rate = 0;
 +                      dev_warn(hdmi->dev, "Cannot set parent rate %ld: %d\n", parent_rate, ret);
 +                      hdmi_rate = clk_round_rate(hdmi->hdmi_clk, hdmi_rate);
                } else {
 -                      dev_dbg(hdmi->dev, "HDMI set frequency %lu\n", rate);
 +                      dev_dbg(hdmi->dev, "HDMI set parent frequency %lu\n", parent_rate);
                }
 -      } else {
 -              rate = 0;
 -              dev_warn(hdmi->dev, "Cannot get suitable rate: %ld\n", rate);
        }
  
 -      ret = clk_enable(hdmi->hdmi_clk);
 +      ret = clk_set_rate(hdmi->hdmi_clk, hdmi_rate);
        if (ret < 0) {
 -              dev_err(hdmi->dev, "Cannot enable clock: %d\n", ret);
 -              return ret;
 +              dev_warn(hdmi->dev, "Cannot set rate %ld: %d\n", hdmi_rate, ret);
 +              hdmi_rate = 0;
 +      } else {
 +              dev_dbg(hdmi->dev, "HDMI set frequency %lu\n", hdmi_rate);
        }
  
 -      return rate;
 +      return hdmi_rate;
  }
  
  /* Hotplug interrupt occurred, read EDID */
@@@ -1099,20 -1031,17 +1100,20 @@@ static void sh_hdmi_edid_work_fn(struc
  
        mutex_lock(&hdmi->mutex);
  
 -      if (hdmi->hp_state == HDMI_HOTPLUG_EDID_DONE) {
 +      if (hdmi->hp_state == HDMI_HOTPLUG_CONNECTED) {
 +              unsigned long parent_rate = 0, hdmi_rate;
 +
                /* A device has been plugged in */
                pm_runtime_get_sync(hdmi->dev);
  
 -              ret = sh_hdmi_read_edid(hdmi);
 +              ret = sh_hdmi_read_edid(hdmi, &hdmi_rate, &parent_rate);
                if (ret < 0)
                        goto out;
  
 +              hdmi->hp_state = HDMI_HOTPLUG_EDID_DONE;
 +
                /* Reconfigure the clock */
 -              clk_disable(hdmi->hdmi_clk);
 -              ret = sh_hdmi_clk_configure(hdmi, hdmi->var.pixclock);
 +              ret = sh_hdmi_clk_configure(hdmi, hdmi_rate, parent_rate);
                if (ret < 0)
                        goto out;
  
        }
  
  out:
 -      if (ret < 0)
 +      if (ret < 0 && ret != -EAGAIN)
                hdmi->hp_state = HDMI_HOTPLUG_DISCONNECTED;
        mutex_unlock(&hdmi->mutex);
  
@@@ -1248,22 -1177,13 +1249,22 @@@ static int __init sh_hdmi_probe(struct 
                goto egetclk;
        }
  
 -      /* Some arbitrary relaxed pixclock just to get things started */
 -      rate = sh_hdmi_clk_configure(hdmi, 37037);
 +      /* An arbitrary relaxed pixclock just to get things started: from standard 480p */
 +      rate = clk_round_rate(hdmi->hdmi_clk, PICOS2KHZ(37037));
 +      if (rate > 0)
 +              rate = sh_hdmi_clk_configure(hdmi, rate, 0);
 +
        if (rate < 0) {
                ret = rate;
                goto erate;
        }
  
 +      ret = clk_enable(hdmi->hdmi_clk);
 +      if (ret < 0) {
 +              dev_err(hdmi->dev, "Cannot enable clock: %d\n", ret);
 +              goto erate;
 +      }
 +
        dev_dbg(&pdev->dev, "Enabled HDMI clock at %luHz\n", rate);
  
        if (!request_mem_region(res->start, resource_size(res), dev_name(&pdev->dev))) {
  
        platform_set_drvdata(pdev, hdmi);
  
 -      /* Product and revision IDs are 0 in sh-mobile version */
 -      dev_info(&pdev->dev, "Detected HDMI controller 0x%x:0x%x\n",
 -               hdmi_read(hdmi, HDMI_PRODUCT_ID), hdmi_read(hdmi, HDMI_REVISION_ID));
 -
        /* Set up LCDC callbacks */
        board_cfg = &pdata->lcd_chan->board_cfg;
        board_cfg->owner = THIS_MODULE;
        pm_runtime_enable(&pdev->dev);
        pm_runtime_resume(&pdev->dev);
  
 +      /* Product and revision IDs are 0 in sh-mobile version */
 +      dev_info(&pdev->dev, "Detected HDMI controller 0x%x:0x%x\n",
 +               hdmi_read(hdmi, HDMI_PRODUCT_ID), hdmi_read(hdmi, HDMI_REVISION_ID));
 +
        ret = request_irq(irq, sh_hdmi_hotplug, 0,
                          dev_name(&pdev->dev), hdmi);
        if (ret < 0) {
diff --combined sound/core/pcm_native.c
@@@ -422,6 -422,9 +422,9 @@@ static int snd_pcm_hw_params(struct snd
        runtime->info = params->info;
        runtime->rate_num = params->rate_num;
        runtime->rate_den = params->rate_den;
+       runtime->no_period_wakeup =
+                       (params->info & SNDRV_PCM_INFO_NO_PERIOD_WAKEUP) &&
+                       (params->flags & SNDRV_PCM_HW_PARAMS_NO_PERIOD_WAKEUP);
  
        bits = snd_pcm_format_physical_width(runtime->format);
        runtime->sample_bits = bits;
@@@ -984,7 -987,7 +987,7 @@@ static int snd_pcm_do_pause(struct snd_
        if (push)
                snd_pcm_update_hw_ptr(substream);
        /* The jiffies check in snd_pcm_update_hw_ptr*() is done by
 -       * a delta betwen the current jiffies, this gives a large enough
 +       * a delta between the current jiffies, this gives a large enough
         * delta, effectively to skip the check once.
         */
        substream->runtime->hw_ptr_jiffies = jiffies - HZ * 1000;
@@@ -20,7 -20,6 +20,6 @@@
  #include <sound/pcm.h>
  #include <sound/pcm_params.h>
  #include <sound/soc.h>
- #include <sound/soc-dapm.h>
  #include <sound/initval.h>
  #include <sound/tlv.h>
  #include <linux/slab.h>
@@@ -1229,15 -1228,17 +1228,17 @@@ static const struct snd_soc_dapm_route 
  
  static int max98088_add_widgets(struct snd_soc_codec *codec)
  {
-        snd_soc_dapm_new_controls(codec, max98088_dapm_widgets,
+        struct snd_soc_dapm_context *dapm = &codec->dapm;
+        snd_soc_dapm_new_controls(dapm, max98088_dapm_widgets,
                                   ARRAY_SIZE(max98088_dapm_widgets));
  
-        snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map));
+        snd_soc_dapm_add_routes(dapm, audio_map, ARRAY_SIZE(audio_map));
  
         snd_soc_add_controls(codec, max98088_snd_controls,
                              ARRAY_SIZE(max98088_snd_controls));
  
-        snd_soc_dapm_new_widgets(codec);
+        snd_soc_dapm_new_widgets(dapm);
         return 0;
  }
  
@@@ -1622,7 -1623,7 +1623,7 @@@ static int max98088_set_bias_level(stru
                 break;
  
         case SND_SOC_BIAS_STANDBY:
-                if (codec->bias_level == SND_SOC_BIAS_OFF)
+                if (codec->dapm.bias_level == SND_SOC_BIAS_OFF)
                         max98088_sync_cache(codec);
  
                 snd_soc_update_bits(codec, M98088_REG_4C_PWR_EN_IN,
                 codec->cache_sync = 1;
                 break;
         }
-        codec->bias_level = level;
+        codec->dapm.bias_level = level;
         return 0;
  }
  
@@@ -1957,7 -1958,7 +1958,7 @@@ static int max98088_probe(struct snd_so
                 return ret;
         }
  
 -       /* initalize private data */
 +       /* initialize private data */
  
         max98088->sysclk = (unsigned)-1;
         max98088->eq_textcnt = 0;
@@@ -18,7 -18,7 +18,7 @@@
  
  #include <sound/soc.h>
  
- #include "s3c-dma.h"
+ #include "dma.h"
  #include "spdif.h"
  
  /* Audio clock settings are belonged to board specific part. Every
@@@ -28,7 -28,7 +28,7 @@@
  static int set_audio_clock_heirachy(struct platform_device *pdev)
  {
        struct clk *fout_epll, *mout_epll, *sclk_audio0, *sclk_spdif;
-       int ret;
+       int ret = 0;
  
        fout_epll = clk_get(NULL, "fout_epll");
        if (IS_ERR(fout_epll)) {
@@@ -61,7 -61,7 +61,7 @@@
                goto out3;
        }
  
 -      /* Set audio clock heirachy for S/PDIF */
 +      /* Set audio clock hierarchy for S/PDIF */
        clk_set_parent(mout_epll, fout_epll);
        clk_set_parent(sclk_audio0, mout_epll);
        clk_set_parent(sclk_spdif, sclk_audio0);
@@@ -79,7 -79,7 +79,7 @@@ out1
  
  /* We should haved to set clock directly on this part because of clock
   * scheme of Samsudng SoCs did not support to set rates from abstrct
 - * clock of it's heirachy.
 + * clock of it's hierarchy.
   */
  static int set_audio_clock_rate(unsigned long epll_rate,
                                unsigned long audio_rate)
@@@ -152,12 -152,10 +152,10 @@@ static struct snd_soc_ops smdk_spdif_op
        .hw_params = smdk_hw_params,
  };
  
- static struct snd_soc_card smdk;
  static struct snd_soc_dai_link smdk_dai = {
        .name = "S/PDIF",
        .stream_name = "S/PDIF PCM Playback",
-       .platform_name = "s3c24xx-pcm-audio",
+       .platform_name = "samsung-audio",
        .cpu_dai_name = "samsung-spdif",
        .codec_dai_name = "dit-hifi",
        .codec_name = "spdif-dit",
@@@ -183,7 -181,7 +181,7 @@@ static int __init smdk_init(void
  
        ret = platform_device_add(smdk_snd_spdif_dit_device);
        if (ret)
-               goto err2;
+               goto err1;
  
        smdk_snd_spdif_device = platform_device_alloc("soc-audio", -1);
        if (!smdk_snd_spdif_device) {
  
        ret = platform_device_add(smdk_snd_spdif_device);
        if (ret)
-               goto err1;
+               goto err3;
  
 -      /* Set audio clock heirachy manually */
 +      /* Set audio clock hierarchy manually */
        ret = set_audio_clock_heirachy(smdk_snd_spdif_device);
        if (ret)
-               goto err1;
+               goto err4;
  
        return 0;
- err1:
+ err4:
+       platform_device_del(smdk_snd_spdif_device);
+ err3:
        platform_device_put(smdk_snd_spdif_device);
  err2:
+       platform_device_del(smdk_snd_spdif_dit_device);
+ err1:
        platform_device_put(smdk_snd_spdif_dit_device);
        return ret;
  }
  static void __exit smdk_exit(void)
  {
        platform_device_unregister(smdk_snd_spdif_device);
+       platform_device_unregister(smdk_snd_spdif_dit_device);
  }
  
  module_init(smdk_init);