]> code.ossystems Code Review - openembedded-core.git/commitdiff
linux-openmoko: Add input subsys -> APM bridge and tweak power driver key events
authorRichard Purdie <richard@openedhand.com>
Wed, 20 Feb 2008 12:23:38 +0000 (12:23 +0000)
committerRichard Purdie <richard@openedhand.com>
Wed, 20 Feb 2008 12:23:38 +0000 (12:23 +0000)
git-svn-id: https://svn.o-hand.com/repos/poky/trunk@3831 311d38ba-8fff-0310-9ca6-ca027cbcb966

meta/packages/linux/linux-openmoko/defconfig-2.6.22.5
meta/packages/linux/linux-openmoko/gta-vibro-pwm-suspend.patch [new file with mode: 0644]
meta/packages/linux/linux-openmoko/gta02-sound.patch [new file with mode: 0644]
meta/packages/linux/linux-openmoko/iis-suspend.patch [new file with mode: 0644]
meta/packages/linux/linux-openmoko/s3c24xx-pcm-suspend.patch [new file with mode: 0644]
meta/packages/linux/linux-openmoko/soc-core-suspend.patch [new file with mode: 0644]
meta/packages/linux/linux-openmoko/tweak_power_button.patch [new file with mode: 0644]
meta/packages/linux/linux-openmoko_2.6.22.5.bb

index 7aa23df77c91357484bb910cd4d383b03b3b1f8f..333cd662ff2b7a568b1089b45f1600fce44701e8 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
 # Linux kernel version: 2.6.22.5
-# Wed Oct  3 13:55:25 2007
+# Wed Feb 20 11:10:51 2008
 #
 CONFIG_ARM=y
 CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -166,6 +166,7 @@ CONFIG_CPU_S3C2410_DMA=y
 CONFIG_S3C2410_PM=y
 CONFIG_S3C2410_GPIO=y
 CONFIG_S3C2410_CLOCK=y
+CONFIG_S3C2410_PWM=y
 
 #
 # S3C2410 Machines
@@ -252,7 +253,8 @@ CONFIG_ARM_THUMB=y
 CONFIG_PREEMPT=y
 CONFIG_NO_IDLE_HZ=y
 CONFIG_HZ=200
-# CONFIG_AEABI is not set
+CONFIG_AEABI=y
+# CONFIG_OABI_COMPAT is not set
 # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
 CONFIG_SELECT_MEMORY_MODEL=y
 CONFIG_FLATMEM_MANUAL=y
@@ -271,7 +273,7 @@ CONFIG_ALIGNMENT_TRAP=y
 #
 CONFIG_ZBOOT_ROM_TEXT=0x0
 CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="ip=192.168.1.2:192.168.1.10:192.168.1.10:255.255.255.0:ezx:usb0:off"
+CONFIG_CMDLINE="unused -- bootloader passes ATAG list"
 # CONFIG_XIP_KERNEL is not set
 CONFIG_KEXEC=y
 
@@ -282,9 +284,6 @@ CONFIG_KEXEC=y
 #
 # At least one emulation must be selected
 #
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
 
 #
 # Userspace binary formats
@@ -292,7 +291,6 @@ CONFIG_FPE_NWFPE=y
 CONFIG_BINFMT_ELF=y
 # CONFIG_BINFMT_AOUT is not set
 # CONFIG_BINFMT_MISC is not set
-# CONFIG_ARTHUR is not set
 
 #
 # Power management options
@@ -893,6 +891,7 @@ CONFIG_INPUT_MOUSEDEV_SCREEN_Y=640
 # CONFIG_INPUT_TSDEV is not set
 CONFIG_INPUT_EVDEV=y
 CONFIG_INPUT_EVBUG=m
+CONFIG_INPUT_POWER=y
 
 #
 # Input Device Drivers
@@ -1049,6 +1048,7 @@ CONFIG_SPI_S3C24XX_GPIO=y
 # CONFIG_SPI_AT25 is not set
 # CONFIG_SPI_SPIDEV is not set
 CONFIG_SPI_SLAVE_JBT6K74=y
+# CONFIG_SPI_SLAVE_LIS302DL is not set
 
 #
 # Dallas's 1-wire bus
@@ -1121,6 +1121,7 @@ CONFIG_LEDS_CLASS=y
 #
 CONFIG_LEDS_S3C24XX=m
 CONFIG_LEDS_GTA01=y
+# CONFIG_LEDS_GTA02 is not set
 
 #
 # LED Triggers
@@ -1248,6 +1249,7 @@ CONFIG_SND_SOC=y
 CONFIG_SND_S3C24XX_SOC=m
 CONFIG_SND_S3C24XX_SOC_I2S=m
 CONFIG_SND_S3C24XX_SOC_NEO1973_WM8753=m
+# CONFIG_SND_S3C24XX_SOC_NEO1973_GTA02_WM8753 is not set
 
 #
 # SoC Audio support for SuperH
diff --git a/meta/packages/linux/linux-openmoko/gta-vibro-pwm-suspend.patch b/meta/packages/linux/linux-openmoko/gta-vibro-pwm-suspend.patch
new file mode 100644 (file)
index 0000000..a98f5c8
--- /dev/null
@@ -0,0 +1,27 @@
+Index: linux-2.6.22/drivers/leds/leds-gta01.c
+===================================================================
+--- linux-2.6.22.orig/drivers/leds/leds-gta01.c        2007-11-09 16:27:03.000000000 +0000
++++ linux-2.6.22/drivers/leds/leds-gta01.c     2007-11-09 16:27:13.000000000 +0000
+@@ -33,6 +33,8 @@
+       struct s3c2410_pwm pwm;
+ };
++static int gta01vib_init_hw(struct gta01_vib_priv *vp);
++
+ static inline struct gta01_vib_priv *pdev_to_vpriv(struct platform_device *dev)
+ {
+       return platform_get_drvdata(dev);
+@@ -80,7 +82,13 @@
+ static int gta01vib_resume(struct platform_device *dev)
+ {
++      struct gta01_vib_priv *vp = pdev_to_vpriv(dev);
++
+       led_classdev_resume(&gta01_vib_led);
++
++      if (vp->has_pwm)
++              gta01vib_init_hw(vp);
++
+       return 0;
+ }
+ #endif
diff --git a/meta/packages/linux/linux-openmoko/gta02-sound.patch b/meta/packages/linux/linux-openmoko/gta02-sound.patch
new file mode 100644 (file)
index 0000000..f742c77
--- /dev/null
@@ -0,0 +1,754 @@
+Index: linux-2.6.22/sound/soc/s3c24xx/neo1973_gta02_wm8753.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.22/sound/soc/s3c24xx/neo1973_gta02_wm8753.c      2007-11-09 16:21:35.000000000 +0000
+@@ -0,0 +1,667 @@
++/*
++ * neo1973_gta02_wm8753.c  --  SoC audio for Neo1973
++ *
++ * Copyright 2007 OpenMoko Inc
++ * Author: Graeme Gregory <graeme@openmoko.org>
++ * Copyright 2007 Wolfson Microelectronics PLC.
++ * Author: Graeme Gregory <linux@wolfsonmicro.com>
++ *
++ *  This program is free software; you can redistribute  it and/or modify it
++ *  under  the terms of  the GNU General  Public License as published by the
++ *  Free Software Foundation;  either version 2 of the  License, or (at your
++ *  option) any later version.
++ *
++ *  Revision history
++ *    06th Nov 2007   Changed from GTA01 to GTA02
++ *    20th Jan 2007   Initial version.
++ *    05th Feb 2007   Rename all to Neo1973
++ *
++ */
++
++#include <linux/module.h>
++#include <linux/moduleparam.h>
++#include <linux/timer.h>
++#include <linux/interrupt.h>
++#include <linux/platform_device.h>
++#include <linux/i2c.h>
++#include <sound/driver.h>
++#include <sound/core.h>
++#include <sound/pcm.h>
++#include <sound/soc.h>
++#include <sound/soc-dapm.h>
++
++#include <asm/mach-types.h>
++#include <asm/hardware/scoop.h>
++#include <asm/arch/regs-iis.h>
++#include <asm/arch/regs-clock.h>
++#include <asm/arch/regs-gpio.h>
++#include <asm/hardware.h>
++#include <asm/arch/audio.h>
++#include <asm/io.h>
++#include <asm/arch/spi-gpio.h>
++#include <asm/arch/regs-gpioj.h>
++#include <asm/arch/gta02.h>
++#include "../codecs/wm8753.h"
++#include "s3c24xx-pcm.h"
++#include "s3c24xx-i2s.h"
++
++/* define the scenarios */
++#define NEO_AUDIO_OFF                 0
++#define NEO_GSM_CALL_AUDIO_HANDSET    1
++#define NEO_GSM_CALL_AUDIO_HEADSET    2
++#define NEO_GSM_CALL_AUDIO_BLUETOOTH  3
++#define NEO_STEREO_TO_SPEAKERS                4
++#define NEO_STEREO_TO_HEADPHONES      5
++#define NEO_CAPTURE_HANDSET           6
++#define NEO_CAPTURE_HEADSET           7
++#define NEO_CAPTURE_BLUETOOTH         8
++#define NEO_STEREO_TO_HANDSET_SPK     9
++
++static struct snd_soc_machine neo1973_gta02;
++
++static int neo1973_gta02_hifi_hw_params(struct snd_pcm_substream *substream,
++      struct snd_pcm_hw_params *params)
++{
++      struct snd_soc_pcm_runtime *rtd = substream->private_data;
++      struct snd_soc_codec_dai *codec_dai = rtd->dai->codec_dai;
++      struct snd_soc_cpu_dai *cpu_dai = rtd->dai->cpu_dai;
++      unsigned int pll_out = 0, bclk = 0;
++      int ret = 0;
++      unsigned long iis_clkrate;
++
++      iis_clkrate = s3c24xx_i2s_get_clockrate();
++
++      switch (params_rate(params)) {
++      case 8000:
++      case 16000:
++              pll_out = 12288000;
++              break;
++      case 48000:
++              bclk = WM8753_BCLK_DIV_4;
++              pll_out = 12288000;
++              break;
++      case 96000:
++              bclk = WM8753_BCLK_DIV_2;
++              pll_out = 12288000;
++              break;
++      case 11025:
++              bclk = WM8753_BCLK_DIV_16;
++              pll_out = 11289600;
++              break;
++      case 22050:
++              bclk = WM8753_BCLK_DIV_8;
++              pll_out = 11289600;
++              break;
++      case 44100:
++              bclk = WM8753_BCLK_DIV_4;
++              pll_out = 11289600;
++              break;
++      case 88200:
++              bclk = WM8753_BCLK_DIV_2;
++              pll_out = 11289600;
++              break;
++      }
++
++      /* set codec DAI configuration */
++      ret = codec_dai->dai_ops.set_fmt(codec_dai,
++              SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |
++              SND_SOC_DAIFMT_CBM_CFM);
++      if (ret < 0)
++              return ret;
++
++      /* set cpu DAI configuration */
++      ret = cpu_dai->dai_ops.set_fmt(cpu_dai,
++              SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |
++              SND_SOC_DAIFMT_CBM_CFM);
++      if (ret < 0)
++              return ret;
++
++      /* set the codec system clock for DAC and ADC */
++      ret = codec_dai->dai_ops.set_sysclk(codec_dai, WM8753_MCLK, pll_out,
++              SND_SOC_CLOCK_IN);
++      if (ret < 0)
++              return ret;
++
++      /* set MCLK division for sample rate */
++      ret = cpu_dai->dai_ops.set_clkdiv(cpu_dai, S3C24XX_DIV_MCLK,
++              S3C2410_IISMOD_32FS );
++      if (ret < 0)
++              return ret;
++
++      /* set codec BCLK division for sample rate */
++      ret = codec_dai->dai_ops.set_clkdiv(codec_dai,
++                                      WM8753_BCLKDIV, bclk);
++      if (ret < 0)
++              return ret;
++
++      /* set prescaler division for sample rate */
++      ret = cpu_dai->dai_ops.set_clkdiv(cpu_dai, S3C24XX_DIV_PRESCALER,
++              S3C24XX_PRESCALE(4,4));
++      if (ret < 0)
++              return ret;
++
++      /* codec PLL input is PCLK/4 */
++      ret = codec_dai->dai_ops.set_pll(codec_dai, WM8753_PLL1,
++              iis_clkrate / 4, pll_out);
++      if (ret < 0)
++              return ret;
++
++      return 0;
++}
++
++static int neo1973_gta02_hifi_hw_free(struct snd_pcm_substream *substream)
++{
++      struct snd_soc_pcm_runtime *rtd = substream->private_data;
++      struct snd_soc_codec_dai *codec_dai = rtd->dai->codec_dai;
++
++      /* disable the PLL */
++      return codec_dai->dai_ops.set_pll(codec_dai, WM8753_PLL1, 0, 0);
++}
++
++/*
++ * Neo1973 WM8753 HiFi DAI opserations.
++ */
++static struct snd_soc_ops neo1973_gta02_hifi_ops = {
++      .hw_params = neo1973_gta02_hifi_hw_params,
++      .hw_free = neo1973_gta02_hifi_hw_free,
++};
++
++static int neo1973_gta02_voice_hw_params(
++      struct snd_pcm_substream *substream,
++      struct snd_pcm_hw_params *params)
++{
++      struct snd_soc_pcm_runtime *rtd = substream->private_data;
++      struct snd_soc_codec_dai *codec_dai = rtd->dai->codec_dai;
++      unsigned int pcmdiv = 0;
++      int ret = 0;
++      unsigned long iis_clkrate;
++
++      iis_clkrate = s3c24xx_i2s_get_clockrate();
++
++      if (params_rate(params) != 8000)
++              return -EINVAL;
++      if (params_channels(params) != 1)
++              return -EINVAL;
++
++      pcmdiv = WM8753_PCM_DIV_6; /* 2.048 MHz */
++
++      /* todo: gg check mode (DSP_B) against CSR datasheet */
++      /* set codec DAI configuration */
++      ret = codec_dai->dai_ops.set_fmt(codec_dai, SND_SOC_DAIFMT_DSP_B |
++              SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS);
++      if (ret < 0)
++              return ret;
++
++      /* set the codec system clock for DAC and ADC */
++      ret = codec_dai->dai_ops.set_sysclk(codec_dai, WM8753_PCMCLK,
++              12288000, SND_SOC_CLOCK_IN);
++      if (ret < 0)
++              return ret;
++
++      /* set codec PCM division for sample rate */
++      ret = codec_dai->dai_ops.set_clkdiv(codec_dai, WM8753_PCMDIV,
++                                      pcmdiv);
++      if (ret < 0)
++              return ret;
++
++      /* configue and enable PLL for 12.288MHz output */
++      ret = codec_dai->dai_ops.set_pll(codec_dai, WM8753_PLL2,
++              iis_clkrate / 4, 12288000);
++      if (ret < 0)
++              return ret;
++
++      return 0;
++}
++
++static int neo1973_gta02_voice_hw_free(struct snd_pcm_substream *substream)
++{
++      struct snd_soc_pcm_runtime *rtd = substream->private_data;
++      struct snd_soc_codec_dai *codec_dai = rtd->dai->codec_dai;
++
++      /* disable the PLL */
++      return codec_dai->dai_ops.set_pll(codec_dai, WM8753_PLL2, 0, 0);
++}
++
++static struct snd_soc_ops neo1973_gta02_voice_ops = {
++      .hw_params = neo1973_gta02_voice_hw_params,
++      .hw_free = neo1973_gta02_voice_hw_free,
++};
++
++#define LM4853_AMP 1
++#define LM4853_SPK 2
++
++static u8 lm4853_state=0;
++
++static int lm4853_set_state(struct snd_kcontrol *kcontrol,
++      struct snd_ctl_elem_value *ucontrol)
++{
++      int val = ucontrol->value.integer.value[0];
++
++      if(val) {
++              lm4853_state |= LM4853_AMP;
++              s3c2410_gpio_setpin(GTA02_GPIO_AMP_SHUT,0);
++      } else {
++              lm4853_state &= ~LM4853_AMP;
++              s3c2410_gpio_setpin(GTA02_GPIO_AMP_SHUT,1);
++      }
++
++      return 0;
++}
++
++static int lm4853_get_state(struct snd_kcontrol *kcontrol,
++      struct snd_ctl_elem_value *ucontrol)
++{
++      ucontrol->value.integer.value[0] = lm4853_state & LM4853_AMP;
++
++      return 0;
++}
++
++static int lm4853_set_spk(struct snd_kcontrol *kcontrol,
++      struct snd_ctl_elem_value *ucontrol)
++{
++      int val = ucontrol->value.integer.value[0];
++
++      if(val) {
++              lm4853_state |= LM4853_SPK;
++              s3c2410_gpio_setpin(GTA02_GPIO_HP_IN,0);
++      } else {
++              lm4853_state &= ~LM4853_SPK;
++              s3c2410_gpio_setpin(GTA02_GPIO_HP_IN,1);
++      }
++
++      return 0;
++}
++
++static int lm4853_get_spk(struct snd_kcontrol *kcontrol,
++      struct snd_ctl_elem_value *ucontrol)
++{
++      ucontrol->value.integer.value[0] = (lm4853_state & LM4853_SPK) >> 1;
++
++      return 0;
++}
++
++static int neo1973_gta02_set_stereo_out(struct snd_kcontrol *kcontrol,
++      struct snd_ctl_elem_value *ucontrol)
++{
++      struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
++      int val = ucontrol->value.integer.value[0];
++
++      snd_soc_dapm_set_endpoint(codec, "Stereo Out", val);
++
++      snd_soc_dapm_sync_endpoints(codec);
++
++      return 0;
++}
++
++static int neo1973_gta02_get_stereo_out(struct snd_kcontrol *kcontrol,
++      struct snd_ctl_elem_value *ucontrol)
++{
++      struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
++
++      ucontrol->value.integer.value[0] =
++              snd_soc_dapm_get_endpoint(codec, "Stereo Out");
++
++      return 0;
++}
++
++
++static int neo1973_gta02_set_gsm_out(struct snd_kcontrol *kcontrol,
++      struct snd_ctl_elem_value *ucontrol)
++{
++      struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
++      int val = ucontrol->value.integer.value[0];
++
++      snd_soc_dapm_set_endpoint(codec, "GSM Line Out", val);
++
++      snd_soc_dapm_sync_endpoints(codec);
++
++      return 0;
++}
++
++static int neo1973_gta02_get_gsm_out(struct snd_kcontrol *kcontrol,
++      struct snd_ctl_elem_value *ucontrol)
++{
++      struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
++
++      ucontrol->value.integer.value[0] =
++              snd_soc_dapm_get_endpoint(codec, "GSM Line Out");
++
++      return 0;
++}
++
++static int neo1973_gta02_set_gsm_in(struct snd_kcontrol *kcontrol,
++      struct snd_ctl_elem_value *ucontrol)
++{
++      struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
++      int val = ucontrol->value.integer.value[0];
++
++      snd_soc_dapm_set_endpoint(codec, "GSM Line In", val);
++
++      snd_soc_dapm_sync_endpoints(codec);
++
++      return 0;
++}
++
++static int neo1973_gta02_get_gsm_in(struct snd_kcontrol *kcontrol,
++      struct snd_ctl_elem_value *ucontrol)
++{
++      struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
++
++      ucontrol->value.integer.value[0] =
++              snd_soc_dapm_get_endpoint(codec, "GSM Line In");
++
++      return 0;
++}
++
++static int neo1973_gta02_set_headset_mic(struct snd_kcontrol *kcontrol,
++      struct snd_ctl_elem_value *ucontrol)
++{
++      struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
++      int val = ucontrol->value.integer.value[0];
++
++      snd_soc_dapm_set_endpoint(codec, "Headset Mic", val);
++
++      snd_soc_dapm_sync_endpoints(codec);
++
++      return 0;
++}
++
++static int neo1973_gta02_get_headset_mic(struct snd_kcontrol *kcontrol,
++      struct snd_ctl_elem_value *ucontrol)
++{
++      struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
++
++      ucontrol->value.integer.value[0] =
++              snd_soc_dapm_get_endpoint(codec, "Headset Mic");
++
++      return 0;
++}
++
++static int neo1973_gta02_set_handset_mic(struct snd_kcontrol *kcontrol,
++      struct snd_ctl_elem_value *ucontrol)
++{
++      struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
++      int val = ucontrol->value.integer.value[0];
++
++      snd_soc_dapm_set_endpoint(codec, "Handset Mic", val);
++
++      snd_soc_dapm_sync_endpoints(codec);
++
++      return 0;
++}
++
++static int neo1973_gta02_get_handset_mic(struct snd_kcontrol *kcontrol,
++      struct snd_ctl_elem_value *ucontrol)
++{
++      struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
++
++      ucontrol->value.integer.value[0] =
++              snd_soc_dapm_get_endpoint(codec, "Handset Mic");
++
++      return 0;
++}
++
++static int neo1973_gta02_set_handset_spk(struct snd_kcontrol *kcontrol,
++      struct snd_ctl_elem_value *ucontrol)
++{
++      struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
++      int val = ucontrol->value.integer.value[0];
++
++      snd_soc_dapm_set_endpoint(codec, "Handset Spk", val);
++
++      snd_soc_dapm_sync_endpoints(codec);
++
++      return 0;
++}
++
++static int neo1973_gta02_get_handset_spk(struct snd_kcontrol *kcontrol,
++      struct snd_ctl_elem_value *ucontrol)
++{
++      struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
++
++      ucontrol->value.integer.value[0] =
++              snd_soc_dapm_get_endpoint(codec, "Handset Spk");
++
++      return 0;
++}
++
++static const struct snd_soc_dapm_widget wm8753_dapm_widgets[] = {
++      SND_SOC_DAPM_LINE("Stereo Out", NULL),
++      SND_SOC_DAPM_LINE("GSM Line Out", NULL),
++      SND_SOC_DAPM_LINE("GSM Line In", NULL),
++      SND_SOC_DAPM_MIC("Headset Mic", NULL),
++      SND_SOC_DAPM_MIC("Handset Mic", NULL),
++      SND_SOC_DAPM_SPK("Handset Spk", NULL),
++};
++
++
++/* example machine audio_mapnections */
++static const char* audio_map[][3] = {
++
++      /* Connections to the lm4853 amp */
++      {"Stereo Out", NULL, "LOUT1"},
++      {"Stereo Out", NULL, "ROUT1"},
++
++      /* Connections to the GSM Module */
++      {"GSM Line Out", NULL, "MONO1"},
++      {"GSM Line Out", NULL, "MONO2"},
++      {"RXP", NULL, "GSM Line In"},
++      {"RXN", NULL, "GSM Line In"},
++
++      /* Connections to Headset */
++      {"MIC1", NULL, "Mic Bias"},
++      {"Mic Bias", NULL, "Headset Mic"},
++
++      /* Call Mic */
++      {"MIC2", NULL, "Mic Bias"},
++      {"MIC2N", NULL, "Mic Bias"},
++      {"Mic Bias", NULL, "Handset Mic"},
++
++      /* Call Speaker */
++      {"Handset Spk", NULL, "LOUT2"},
++      {"Handset Spk", NULL, "ROUT2"},
++
++      /* Connect the ALC pins */
++      {"ACIN", NULL, "ACOP"},
++
++      {NULL, NULL, NULL},
++};
++
++static const struct snd_kcontrol_new wm8753_neo1973_gta02_controls[] = {
++      SOC_SINGLE_EXT("DAPM Stereo Out Switch", 0, 0, 1, 0,
++              neo1973_gta02_get_stereo_out,
++              neo1973_gta02_set_stereo_out),
++      SOC_SINGLE_EXT("DAPM GSM Line Out Switch", 1, 0, 1, 0,
++              neo1973_gta02_get_gsm_out,
++              neo1973_gta02_set_gsm_out),
++      SOC_SINGLE_EXT("DAPM GSM Line In Switch", 2, 0, 1, 0,
++              neo1973_gta02_get_gsm_in,
++              neo1973_gta02_set_gsm_in),
++      SOC_SINGLE_EXT("DAPM Headset Mic Switch", 3, 0, 1, 0,
++              neo1973_gta02_get_headset_mic,
++              neo1973_gta02_set_headset_mic),
++      SOC_SINGLE_EXT("DAPM Handset Mic Switch", 4, 0, 1, 0,
++              neo1973_gta02_get_handset_mic,
++              neo1973_gta02_set_handset_mic),
++      SOC_SINGLE_EXT("DAPM Handset Spk Switch", 5, 0, 1, 0,
++              neo1973_gta02_get_handset_spk,
++              neo1973_gta02_set_handset_spk),
++      SOC_SINGLE_EXT("Amp State Switch", 6, 0, 1, 0,
++              lm4853_get_state,
++              lm4853_set_state),
++      SOC_SINGLE_EXT("Amp Spk Switch", 7, 0, 1, 0,
++              lm4853_get_spk,
++              lm4853_set_spk),
++};
++
++/*
++ * This is an example machine initialisation for a wm8753 connected to a
++ * neo1973 GTA02.
++ */
++static int neo1973_gta02_wm8753_init(struct snd_soc_codec *codec)
++{
++      int i, err;
++
++      /* set up NC codec pins */
++      snd_soc_dapm_set_endpoint(codec, "OUT3",  0);
++      snd_soc_dapm_set_endpoint(codec, "OUT4",  0);
++      snd_soc_dapm_set_endpoint(codec, "LINE1", 0);
++      snd_soc_dapm_set_endpoint(codec, "LINE2", 0);
++
++      /* Add neo1973 gta02 specific widgets */
++      for (i = 0; i < ARRAY_SIZE(wm8753_dapm_widgets); i++)
++              snd_soc_dapm_new_control(codec, &wm8753_dapm_widgets[i]);
++
++      /* add neo1973 gta02 specific controls */
++      for (i = 0; i < ARRAY_SIZE(wm8753_neo1973_gta02_controls); i++) {
++              err = snd_ctl_add(codec->card,
++                      snd_soc_cnew(&wm8753_neo1973_gta02_controls[i],
++                      codec, NULL));
++              if (err < 0)
++                      return err;
++      }
++
++      /* set up neo1973 gta02 specific audio path audio_mapnects */
++      for (i = 0; audio_map[i][0] != NULL; i++) {
++              snd_soc_dapm_connect_input(codec, audio_map[i][0],
++                      audio_map[i][1], audio_map[i][2]);
++      }
++
++      /* set endpoints to default off mode */
++      snd_soc_dapm_set_endpoint(codec, "Stereo Out",  0);
++      snd_soc_dapm_set_endpoint(codec, "GSM Line Out",0);
++      snd_soc_dapm_set_endpoint(codec, "GSM Line In", 0);
++      snd_soc_dapm_set_endpoint(codec, "Headset Mic", 0);
++      snd_soc_dapm_set_endpoint(codec, "Handset Mic", 0);
++      snd_soc_dapm_set_endpoint(codec, "Handset Spk", 0);
++
++      snd_soc_dapm_sync_endpoints(codec);
++      return 0;
++}
++
++/*
++ * BT Codec DAI
++ */
++static struct snd_soc_cpu_dai bt_dai =
++{     .name = "Bluetooth",
++      .id = 0,
++      .type = SND_SOC_DAI_PCM,
++      .playback = {
++              .channels_min = 1,
++              .channels_max = 1,
++              .rates = SNDRV_PCM_RATE_8000,
++              .formats = SNDRV_PCM_FMTBIT_S16_LE,},
++      .capture = {
++              .channels_min = 1,
++              .channels_max = 1,
++              .rates = SNDRV_PCM_RATE_8000,
++              .formats = SNDRV_PCM_FMTBIT_S16_LE,},
++};
++
++static struct snd_soc_dai_link neo1973_gta02_dai[] = {
++{ /* Hifi Playback - for similatious use with voice below */
++      .name = "WM8753",
++      .stream_name = "WM8753 HiFi",
++      .cpu_dai = &s3c24xx_i2s_dai,
++      .codec_dai = &wm8753_dai[WM8753_DAI_HIFI],
++      .init = neo1973_gta02_wm8753_init,
++      .ops = &neo1973_gta02_hifi_ops,
++},
++{ /* Voice via BT */
++      .name = "Bluetooth",
++      .stream_name = "Voice",
++      .cpu_dai = &bt_dai,
++      .codec_dai = &wm8753_dai[WM8753_DAI_VOICE],
++      .ops = &neo1973_gta02_voice_ops,
++},
++};
++
++#ifdef CONFIG_PM
++int neo1973_gta02_suspend(struct platform_device *pdev, pm_message_t state)
++{
++      s3c2410_gpio_setpin(GTA02_GPIO_AMP_SHUT, 1);
++
++      return 0;
++}
++
++int neo1973_gta02_resume(struct platform_device *pdev)
++{
++      if(lm4853_state & LM4853_AMP)
++              s3c2410_gpio_setpin(GTA02_GPIO_AMP_SHUT, 0);
++
++      return 0;
++}
++#else
++#define neo1973_gta02_suspend NULL
++#define neo1973_gta02_resume NULL
++#endif
++
++static struct snd_soc_machine neo1973_gta02 = {
++      .name = "neo1973-gta02",
++      .suspend_pre = neo1973_gta02_suspend,
++      .resume_post = neo1973_gta02_resume,
++      .dai_link = neo1973_gta02_dai,
++      .num_links = ARRAY_SIZE(neo1973_gta02_dai),
++};
++
++static struct wm8753_setup_data neo1973_gta02_wm8753_setup = {
++      .i2c_address = 0x1a,
++};
++
++static struct snd_soc_device neo1973_gta02_snd_devdata = {
++      .machine = &neo1973_gta02,
++      .platform = &s3c24xx_soc_platform,
++      .codec_dev = &soc_codec_dev_wm8753,
++      .codec_data = &neo1973_gta02_wm8753_setup,
++};
++
++static struct platform_device *neo1973_gta02_snd_device;
++
++static int __init neo1973_gta02_init(void)
++{
++      int ret;
++
++      if (!machine_is_neo1973_gta02()) {
++              printk(KERN_INFO
++                     "Only GTA02 hardware supported by ASoc driver\n");
++              return -ENODEV;
++      }
++
++      neo1973_gta02_snd_device = platform_device_alloc("soc-audio", -1);
++      if (!neo1973_gta02_snd_device)
++              return -ENOMEM;
++
++      platform_set_drvdata(neo1973_gta02_snd_device,
++                      &neo1973_gta02_snd_devdata);
++      neo1973_gta02_snd_devdata.dev = &neo1973_gta02_snd_device->dev;
++      ret = platform_device_add(neo1973_gta02_snd_device);
++
++      if (ret)
++              platform_device_put(neo1973_gta02_snd_device);
++
++      /* Initialise GPIOs used by amp */
++      s3c2410_gpio_cfgpin(GTA02_GPIO_HP_IN, S3C2410_GPIO_OUTPUT);
++      s3c2410_gpio_cfgpin(GTA02_GPIO_AMP_SHUT, S3C2410_GPIO_OUTPUT);
++
++      /* Amp off by default */
++      s3c2410_gpio_setpin(GTA02_GPIO_AMP_SHUT, 1);
++
++      /* Speaker off by default */
++      s3c2410_gpio_setpin(GTA02_GPIO_HP_IN, 1);
++
++      return ret;
++}
++
++static void __exit neo1973_gta02_exit(void)
++{
++      platform_device_unregister(neo1973_gta02_snd_device);
++}
++
++module_init(neo1973_gta02_init);
++module_exit(neo1973_gta02_exit);
++
++/* Module information */
++MODULE_AUTHOR("Graeme Gregory, graeme@openmoko.org");
++MODULE_DESCRIPTION("ALSA SoC WM8753 Neo1973 GTA02");
++MODULE_LICENSE("GPL");
++
+Index: linux-2.6.22/sound/soc/s3c24xx/Kconfig
+===================================================================
+--- linux-2.6.22.orig/sound/soc/s3c24xx/Kconfig        2007-11-09 16:13:04.000000000 +0000
++++ linux-2.6.22/sound/soc/s3c24xx/Kconfig     2007-11-09 16:13:08.000000000 +0000
+@@ -25,6 +25,15 @@
+         Say Y if you want to add support for SoC audio on smdk2440
+         with the WM8753.
++config SND_S3C24XX_SOC_NEO1973_GTA02_WM8753
++      tristate "SoC I2S Audio support for NEO1973 GTA02 - WM8753"
++      depends on SND_S3C24XX_SOC && MACH_NEO1973_GTA02
++      select SND_S3C24XX_SOC_I2S
++      select SND_SOC_WM8753
++      help
++        Say Y if you want to add support for SoC audio on neo1973 gta02
++        with the WM8753 codec
++
+ config SND_S3C24XX_SOC_SMDK2443_WM9710
+       tristate "SoC AC97 Audio support for SMDK2443 - WM9710"
+       depends on SND_S3C24XX_SOC && MACH_SMDK2443
+Index: linux-2.6.22/sound/soc/s3c24xx/Makefile
+===================================================================
+--- linux-2.6.22.orig/sound/soc/s3c24xx/Makefile       2007-11-09 16:13:04.000000000 +0000
++++ linux-2.6.22/sound/soc/s3c24xx/Makefile    2007-11-09 16:13:08.000000000 +0000
+@@ -10,6 +10,9 @@
+ # S3C24XX Machine Support
+ snd-soc-neo1973-wm8753-objs := neo1973_wm8753.o
+ snd-soc-smdk2443-wm9710-objs := smdk2443_wm9710.o
++snd-soc-neo1973-gta02-wm8753-objs := neo1973_gta02_wm8753.o
+ obj-$(CONFIG_SND_S3C24XX_SOC_NEO1973_WM8753) += snd-soc-neo1973-wm8753.o
+ obj-$(CONFIG_SND_S3C24XX_SOC_SMDK2443_WM9710) += snd-soc-smdk2443-wm9710.o
++obj-$(CONFIG_SND_S3C24XX_SOC_NEO1973_GTA02_WM8753) += snd-soc-neo1973-gta02-wm8753.o
++
+Index: linux-2.6.22/include/sound/soc-dapm.h
+===================================================================
+--- linux-2.6.22.orig/include/sound/soc-dapm.h 2007-07-09 00:32:17.000000000 +0100
++++ linux-2.6.22/include/sound/soc-dapm.h      2007-11-09 16:13:08.000000000 +0000
+@@ -206,6 +206,8 @@
+ /* dapm audio endpoint control */
+ int snd_soc_dapm_set_endpoint(struct snd_soc_codec *codec,
+       char *pin, int status);
++int snd_soc_dapm_get_endpoint(struct snd_soc_codec *codec,
++      char *pin);
+ int snd_soc_dapm_sync_endpoints(struct snd_soc_codec *codec);
+ /* dapm widget types */
+Index: linux-2.6.22/sound/soc/soc-dapm.c
+===================================================================
+--- linux-2.6.22.orig/sound/soc/soc-dapm.c     2007-07-09 00:32:17.000000000 +0100
++++ linux-2.6.22/sound/soc/soc-dapm.c  2007-11-09 16:13:08.000000000 +0000
+@@ -1305,6 +1305,30 @@
+ EXPORT_SYMBOL_GPL(snd_soc_dapm_set_endpoint);
+ /**
++ * snd_soc_dapm_get_endpoint - get audio endpoint status
++ * @codec: audio codec
++ * @endpoint: audio signal endpoint (or start point)
++ *
++ * Get audio endpoint status - connected or disconnected.
++ *
++ * Returns status
++ */
++int snd_soc_dapm_get_endpoint(struct snd_soc_codec *codec,
++      char *endpoint)
++{
++      struct snd_soc_dapm_widget *w;
++
++      list_for_each_entry(w, &codec->dapm_widgets, list) {
++              if (!strcmp(w->name, endpoint)) {
++                      return w->connected;
++              }
++      }
++
++      return 0;
++}
++EXPORT_SYMBOL_GPL(snd_soc_dapm_get_endpoint);
++
++/**
+  * snd_soc_dapm_free - free dapm resources
+  * @socdev: SoC device
+  *
diff --git a/meta/packages/linux/linux-openmoko/iis-suspend.patch b/meta/packages/linux/linux-openmoko/iis-suspend.patch
new file mode 100644 (file)
index 0000000..ab38672
--- /dev/null
@@ -0,0 +1,63 @@
+Index: linux-2.6.22/sound/soc/s3c24xx/s3c24xx-i2s.c
+===================================================================
+--- linux-2.6.22.orig/sound/soc/s3c24xx/s3c24xx-i2s.c  2007-11-09 16:13:04.000000000 +0000
++++ linux-2.6.22/sound/soc/s3c24xx/s3c24xx-i2s.c       2007-11-09 16:17:47.000000000 +0000
+@@ -75,6 +75,10 @@
+ struct s3c24xx_i2s_info {
+       void __iomem    *regs;
+       struct clk      *iis_clk;
++      u32             iiscon;
++      u32             iismod;
++      u32             iisfcon;
++      u32             iispsr;
+ };
+ static struct s3c24xx_i2s_info s3c24xx_i2s;
+@@ -404,6 +408,38 @@
+       return 0;
+ }
++#ifdef CONFIG_PM
++int s3c24xx_i2s_suspend(struct platform_device *pdev,
++                struct snd_soc_cpu_dai *cpu_dai)
++{
++        s3c24xx_i2s.iiscon=readl(s3c24xx_i2s.regs + S3C2410_IISCON);
++      s3c24xx_i2s.iismod=readl(s3c24xx_i2s.regs + S3C2410_IISMOD);
++      s3c24xx_i2s.iisfcon=readl(s3c24xx_i2s.regs + S3C2410_IISFCON);
++      s3c24xx_i2s.iispsr=readl(s3c24xx_i2s.regs + S3C2410_IISPSR);
++
++      clk_disable(s3c24xx_i2s.iis_clk);
++
++      return 0;
++}
++
++int s3c24xx_i2s_resume(struct platform_device *pdev,
++                struct snd_soc_cpu_dai *cpu_dai)
++{
++      clk_enable(s3c24xx_i2s.iis_clk);
++
++        writel(s3c24xx_i2s.iiscon, s3c24xx_i2s.regs + S3C2410_IISCON);
++        writel(s3c24xx_i2s.iismod, s3c24xx_i2s.regs + S3C2410_IISMOD);
++        writel(s3c24xx_i2s.iisfcon, s3c24xx_i2s.regs + S3C2410_IISFCON);
++        writel(s3c24xx_i2s.iispsr, s3c24xx_i2s.regs + S3C2410_IISPSR);
++
++      return 0;
++}
++#else
++#define s3c24xx_i2s_suspend NULL
++#define s3c24xx_i2s_resume NULL
++#endif
++
++
+ #define S3C24XX_I2S_RATES \
+       (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 | SNDRV_PCM_RATE_16000 | \
+       SNDRV_PCM_RATE_22050 | SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | \
+@@ -414,6 +450,8 @@
+       .id = 0,
+       .type = SND_SOC_DAI_I2S,
+       .probe = s3c24xx_i2s_probe,
++      .suspend = s3c24xx_i2s_suspend,
++      .resume = s3c24xx_i2s_resume,
+       .playback = {
+               .channels_min = 2,
+               .channels_max = 2,
diff --git a/meta/packages/linux/linux-openmoko/s3c24xx-pcm-suspend.patch b/meta/packages/linux/linux-openmoko/s3c24xx-pcm-suspend.patch
new file mode 100644 (file)
index 0000000..fffc685
--- /dev/null
@@ -0,0 +1,73 @@
+Index: linux-2.6.22/sound/soc/s3c24xx/s3c24xx-pcm.c
+===================================================================
+--- linux-2.6.22.orig/sound/soc/s3c24xx/s3c24xx-pcm.c  2007-11-09 16:28:43.000000000 +0000
++++ linux-2.6.22/sound/soc/s3c24xx/s3c24xx-pcm.c       2007-11-09 16:33:05.000000000 +0000
+@@ -49,7 +49,9 @@
+       .info                   = SNDRV_PCM_INFO_INTERLEAVED |
+                                   SNDRV_PCM_INFO_BLOCK_TRANSFER |
+                                   SNDRV_PCM_INFO_MMAP |
+-                                  SNDRV_PCM_INFO_MMAP_VALID,
++                                  SNDRV_PCM_INFO_MMAP_VALID |
++                                  SNDRV_PCM_INFO_PAUSE |
++                                  SNDRV_PCM_INFO_RESUME,
+       .formats                = SNDRV_PCM_FMTBIT_S16_LE |
+                                   SNDRV_PCM_FMTBIT_U16_LE |
+                                   SNDRV_PCM_FMTBIT_U8 |
+@@ -176,28 +178,6 @@
+               }
+       }
+-      /* channel needs configuring for mem=>device, increment memory addr,
+-       * sync to pclk, half-word transfers to the IIS-FIFO. */
+-      if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
+-              s3c2410_dma_devconfig(prtd->params->channel,
+-                              S3C2410_DMASRC_MEM, S3C2410_DISRCC_INC |
+-                              S3C2410_DISRCC_APB, prtd->params->dma_addr);
+-
+-              s3c2410_dma_config(prtd->params->channel,
+-                              prtd->params->dma_size,
+-                              S3C2410_DCON_SYNC_PCLK | 
+-                              S3C2410_DCON_HANDSHAKE);
+-      } else {
+-              s3c2410_dma_config(prtd->params->channel,
+-                              prtd->params->dma_size,
+-                              S3C2410_DCON_HANDSHAKE | 
+-                              S3C2410_DCON_SYNC_PCLK);
+-
+-              s3c2410_dma_devconfig(prtd->params->channel,
+-                                      S3C2410_DMASRC_HW, 0x3,
+-                                      prtd->params->dma_addr);
+-      }
+-
+       s3c2410_dma_set_buffdone_fn(prtd->params->channel,
+                                   s3c24xx_audio_buffdone);
+@@ -246,6 +226,28 @@
+       if (!prtd->params)
+               return 0;
++      /* channel needs configuring for mem=>device, increment memory addr,
++       * sync to pclk, half-word transfers to the IIS-FIFO. */
++      if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
++              s3c2410_dma_devconfig(prtd->params->channel,
++                              S3C2410_DMASRC_MEM, S3C2410_DISRCC_INC |
++                              S3C2410_DISRCC_APB, prtd->params->dma_addr);
++
++              s3c2410_dma_config(prtd->params->channel,
++                              prtd->params->dma_size,
++                              S3C2410_DCON_SYNC_PCLK |
++                              S3C2410_DCON_HANDSHAKE);
++      } else {
++              s3c2410_dma_config(prtd->params->channel,
++                              prtd->params->dma_size,
++                              S3C2410_DCON_HANDSHAKE |
++                              S3C2410_DCON_SYNC_PCLK);
++
++              s3c2410_dma_devconfig(prtd->params->channel,
++                                      S3C2410_DMASRC_HW, 0x3,
++                                      prtd->params->dma_addr);
++      }
++
+       /* flush the DMA channel */
+       s3c2410_dma_ctrl(prtd->params->channel, S3C2410_DMAOP_FLUSH);
+       prtd->dma_loaded = 0;
diff --git a/meta/packages/linux/linux-openmoko/soc-core-suspend.patch b/meta/packages/linux/linux-openmoko/soc-core-suspend.patch
new file mode 100644 (file)
index 0000000..7fb6cc7
--- /dev/null
@@ -0,0 +1,47 @@
+From 6c868238a5e083dca4d74439a7fd467b5c7726b0 Mon Sep 17 00:00:00 2001
+From: Liam Girdwood <liam@localhost.localdomain>
+Date: Fri, 1 Jun 2007 12:56:55 +0100
+Subject: [PATCH] This fixes a bug whereby PCM's were not being suspended when the rest of the audio subsystem was suspended.
+
+---
+ include/sound/soc.h  |    3 +++
+ sound/soc/soc-core.c |    8 ++++++++
+ 2 files changed, 11 insertions(+), 0 deletions(-)
+
+Index: linux-2.6.22/include/sound/soc.h
+===================================================================
+--- linux-2.6.22.orig/include/sound/soc.h      2007-07-09 00:32:17.000000000 +0100
++++ linux-2.6.22/include/sound/soc.h   2007-11-09 16:13:08.000000000 +0000
+@@ -411,6 +411,9 @@
+       /* codec/machine specific init - e.g. add machine controls */
+       int (*init)(struct snd_soc_codec *codec);
++      
++      /* DAI pcm */
++      struct snd_pcm *pcm;
+ };
+ /* SoC machine */
+Index: linux-2.6.22/sound/soc/soc-core.c
+===================================================================
+--- linux-2.6.22.orig/sound/soc/soc-core.c     2007-07-09 00:32:17.000000000 +0100
++++ linux-2.6.22/sound/soc/soc-core.c  2007-11-09 16:18:45.000000000 +0000
+@@ -639,6 +639,10 @@
+                       dai->dai_ops.digital_mute(dai, 1);
+       }
++      /* suspend all pcm's */
++      for(i = 0; i < machine->num_links; i++)
++              snd_pcm_suspend_all(machine->dai_link[i].pcm);
++
+       if (machine->suspend_pre)
+               machine->suspend_pre(pdev, state);
+@@ -873,6 +877,7 @@
+               return ret;
+       }
++      dai_link->pcm = pcm;
+       pcm->private_data = rtd;
+       soc_pcm_ops.mmap = socdev->platform->pcm_ops->mmap;
+       soc_pcm_ops.pointer = socdev->platform->pcm_ops->pointer;
diff --git a/meta/packages/linux/linux-openmoko/tweak_power_button.patch b/meta/packages/linux/linux-openmoko/tweak_power_button.patch
new file mode 100644 (file)
index 0000000..1929365
--- /dev/null
@@ -0,0 +1,32 @@
+Index: linux-2.6.22/drivers/i2c/chips/pcf50606.c
+===================================================================
+--- linux-2.6.22.orig/drivers/i2c/chips/pcf50606.c     2008-02-20 12:05:27.000000000 +0000
++++ linux-2.6.22/drivers/i2c/chips/pcf50606.c  2008-02-20 12:15:24.000000000 +0000
+@@ -564,7 +564,8 @@
+               /* ONKEY falling edge (start of button press) */
+               DEBUGPC("ONKEYF ");
+               pcf->flags |= PCF50606_F_PWR_PRESSED;
+-              input_report_key(pcf->input_dev, KEY_POWER, 1);
++              input_report_key(pcf->input_dev, KEY_SUSPEND, 1);
++              input_event(pcf->input_dev, EV_PWR, KEY_SUSPEND, 1);
+       }
+       if (int1 & PCF50606_INT1_ONKEY1S) {
+               /* ONKEY pressed for more than 1 second */
+@@ -582,7 +583,7 @@
+               DEBUGPC("ONKEYR ");
+               pcf->flags &= ~PCF50606_F_PWR_PRESSED;
+               pcf->onkey_seconds = -1;
+-              input_report_key(pcf->input_dev, KEY_POWER, 0);
++              input_report_key(pcf->input_dev, KEY_SUSPEND, 0);
+               /* disable SECOND interrupt in case RTC didn't
+                * request it */
+               if (!(pcf->flags & PCF50606_F_RTC_SECOND))
+@@ -1622,7 +1623,7 @@
+       data->input_dev->cdev.dev = &new_client->dev;
+       data->input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_PWR);
+-      set_bit(KEY_POWER, data->input_dev->keybit);
++      set_bit(KEY_SUSPEND, data->input_dev->keybit);
+       set_bit(KEY_POWER2, data->input_dev->keybit);
+       set_bit(KEY_BATTERY, data->input_dev->keybit);
index a7f78fc97708c0197e9ebb1d2812fed515c3c2dd..65e8d459c152f24be259435f9fcdd33c376333f0 100644 (file)
@@ -9,7 +9,7 @@ KERNEL_RELEASE = "2.6.22.5"
 #PV = "${VANILLA_VERSION}+${KERNEL_RELEASE}-moko11+svnr${SRCREV}"
 
 PV = "${KERNEL_RELEASE}-moko11+svnr${SRCREV}"
-PR = "r7"
+PR = "r14"
 
 KERNEL_IMAGETYPE = "uImage"
 UBOOT_ENTRYPOINT = "30008000"
@@ -24,14 +24,21 @@ SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${VANILLA_VERSION}.ta
               svn://svn.openmoko.org/trunk/src/target/kernel;module=patches;proto=http \
            file://fix-EVIOCGRAB-semantics-2.6.22.5.patch;patch=1 \
            file://fix-gta01-flowcontrol2-2.6.22.5.patch;patch=1 \
+           file://gta-vibro-pwm-suspend.patch;patch=1 \
+           file://tweak_power_button.patch;patch=1 \
+           http://www.rpsys.net/openzaurus/patches/archive/input_power-r9.patch;patch=1 \
            file://defconfig-${KERNEL_RELEASE}"
 
+#           file://gta02-sound.patch;patch=1 \
+#           file://soc-core-suspend.patch;patch=1 \
+#           file://iis-suspend.patch;patch=1 \
+#           file://s3c24xx-pcm-suspend.patch;patch=1 \
+
 S = "${WORKDIR}/linux-${VANILLA_VERSION}"
 
 ##############################################################
 # kernel image resides on a seperate flash partition (for now)
 #
-FILES_kernel-image = ""
 ALLOW_EMPTY = "1"
 
 COMPATIBLE_HOST = "arm.*-linux"
@@ -49,6 +56,10 @@ module_autoload_hci_usb = "hci_usb"
 module_autoload_g_ether = "g_ether"
 # audio
 module_autoload_snd-soc-neo1973-wm8753 = "snd-soc-neo1973-wm8753"
+module_autoload_snd-soc-neo1973-gta02-wm8753 = "snd-soc-neo1973-gta02-wm8753"
+module_autoload_snd-pcm-oss = "snd-pcm-oss"
+module_autoload_snd-mixer-oss = "snd-mixer-oss"
+
 # sd/mmc
 module_autoload_s3cmci = "s3cmci"