Send commitlog mailing list submissions to
        [email protected]

To subscribe or unsubscribe via the World Wide Web, visit
        http://lists.openmoko.org/mailman/listinfo/commitlog
or, via email, send a message with subject or body 'help' to
        [EMAIL PROTECTED]

You can reach the person managing the list at
        [EMAIL PROTECTED]

When replying, please edit your Subject line so it is more specific
than "Re: Contents of commitlog digest..."
Today's Topics:

   1. r3584 - branches/src/target/kernel/2.6.24.x/patches
      ([EMAIL PROTECTED])
   2. r3585 - branches/src/target/kernel/2.6.24.x/patches
      ([EMAIL PROTECTED])
--- Begin Message ---
Author: laforge
Date: 2007-12-06 06:49:05 +0100 (Thu, 06 Dec 2007)
New Revision: 3584

Added:
   branches/src/target/kernel/2.6.24.x/patches/gta02-sound.patch
Modified:
   branches/src/target/kernel/2.6.24.x/patches/series
Log:
add GTA02v2 sound driver from Graeme Gregory


Added: branches/src/target/kernel/2.6.24.x/patches/gta02-sound.patch
===================================================================
--- branches/src/target/kernel/2.6.24.x/patches/gta02-sound.patch       
2007-12-06 01:05:17 UTC (rev 3583)
+++ branches/src/target/kernel/2.6.24.x/patches/gta02-sound.patch       
2007-12-06 05:49:05 UTC (rev 3584)
@@ -0,0 +1,749 @@
+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-06 
16:35:52.000000000 +0000
+@@ -0,0 +1,662 @@
++/*
++ * neo1973_gta02_wm8753.c  --  SoC audio for Neo1973
++ *
++ * Copyright 2007 OpenMoko Inc
++ * Author: Graeme Gregory <[EMAIL PROTECTED]>
++ * Copyright 2007 Wolfson Microelectronics PLC.
++ * Author: Graeme Gregory <[EMAIL PROTECTED]>
++ *
++ *  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_AMP) >> 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,
++},
++};
++
++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;
++}
++
++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, [EMAIL PROTECTED]");
++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-06 
15:31:50.000000000 +0000
++++ linux-2.6.22/sound/soc/s3c24xx/Kconfig     2007-11-06 15:31:55.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-06 
15:31:49.000000000 +0000
++++ linux-2.6.22/sound/soc/s3c24xx/Makefile    2007-11-06 15:31:55.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-06 15:31:55.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-06 15:31:55.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
+  *

Modified: branches/src/target/kernel/2.6.24.x/patches/series
===================================================================
--- branches/src/target/kernel/2.6.24.x/patches/series  2007-12-06 01:05:17 UTC 
(rev 3583)
+++ branches/src/target/kernel/2.6.24.x/patches/series  2007-12-06 05:49:05 UTC 
(rev 3584)
@@ -42,6 +42,7 @@
 s3c24xx-nand-largepage.patch
 s3c2442b-cpuid.patch
 gta02-core.patch
+gta02-sound.patch
 neo1973-soc-include-fix.patch
 explicitly-link-notes-section.patch
 lis302dl.patch




--- End Message ---
--- Begin Message ---
Author: laforge
Date: 2007-12-06 07:02:36 +0100 (Thu, 06 Dec 2007)
New Revision: 3585

Modified:
   branches/src/target/kernel/2.6.24.x/patches/smedia-glamo.patch
Log:
glamo: report vram size to userspace.  Set fb_fix_screeninfo.smem_len to
RESSIZE(fb_res).  This is not the real vram size, as it is a hardcoded value in
glamo-core.c for now.  (Chia-I Wu)


Modified: branches/src/target/kernel/2.6.24.x/patches/smedia-glamo.patch
===================================================================
--- branches/src/target/kernel/2.6.24.x/patches/smedia-glamo.patch      
2007-12-06 05:49:05 UTC (rev 3584)
+++ branches/src/target/kernel/2.6.24.x/patches/smedia-glamo.patch      
2007-12-06 06:02:36 UTC (rev 3585)
@@ -1,10 +1,10 @@
-Index: linux-2.6.23-rc8/drivers/video/Kconfig
+Index: linux-2.6/drivers/video/Kconfig
 ===================================================================
---- linux-2.6.23-rc8.orig/drivers/video/Kconfig
-+++ linux-2.6.23-rc8/drivers/video/Kconfig
-@@ -1837,6 +1837,38 @@
-       source "drivers/video/omap/Kconfig"
- endif
+--- linux-2.6.orig/drivers/video/Kconfig
++++ linux-2.6/drivers/video/Kconfig
+@@ -1880,6 +1880,38 @@
+         framebuffer. ML300 carries a 640*480 LCD display on the board,
+         ML403 uses a standard DB15 VGA connector.
  
 +config GLAMO
 +      bool
@@ -41,10 +41,10 @@
  config FB_VIRTUAL
        tristate "Virtual Frame Buffer support (ONLY FOR TESTING!)"
        depends on FB
-Index: linux-2.6.23-rc8/drivers/video/Makefile
+Index: linux-2.6/drivers/video/Makefile
 ===================================================================
---- linux-2.6.23-rc8.orig/drivers/video/Makefile
-+++ linux-2.6.23-rc8/drivers/video/Makefile
+--- linux-2.6.orig/drivers/video/Makefile
++++ linux-2.6/drivers/video/Makefile
 @@ -113,6 +113,7 @@
  obj-$(CONFIG_FB_SM501)            += sm501fb.o
  obj-$(CONFIG_FB_XILINX)           += xilinxfb.o
@@ -52,11 +52,11 @@
 +obj-$(CONFIG_GLAMO)               += glamo/
  
  # Platform or fallback drivers go here
- obj-$(CONFIG_FB_VESA)             += vesafb.o
-Index: linux-2.6.23-rc8/drivers/video/glamo/Makefile
+ obj-$(CONFIG_FB_UVESA)            += uvesafb.o
+Index: linux-2.6/drivers/video/glamo/Makefile
 ===================================================================
 --- /dev/null
-+++ linux-2.6.23-rc8/drivers/video/glamo/Makefile
++++ linux-2.6/drivers/video/glamo/Makefile
 @@ -0,0 +1,11 @@
 +#
 +# Makefile for the Smedia Glamo framebuffer driver
@@ -69,10 +69,10 @@
 +obj-$(CONFIG_FB_GLAMO)                += glamo-fb.o
 +obj-$(CONFIG_FB_GLAMO_SPI)    += glamo-lcm-spi.o
 +
-Index: linux-2.6.23-rc8/drivers/video/glamo/glamo-regs.h
+Index: linux-2.6/drivers/video/glamo/glamo-regs.h
 ===================================================================
 --- /dev/null
-+++ linux-2.6.23-rc8/drivers/video/glamo/glamo-regs.h
++++ linux-2.6/drivers/video/glamo/glamo-regs.h
 @@ -0,0 +1,467 @@
 +#ifndef _GLAMO_REGS_H
 +#define _GLAMO_REGS_H
@@ -541,10 +541,10 @@
 +};
 +
 +#endif /* _GLAMO_REGS_H */
-Index: linux-2.6.23-rc8/drivers/video/glamo/glamo-core.c
+Index: linux-2.6/drivers/video/glamo/glamo-core.c
 ===================================================================
 --- /dev/null
-+++ linux-2.6.23-rc8/drivers/video/glamo/glamo-core.c
++++ linux-2.6/drivers/video/glamo/glamo-core.c
 @@ -0,0 +1,1020 @@
 +/* Smedia Glamo 336x/337x driver
 + *
@@ -1566,11 +1566,11 @@
 +MODULE_AUTHOR("Harald Welte <[EMAIL PROTECTED]>");
 +MODULE_DESCRIPTION("Smedia Glamo 336x/337x core/resource driver");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.23-rc8/include/asm-arm/arch-s3c2410/irqs.h
+Index: linux-2.6/include/asm-arm/arch-s3c2410/irqs.h
 ===================================================================
---- linux-2.6.23-rc8.orig/include/asm-arm/arch-s3c2410/irqs.h
-+++ linux-2.6.23-rc8/include/asm-arm/arch-s3c2410/irqs.h
-@@ -148,9 +148,37 @@
+--- linux-2.6.orig/include/asm-arm/arch-s3c2410/irqs.h
++++ linux-2.6/include/asm-arm/arch-s3c2410/irqs.h
+@@ -155,9 +155,37 @@
  #define IRQ_S3C2443_AC97      S3C2410_IRQSUB(28)
  
  #ifdef CONFIG_CPU_S3C2443
@@ -1610,11 +1610,11 @@
 +#define IRQ_GLAMO_RISC                IRQ_GLAMO(8)
 +
  #endif /* __ASM_ARCH_IRQ_H */
-Index: linux-2.6.23-rc8/drivers/video/glamo/glamo-fb.c
+Index: linux-2.6/drivers/video/glamo/glamo-fb.c
 ===================================================================
 --- /dev/null
-+++ linux-2.6.23-rc8/drivers/video/glamo/glamo-fb.c
-@@ -0,0 +1,627 @@
++++ linux-2.6/drivers/video/glamo/glamo-fb.c
+@@ -0,0 +1,624 @@
 +/* Smedia Glamo 336x/337x driver
 + *
 + * (C) 2007 by OpenMoko, Inc.
@@ -1671,8 +1671,6 @@
 +
 +#define RESSIZE(ressource) (((ressource)->end - (ressource)->start)+1)
 +
-+#define GLAMO_FB_ALLOC        (640*480*2)
-+
 +struct glamofb_handle {
 +      struct fb_info *fb;
 +      struct device *dev;
@@ -1841,7 +1839,6 @@
 +      }
 +
 +      glamo->fb->fix.line_length = (var->width * var->bits_per_pixel) / 8;
-+      glamo->fb->fix.smem_len = info->fix.line_length * var->yres_virtual;
 +
 +      return 0;
 +}
@@ -2070,7 +2067,7 @@
 +      }
 +
 +      glamofb->fb_res = request_mem_region(glamofb->fb_res->start,
-+                                           GLAMO_FB_ALLOC, pdev->name);
++                                           RESSIZE(glamofb->fb_res), 
pdev->name);
 +      if (!glamofb->fb_res) {
 +              dev_err(&pdev->dev, "failed to request vram region\n");
 +              goto out_release_reg;
@@ -2084,6 +2081,7 @@
 +              goto out_release_fb;
 +      }
 +      fbinfo->fix.smem_start = (unsigned long) glamofb->fb_res->start;
++      fbinfo->fix.smem_len = RESSIZE(glamofb->fb_res);
 +
 +      fbinfo->screen_base = ioremap(glamofb->fb_res->start,
 +                                     RESSIZE(glamofb->fb_res));
@@ -2139,11 +2137,10 @@
 +      fbinfo->var.green.length = 6;
 +      fbinfo->var.blue.length = 5;
 +      fbinfo->var.transp.length = 0;
-+      fbinfo->fix.smem_len = mach_info->xres.max *
-+                             mach_info->yres.max *
-+                             mach_info->bpp.max / 8;
 +
-+      memset(fbinfo->screen_base, 0, fbinfo->fix.smem_len);
++      memset(fbinfo->screen_base, 0, mach_info->xres.max *
++                                     mach_info->yres.max *
++                                     mach_info->bpp.max / 8);
 +
 +      glamo_engine_enable(mach_info->glamo, GLAMO_ENGINE_LCD);
 +      glamo_engine_reset(mach_info->glamo, GLAMO_ENGINE_LCD);
@@ -2242,10 +2239,10 @@
 +MODULE_AUTHOR("Harald Welte <[EMAIL PROTECTED]>");
 +MODULE_DESCRIPTION("Smedia Glamo 336x/337x framebuffer driver");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.23-rc8/include/linux/glamofb.h
+Index: linux-2.6/include/linux/glamofb.h
 ===================================================================
 --- /dev/null
-+++ linux-2.6.23-rc8/include/linux/glamofb.h
++++ linux-2.6/include/linux/glamofb.h
 @@ -0,0 +1,29 @@
 +#ifndef _LINUX_GLAMOFB_H
 +#define _LINUX_GLAMOFB_H
@@ -2276,10 +2273,10 @@
 +int glamofb_cmd_write(struct glamofb_handle *gfb, u_int16_t val);
 +
 +#endif
-Index: linux-2.6.23-rc8/include/linux/spi/glamo.h
+Index: linux-2.6/include/linux/spi/glamo.h
 ===================================================================
 --- /dev/null
-+++ linux-2.6.23-rc8/include/linux/spi/glamo.h
++++ linux-2.6/include/linux/spi/glamo.h
 @@ -0,0 +1,28 @@
 +#ifndef __GLAMO_SPI_H
 +#define __GLAMO_SPI_H
@@ -2309,10 +2306,10 @@
 +
 +
 +#endif
-Index: linux-2.6.23-rc8/drivers/video/glamo/glamo-core.h
+Index: linux-2.6/drivers/video/glamo/glamo-core.h
 ===================================================================
 --- /dev/null
-+++ linux-2.6.23-rc8/drivers/video/glamo/glamo-core.h
++++ linux-2.6/drivers/video/glamo/glamo-core.h
 @@ -0,0 +1,51 @@
 +#ifndef __GLAMO_CORE_H
 +#define __GLAMO_CORE_H
@@ -2365,10 +2362,10 @@
 +void glamo_engine_reset(struct glamo_core *glamo, enum glamo_engine engine);
 +
 +#endif /* __GLAMO_CORE_H */
-Index: linux-2.6.23-rc8/drivers/video/glamo/glamo-gpio.c
+Index: linux-2.6/drivers/video/glamo/glamo-gpio.c
 ===================================================================
 --- /dev/null
-+++ linux-2.6.23-rc8/drivers/video/glamo/glamo-gpio.c
++++ linux-2.6/drivers/video/glamo/glamo-gpio.c
 @@ -0,0 +1,62 @@
 +
 +#include <linux/kernel.h>
@@ -2432,10 +2429,10 @@
 +}
 +EXPORT_SYMBOL(glamo_gpio_cfgpin);
 +
-Index: linux-2.6.23-rc8/drivers/video/glamo/glamo-lcm-spi.c
+Index: linux-2.6/drivers/video/glamo/glamo-lcm-spi.c
 ===================================================================
 --- /dev/null
-+++ linux-2.6.23-rc8/drivers/video/glamo/glamo-lcm-spi.c
++++ linux-2.6/drivers/video/glamo/glamo-lcm-spi.c
 @@ -0,0 +1,241 @@
 +/*
 + * Copyright (C) 2007 OpenMoko, Inc.
@@ -2678,10 +2675,10 @@
 +MODULE_DESCRIPTION("Smedia Glamo 336x/337x LCM serial command SPI Driver");
 +MODULE_AUTHOR("Harald Welte <[EMAIL PROTECTED]>")
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.23-rc8/drivers/video/glamo/glamo-spi-gpio.c
+Index: linux-2.6/drivers/video/glamo/glamo-spi-gpio.c
 ===================================================================
 --- /dev/null
-+++ linux-2.6.23-rc8/drivers/video/glamo/glamo-spi-gpio.c
++++ linux-2.6/drivers/video/glamo/glamo-spi-gpio.c
 @@ -0,0 +1,251 @@
 +/*
 + * Copyright (C) 2007 OpenMoko, Inc.
@@ -2934,10 +2931,10 @@
 +MODULE_DESCRIPTION("Smedia Glamo 336x/337x LCM serial command SPI Driver");
 +MODULE_AUTHOR("Harald Welte <[EMAIL PROTECTED]>")
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.23-rc8/include/linux/glamo-gpio.h
+Index: linux-2.6/include/linux/glamo-gpio.h
 ===================================================================
 --- /dev/null
-+++ linux-2.6.23-rc8/include/linux/glamo-gpio.h
++++ linux-2.6/include/linux/glamo-gpio.h
 @@ -0,0 +1,98 @@
 +#ifndef __GLAMO_GPIO_H
 +#define __GLAMO_GPIO_H




--- End Message ---
_______________________________________________
commitlog mailing list
[email protected]
http://lists.openmoko.org/mailman/listinfo/commitlog

Reply via email to