Merge branch 'for-linus' of master.kernel.org:/home/rmk/linux-2.6-arm
authorLinus Torvalds <torvalds@linux-foundation.org>
Mon, 14 Jul 2008 23:06:58 +0000 (16:06 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Mon, 14 Jul 2008 23:06:58 +0000 (16:06 -0700)
* 'for-linus' of master.kernel.org:/home/rmk/linux-2.6-arm: (241 commits)
  [ARM] 5171/1: ep93xx: fix compilation of modules using clocks
  [ARM] 5133/2: at91sam9g20 defconfig file
  [ARM] 5130/4: Support for the at91sam9g20
  [ARM] 5160/1: IOP3XX: gpio/gpiolib support
  [ARM] at91: Fix NAND FLASH timings for at91sam9x evaluation kits.
  [ARM] 5084/1: zylonite: Register AC97 device
  [ARM] 5085/2: PXA: Move AC97 over to the new central device declaration model
  [ARM] 5120/1: pxa: correct platform driver names for PXA25x and PXA27x UDC drivers
  [ARM] 5147/1: pxaficp_ir: drop pxa_gpio_mode calls, as pin setting
  [ARM] 5145/1: PXA2xx: provide api to control IrDA pins state
  [ARM] 5144/1: pxaficp_ir: cleanup includes
  [ARM] pxa: remove pxa_set_cken()
  [ARM] pxa: allow clk aliases
  [ARM] Feroceon: don't disable BPU on boot
  [ARM] Orion: LED support for HP mv2120
  [ARM] Orion: add RD88F5181L-FXO support
  [ARM] Orion: add RD88F5181L-GE support
  [ARM] Orion: add Netgear WNR854T support
  [ARM] s3c2410_defconfig: update for current build
  [ARM] Acer n30: Minor style and indentation fixes.
  ...

1  2 
Documentation/kernel-parameters.txt
arch/arm/Kconfig
drivers/usb/host/ohci-omap.c
drivers/usb/host/ohci-pxa27x.c
kernel/hrtimer.c
kernel/sysctl.c
kernel/timer.c
sound/soc/at91/at91-ssc.c
sound/soc/pxa/pxa2xx-i2s.c

@@@ -271,17 -271,6 +271,17 @@@ and is between 256 and 4096 characters
        aic79xx=        [HW,SCSI]
                        See Documentation/scsi/aic79xx.txt.
  
 +      amd_iommu=      [HW,X86-84]
 +                      Pass parameters to the AMD IOMMU driver in the system.
 +                      Possible values are:
 +                      isolate - enable device isolation (each device, as far
 +                                as possible, will get its own protection
 +                                domain)
 +      amd_iommu_size= [HW,X86-64]
 +                      Define the size of the aperture for the AMD IOMMU
 +                      driver. Possible values are:
 +                      '32M', '64M' (default), '128M', '256M', '512M', '1G'
 +
        amijoy.map=     [HW,JOY] Amiga joystick support
                        Map of devices attached to JOY0DAT and JOY1DAT
                        Format: <a>,<b>
                        when initialising the APIC and IO-APIC components.
  
        apm=            [APM] Advanced Power Management
 -                      See header of arch/i386/kernel/apm.c.
 +                      See header of arch/x86/kernel/apm_32.c.
  
        arcrimi=        [HW,NET] ARCnet - "RIM I" (entirely mem-mapped) cards
                        Format: <io>,<irq>,<nodeID>
                        See drivers/char/README.epca and
                        Documentation/digiepca.txt.
  
 +      disable_mtrr_cleanup [X86]
 +      enable_mtrr_cleanup [X86]
 +                      The kernel tries to adjust MTRR layout from continuous
 +                      to discrete, to make X server driver able to add WB
 +                      entry later. This parameter enables/disables that.
 +
 +      mtrr_chunk_size=nn[KMG] [X86]
 +                      used for mtrr cleanup. It is largest continous chunk
 +                      that could hold holes aka. UC entries.
 +
 +      mtrr_gran_size=nn[KMG] [X86]
 +                      Used for mtrr cleanup. It is granularity of mtrr block.
 +                      Default is 1.
 +                      Large value could prevent small alignment from
 +                      using up MTRRs.
 +
 +      mtrr_spare_reg_nr=n [X86]
 +                      Format: <integer>
 +                      Range: 0,7 : spare reg number
 +                      Default : 1
 +                      Used for mtrr cleanup. It is spare mtrr entries number.
 +                      Set to 2 or more if your graphical card needs more.
 +
        disable_mtrr_trim [X86, Intel and AMD only]
                        By default the kernel will trim any uncacheable
                        memory out of your available memory pool based on
  
        elanfreq=       [X86-32]
                        See comment before function elanfreq_setup() in
 -                      arch/i386/kernel/cpu/cpufreq/elanfreq.c.
 +                      arch/x86/kernel/cpu/cpufreq/elanfreq.c.
  
        elevator=       [IOSCHED]
                        Format: {"anticipatory" | "cfq" | "deadline" | "noop"}
        mtdparts=       [MTD]
                        See drivers/mtd/cmdlinepart.c.
  
+       mtdset=         [ARM]
+                       ARM/S3C2412 JIVE boot control
+                       See arch/arm/mach-s3c2412/mach-jive.c
        mtouchusb.raw_coordinates=
                        [HW] Make the MicroTouch USB driver use raw coordinates
                        ('y', default) or cooked coordinates ('n')
                        Format: <reboot_mode>[,<reboot_mode2>[,...]]
                        See arch/*/kernel/reboot.c or arch/*/kernel/process.c                   
  
 +      relax_domain_level=
 +                      [KNL, SMP] Set scheduler's default relax_domain_level.
 +                      See Documentation/cpusets.txt.
 +
        reserve=        [KNL,BUGS] Force the kernel to ignore some iomem area
  
        reservetop=     [X86-32]
        usbhid.mousepoll=
                        [USBHID] The interval which mice are to be polled at.
  
 +      add_efi_memmap  [EFI; x86-32,X86-64] Include EFI memory map in
 +                      kernel's map of available physical RAM.
 +
        vdso=           [X86-32,SH,x86-64]
                        vdso=2: enable compat VDSO (default with COMPAT_VDSO)
                        vdso=1: enable VDSO (default)
diff --combined arch/arm/Kconfig
@@@ -14,8 -14,6 +14,8 @@@ config AR
        select HAVE_OPROFILE
        select HAVE_KPROBES if (!XIP_KERNEL)
        select HAVE_KRETPROBES if (HAVE_KPROBES)
 +      select HAVE_FTRACE if (!XIP_KERNEL)
 +      select HAVE_DYNAMIC_FTRACE if (HAVE_FTRACE)
        help
          The ARM series is a line of low-power-consumption RISC chip designs
          licensed by ARM Ltd and targeted at embedded applications and
@@@ -24,6 -22,9 +24,9 @@@
          Europe.  There is an ARM Linux project with a web page at
          <http://www.arm.linux.org.uk/>.
  
+ config HAVE_PWM
+       bool
  config SYS_SUPPORTS_APM_EMULATION
        bool
  
@@@ -86,6 -87,11 +89,11 @@@ config STACKTRACE_SUPPOR
        bool
        default y
  
+ config HAVE_LATENCYTOP_SUPPORT
+       bool
+       depends on !SMP
+       default y
  config LOCKDEP_SUPPORT
        bool
        default y
@@@ -149,6 -155,10 +157,10 @@@ config FI
  config ARCH_MTD_XIP
        bool
  
+ config GENERIC_HARDIRQS_NO__DO_IRQ
+       bool
+       def_bool y
  if OPROFILE
  
  config OPROFILE_ARMV6
@@@ -234,13 -244,6 +246,6 @@@ config ARCH_CLPS711
        help
          Support for Cirrus Logic 711x/721x based boards.
  
- config ARCH_CO285
-       bool "Co-EBSA285"
-       select FOOTBRIDGE
-       select FOOTBRIDGE_ADDIN
-       help
-         Support for Intel's EBSA285 companion chip.
  config ARCH_EBSA110
        bool "EBSA-110"
        select ISA
@@@ -301,6 -304,8 +306,8 @@@ config ARCH_IOP32
        depends on MMU
        select PLAT_IOP
        select PCI
+       select GENERIC_GPIO
+       select HAVE_GPIO_LIB
        help
          Support for Intel's 80219 and IOP32X (XScale) family of
          processors.
@@@ -310,6 -315,8 +317,8 @@@ config ARCH_IOP33
        depends on MMU
        select PLAT_IOP
        select PCI
+       select GENERIC_GPIO
+       select HAVE_GPIO_LIB
        help
          Support for Intel's IOP33X (XScale) family of processors.
  
@@@ -349,6 -356,16 +358,16 @@@ config ARCH_L720
          If you have any questions or comments about the Linux kernel port
          to this board, send e-mail to <sjhill@cotw.com>.
  
+ config ARCH_KIRKWOOD
+       bool "Marvell Kirkwood"
+       select PCI
+       select GENERIC_TIME
+       select GENERIC_CLOCKEVENTS
+       select PLAT_ORION
+       help
+         Support for the following Marvell Kirkwood series SoCs:
+         88F6180, 88F6192 and 88F6281.
  config ARCH_KS8695
        bool "Micrel/Kendin KS8695"
        select GENERIC_GPIO
@@@ -367,9 -384,31 +386,31 @@@ config ARCH_NS9XX
  
          <http://www.digi.com/products/microprocessors/index.jsp>
  
+ config ARCH_LOKI
+       bool "Marvell Loki (88RC8480)"
+       select GENERIC_TIME
+       select GENERIC_CLOCKEVENTS
+       select PLAT_ORION
+       help
+         Support for the Marvell Loki (88RC8480) SoC.
+ config ARCH_MV78XX0
+       bool "Marvell MV78xx0"
+       select PCI
+       select GENERIC_TIME
+       select GENERIC_CLOCKEVENTS
+       select PLAT_ORION
+       help
+         Support for the following Marvell MV78xx0 series SoCs:
+         MV781x0, MV782x0.
  config ARCH_MXC
        bool "Freescale MXC/iMX-based"
+       select GENERIC_TIME
+       select GENERIC_CLOCKEVENTS
        select ARCH_MTD_XIP
+       select GENERIC_GPIO
+       select HAVE_GPIO_LIB
        help
          Support for Freescale MXC/iMX-based family of processors
  
@@@ -383,7 -422,8 +424,8 @@@ config ARCH_ORION5
        select PLAT_ORION
        help
          Support for the following Marvell Orion 5x series SoCs:
-         Orion-1 (5181), Orion-NAS (5182), Orion-2 (5281.)
+         Orion-1 (5181), Orion-VoIP (5181L), Orion-NAS (5182),
+         Orion-2 (5281).
  
  config ARCH_PNX4008
        bool "Philips Nexperia PNX4008 Mobile"
@@@ -408,6 -448,7 +450,7 @@@ config ARCH_RP
        select FIQ
        select TIMER_ACORN
        select ARCH_MAY_HAVE_PC_FDC
+       select HAVE_PATA_PLATFORM
        select ISA_DMA_API
        select NO_IOPORT
        help
@@@ -504,6 -545,10 +547,10 @@@ source "arch/arm/mach-ixp2000/Kconfig
  
  source "arch/arm/mach-ixp23xx/Kconfig"
  
+ source "arch/arm/mach-loki/Kconfig"
+ source "arch/arm/mach-mv78xx0/Kconfig"
  source "arch/arm/mach-pxa/Kconfig"
  
  source "arch/arm/mach-sa1100/Kconfig"
@@@ -516,6 -561,8 +563,8 @@@ source "arch/arm/mach-omap2/Kconfig
  
  source "arch/arm/mach-orion5x/Kconfig"
  
+ source "arch/arm/mach-kirkwood/Kconfig"
  source "arch/arm/plat-s3c24xx/Kconfig"
  source "arch/arm/plat-s3c/Kconfig"
  
@@@ -705,27 -752,6 +754,6 @@@ config PREEMP
          Say Y here if you are building a kernel for a desktop, embedded
          or real-time system.  Say N if you are unsure.
  
- config NO_IDLE_HZ
-       bool "Dynamic tick timer"
-       depends on !GENERIC_CLOCKEVENTS
-       help
-         Select this option if you want to disable continuous timer ticks
-         and have them programmed to occur as required. This option saves
-         power as the system can remain in idle state for longer.
-         By default dynamic tick is disabled during the boot, and can be
-         manually enabled with:
-           echo 1 > /sys/devices/system/timer/timer0/dyn_tick
-         Alternatively, if you want dynamic tick automatically enabled
-         during boot, pass "dyntick=enable" via the kernel command string.
-         Please note that dynamic tick may affect the accuracy of
-         timekeeping on some platforms depending on the implementation.
-         Currently at least OMAP, PXA2xx and SA11x0 platforms are known
-         to have accurate timekeeping with dynamic tick.
  config HZ
        int
        default 128 if ARCH_L7200
@@@ -791,7 -817,7 +819,7 @@@ source "mm/Kconfig
  
  config LEDS
        bool "Timer and CPU usage LEDs"
-       depends on ARCH_CDB89712 || ARCH_CO285 || ARCH_EBSA110 || \
+       depends on ARCH_CDB89712 || ARCH_EBSA110 || \
                   ARCH_EBSA285 || ARCH_IMX || ARCH_INTEGRATOR || \
                   ARCH_LUBBOCK || MACH_MAINSTONE || ARCH_NETWINDER || \
                   ARCH_OMAP || ARCH_P720T || ARCH_PXA_IDP || \
@@@ -169,13 -169,16 +169,16 @@@ static void start_hnp(struct ohci_hcd *
  {
        const unsigned  port = ohci_to_hcd(ohci)->self.otg_port - 1;
        unsigned long   flags;
+       u32 l;
  
        otg_start_hnp(ohci->transceiver);
  
        local_irq_save(flags);
        ohci->transceiver->state = OTG_STATE_A_SUSPEND;
        writel (RH_PS_PSS, &ohci->regs->roothub.portstatus [port]);
-       OTG_CTRL_REG &= ~OTG_A_BUSREQ;
+       l = omap_readl(OTG_CTRL);
+       l &= ~OTG_A_BUSREQ;
+       omap_writel(l, OTG_CTRL);
        local_irq_restore(flags);
  }
  
@@@ -466,7 -469,6 +469,7 @@@ static const struct hc_driver ohci_omap
         */
        .hub_status_data =      ohci_hub_status_data,
        .hub_control =          ohci_hub_control,
 +      .hub_irq_enable =       ohci_rhsc_enable,
  #ifdef        CONFIG_PM
        .bus_suspend =          ohci_bus_suspend,
        .bus_resume =           ohci_bus_resume,
@@@ -27,6 -27,7 +27,7 @@@
  #include <asm/mach-types.h>
  #include <asm/hardware.h>
  #include <asm/arch/pxa-regs.h>
+ #include <asm/arch/pxa2xx-regs.h> /* FIXME: for PSSR */
  #include <asm/arch/ohci.h>
  
  #define PXA_UHC_MAX_PORTNUM    3
@@@ -104,7 -105,7 +105,7 @@@ static int pxa27x_start_hc(struct devic
        UHCHIE = (UHCHIE_UPRIE | UHCHIE_RWIE);
  
        /* Clear any OTG Pin Hold */
-       if (PSSR & PSSR_OTGPH)
+       if (cpu_is_pxa27x() && (PSSR & PSSR_OTGPH))
                PSSR |= PSSR_OTGPH;
  
        return 0;
@@@ -298,7 -299,6 +299,7 @@@ static const struct hc_driver ohci_pxa2
         */
        .hub_status_data =      ohci_hub_status_data,
        .hub_control =          ohci_hub_control,
 +      .hub_irq_enable =       ohci_rhsc_enable,
  #ifdef  CONFIG_PM
        .bus_suspend =          ohci_bus_suspend,
        .bus_resume =           ohci_bus_resume,
diff --combined kernel/hrtimer.c
@@@ -1086,7 -1086,7 +1086,7 @@@ ktime_t hrtimer_get_remaining(const str
  }
  EXPORT_SYMBOL_GPL(hrtimer_get_remaining);
  
- #if defined(CONFIG_NO_IDLE_HZ) || defined(CONFIG_NO_HZ)
+ #ifdef CONFIG_NO_HZ
  /**
   * hrtimer_get_next_event - get the time until next expiry event
   *
@@@ -1677,7 -1677,7 +1677,7 @@@ void __init hrtimers_init(void
                          (void *)(long)smp_processor_id());
        register_cpu_notifier(&hrtimers_nb);
  #ifdef CONFIG_HIGH_RES_TIMERS
 -      open_softirq(HRTIMER_SOFTIRQ, run_hrtimer_softirq, NULL);
 +      open_softirq(HRTIMER_SOFTIRQ, run_hrtimer_softirq);
  #endif
  }
  
diff --combined kernel/sysctl.c
@@@ -46,7 -46,6 +46,7 @@@
  #include <linux/nfs_fs.h>
  #include <linux/acpi.h>
  #include <linux/reboot.h>
 +#include <linux/ftrace.h>
  
  #include <asm/uaccess.h>
  #include <asm/processor.h>
@@@ -133,8 -132,6 +133,6 @@@ extern int sysctl_userprocess_debug
  extern int spin_retry;
  #endif
  
- extern int sysctl_hz_timer;
  #ifdef CONFIG_BSD_PROCESS_ACCT
  extern int acct_parm[];
  #endif
@@@ -265,14 -262,6 +263,14 @@@ static struct ctl_table kern_table[] = 
                .extra1         = &min_wakeup_granularity_ns,
                .extra2         = &max_wakeup_granularity_ns,
        },
 +      {
 +              .ctl_name       = CTL_UNNUMBERED,
 +              .procname       = "sched_shares_ratelimit",
 +              .data           = &sysctl_sched_shares_ratelimit,
 +              .maxlen         = sizeof(unsigned int),
 +              .mode           = 0644,
 +              .proc_handler   = &proc_dointvec,
 +      },
        {
                .ctl_name       = CTL_UNNUMBERED,
                .procname       = "sched_child_runs_first",
                .mode           = 0644,
                .proc_handler   = &proc_dointvec,
        },
 +#ifdef CONFIG_FTRACE
 +      {
 +              .ctl_name       = CTL_UNNUMBERED,
 +              .procname       = "ftrace_enabled",
 +              .data           = &ftrace_enabled,
 +              .maxlen         = sizeof(int),
 +              .mode           = 0644,
 +              .proc_handler   = &ftrace_enable_sysctl,
 +      },
 +#endif
  #ifdef CONFIG_KMOD
        {
                .ctl_name       = KERN_MODPROBE,
                .mode           = 0644,
                .proc_handler   = &proc_dointvec,
        },
- #endif
- #ifdef CONFIG_NO_IDLE_HZ
-       {
-               .ctl_name       = KERN_HZ_TIMER,
-               .procname       = "hz_timer",
-               .data           = &sysctl_hz_timer,
-               .maxlen         = sizeof(int),
-               .mode           = 0644,
-               .proc_handler   = &proc_dointvec,
-       },
  #endif
        {
                .ctl_name       = KERN_S390_USER_DEBUG_LOGGING,
diff --combined kernel/timer.c
@@@ -812,7 -812,7 +812,7 @@@ static inline void __run_timers(struct 
        spin_unlock_irq(&base->lock);
  }
  
- #if defined(CONFIG_NO_IDLE_HZ) || defined(CONFIG_NO_HZ)
+ #ifdef CONFIG_NO_HZ
  /*
   * Find out when the next timer event is due to happen. This
   * is used on S/390 to stop all activity when a cpus is idle.
@@@ -947,14 -947,6 +947,6 @@@ unsigned long get_next_timer_interrupt(
  
        return cmp_next_hrtimer_event(now, expires);
  }
- #ifdef CONFIG_NO_IDLE_HZ
- unsigned long next_timer_interrupt(void)
- {
-       return get_next_timer_interrupt(jiffies);
- }
- #endif
  #endif
  
  #ifndef CONFIG_VIRT_CPU_ACCOUNTING
@@@ -1502,7 -1494,7 +1494,7 @@@ void __init init_timers(void
  
        BUG_ON(err == NOTIFY_BAD);
        register_cpu_notifier(&timers_nb);
 -      open_softirq(TIMER_SOFTIRQ, run_timer_softirq, NULL);
 +      open_softirq(TIMER_SOFTIRQ, run_timer_softirq);
  }
  
  /**
@@@ -41,7 -41,7 +41,7 @@@
  #define       DBG(x...)
  #endif
  
- #if defined(CONFIG_ARCH_AT91SAM9260)
+ #if defined(CONFIG_ARCH_AT91SAM9260) || defined(CONFIG_ARCH_AT91SAM9G20)
  #define NUM_SSC_DEVICES               1
  #else
  #define NUM_SSC_DEVICES               3
@@@ -281,7 -281,7 +281,7 @@@ static void at91_ssc_shutdown(struct sn
  /*
   * Record the SSC system clock rate.
   */
 -static int at91_ssc_set_dai_sysclk(struct snd_soc_cpu_dai *cpu_dai,
 +static int at91_ssc_set_dai_sysclk(struct snd_soc_dai *cpu_dai,
                int clk_id, unsigned int freq, int dir)
  {
        /*
  /*
   * Record the DAI format for use in hw_params().
   */
 -static int at91_ssc_set_dai_fmt(struct snd_soc_cpu_dai *cpu_dai,
 +static int at91_ssc_set_dai_fmt(struct snd_soc_dai *cpu_dai,
                unsigned int fmt)
  {
        struct at91_ssc_info *ssc_p = &ssc_info[cpu_dai->id];
  /*
   * Record SSC clock dividers for use in hw_params().
   */
 -static int at91_ssc_set_dai_clkdiv(struct snd_soc_cpu_dai *cpu_dai,
 +static int at91_ssc_set_dai_clkdiv(struct snd_soc_dai *cpu_dai,
        int div_id, int div)
  {
        struct at91_ssc_info *ssc_p = &ssc_info[cpu_dai->id];
@@@ -634,7 -634,7 +634,7 @@@ static int at91_ssc_prepare(struct snd_
  
  #ifdef CONFIG_PM
  static int at91_ssc_suspend(struct platform_device *pdev,
 -      struct snd_soc_cpu_dai *cpu_dai)
 +      struct snd_soc_dai *cpu_dai)
  {
        struct at91_ssc_info *ssc_p;
  
  }
  
  static int at91_ssc_resume(struct platform_device *pdev,
 -      struct snd_soc_cpu_dai *cpu_dai)
 +      struct snd_soc_dai *cpu_dai)
  {
        struct at91_ssc_info *ssc_p;
  
  #define AT91_SSC_FORMATS (SNDRV_PCM_FMTBIT_S8     | SNDRV_PCM_FMTBIT_S16_LE |\
                          SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
  
 -struct snd_soc_cpu_dai at91_ssc_dai[NUM_SSC_DEVICES] = {
 +struct snd_soc_dai at91_ssc_dai[NUM_SSC_DEVICES] = {
        {       .name = "at91-ssc0",
                .id = 0,
                .type = SND_SOC_DAI_PCM,
@@@ -9,12 -9,16 +9,13 @@@
   *  under  the terms of  the GNU General  Public License as published by the
   *  Free Software Foundation;  either version 2 of the  License, or (at your
   *  option) any later version.
 - *
 - *  Revision history
 - *    12th Aug 2005   Initial version.
   */
  
  #include <linux/init.h>
  #include <linux/module.h>
  #include <linux/device.h>
  #include <linux/delay.h>
+ #include <linux/clk.h>
  #include <sound/core.h>
  #include <sound/pcm.h>
  #include <sound/initval.h>
@@@ -37,6 -41,7 +38,7 @@@ struct pxa_i2s_port 
        u32 fmt;
  };
  static struct pxa_i2s_port pxa_i2s;
+ static struct clk *clk_i2s;
  
  static struct pxa2xx_pcm_dma_params pxa2xx_i2s_pcm_stereo_out = {
        .name                   = "I2S PCM Stereo out",
@@@ -77,8 -82,12 +79,12 @@@ static struct pxa2xx_gpio gpio_bus[] = 
  static int pxa2xx_i2s_startup(struct snd_pcm_substream *substream)
  {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
 -      struct snd_soc_cpu_dai *cpu_dai = rtd->dai->cpu_dai;
 +      struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
  
+       clk_i2s = clk_get(NULL, "I2SCLK");
+       if (IS_ERR(clk_i2s))
+               return PTR_ERR(clk_i2s);
        if (!cpu_dai->active) {
                SACR0 |= SACR0_RST;
                SACR0 = 0;
@@@ -98,7 -107,7 +104,7 @@@ static int pxa_i2s_wait(void
        return 0;
  }
  
 -static int pxa2xx_i2s_set_dai_fmt(struct snd_soc_cpu_dai *cpu_dai,
 +static int pxa2xx_i2s_set_dai_fmt(struct snd_soc_dai *cpu_dai,
                unsigned int fmt)
  {
        /* interface format */
        return 0;
  }
  
 -static int pxa2xx_i2s_set_dai_sysclk(struct snd_soc_cpu_dai *cpu_dai,
 +static int pxa2xx_i2s_set_dai_sysclk(struct snd_soc_dai *cpu_dai,
                int clk_id, unsigned int freq, int dir)
  {
        if (clk_id != PXA2XX_I2S_SYSCLK)
@@@ -140,13 -149,13 +146,13 @@@ static int pxa2xx_i2s_hw_params(struct 
                                struct snd_pcm_hw_params *params)
  {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
 -      struct snd_soc_cpu_dai *cpu_dai = rtd->dai->cpu_dai;
 +      struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
  
        pxa_gpio_mode(gpio_bus[pxa_i2s.master].rx);
        pxa_gpio_mode(gpio_bus[pxa_i2s.master].tx);
        pxa_gpio_mode(gpio_bus[pxa_i2s.master].frm);
        pxa_gpio_mode(gpio_bus[pxa_i2s.master].clk);
-       pxa_set_cken(CKEN_I2S, 1);
+       clk_enable(clk_i2s);
        pxa_i2s_wait();
  
        if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
@@@ -231,13 -240,15 +237,15 @@@ static void pxa2xx_i2s_shutdown(struct 
        if (SACR1 & (SACR1_DREC | SACR1_DRPL)) {
                SACR0 &= ~SACR0_ENB;
                pxa_i2s_wait();
-               pxa_set_cken(CKEN_I2S, 0);
+               clk_disable(clk_i2s);
        }
+       clk_put(clk_i2s);
  }
  
  #ifdef CONFIG_PM
  static int pxa2xx_i2s_suspend(struct platform_device *dev,
 -      struct snd_soc_cpu_dai *dai)
 +      struct snd_soc_dai *dai)
  {
        if (!dai->active)
                return 0;
  }
  
  static int pxa2xx_i2s_resume(struct platform_device *pdev,
 -      struct snd_soc_cpu_dai *dai)
 +      struct snd_soc_dai *dai)
  {
        if (!dai->active)
                return 0;
                SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_22050 | SNDRV_PCM_RATE_44100 | \
                SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_96000)
  
 -struct snd_soc_cpu_dai pxa_i2s_dai = {
 +struct snd_soc_dai pxa_i2s_dai = {
        .name = "pxa2xx-i2s",
        .id = 0,
        .type = SND_SOC_DAI_I2S,