linux-rp: Fix tosa 2.6.17/18 patches (thanks for hints from CyrilRomain)
authorRichard Purdie <rpurdie@rpsys.net>
Wed, 6 Dec 2006 00:36:03 +0000 (00:36 +0000)
committerRichard Purdie <rpurdie@rpsys.net>
Wed, 6 Dec 2006 00:36:03 +0000 (00:36 +0000)
packages/linux/linux-rp-2.6.17/wm9712-reset-loop-r2.patch [new file with mode: 0644]
packages/linux/linux-rp-2.6.17/wm9712-suspend-cold-res-r2.patch [new file with mode: 0644]
packages/linux/linux-rp-2.6.18/tmio-nand-r7.patch [new file with mode: 0644]
packages/linux/linux-rp-2.6.18/tosa-tmio-lcd-r10.patch [new file with mode: 0644]
packages/linux/linux-rp-2.6.18/wm9712-reset-loop-r2.patch [new file with mode: 0644]
packages/linux/linux-rp-2.6.18/wm9712-suspend-cold-res-r2.patch [new file with mode: 0644]
packages/linux/linux-rp_2.6.17.bb
packages/linux/linux-rp_2.6.18+git.bb
packages/linux/linux-rp_2.6.18.bb

diff --git a/packages/linux/linux-rp-2.6.17/wm9712-reset-loop-r2.patch b/packages/linux/linux-rp-2.6.17/wm9712-reset-loop-r2.patch
new file mode 100644 (file)
index 0000000..96919b6
--- /dev/null
@@ -0,0 +1,44 @@
+ sound/soc/codecs/wm9712.c |   28 ++++++++++++++++++----------
+ 1 file changed, 18 insertions(+), 10 deletions(-)
+
+Index: linux-2.6.18/sound/soc/codecs/wm9712.c
+===================================================================
+--- linux-2.6.18.orig/sound/soc/codecs/wm9712.c        2006-12-05 23:25:33.000000000 +0000
++++ linux-2.6.18/sound/soc/codecs/wm9712.c     2006-12-05 23:27:20.000000000 +0000
+@@ -618,18 +618,26 @@ static int wm9712_dapm_event(struct snd_
+ static int wm9712_reset(struct snd_soc_codec *codec, int try_warm)
+ {
+-      if (try_warm && soc_ac97_ops.warm_reset) {
+-              soc_ac97_ops.warm_reset(codec->ac97);
+-              if (!(ac97_read(codec, 0) & 0x8000))
+-                      return 1;
+-      }
++      int retry = 3;
++ 
++      while (retry--)
++      {
++              if(try_warm && soc_ac97_ops.warm_reset) {
++                      soc_ac97_ops.warm_reset(codec->ac97);
++                      if(ac97_read(codec, 0) & 0x8000)
++                              continue;
++                      else
++                              return 1;
++              }
+-      soc_ac97_ops.reset(codec->ac97);
+-      if (ac97_read(codec, 0) & 0x8000)
+-              goto err;
+-      return 0;
++              soc_ac97_ops.reset(codec->ac97);
++              if(ac97_read(codec, 0) & 0x8000)
++                      continue;
++              else
++                      return 0;
++
++      }
+-err:
+       printk(KERN_ERR "WM9712 AC97 reset failed\n");
+       return -EIO;
+ }
diff --git a/packages/linux/linux-rp-2.6.17/wm9712-suspend-cold-res-r2.patch b/packages/linux/linux-rp-2.6.17/wm9712-suspend-cold-res-r2.patch
new file mode 100644 (file)
index 0000000..e91e54f
--- /dev/null
@@ -0,0 +1,16 @@
+ sound/soc/codecs/wm9712.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: linux-2.6.18/sound/soc/codecs/wm9712.c
+===================================================================
+--- linux-2.6.18.orig/sound/soc/codecs/wm9712.c        2006-12-05 23:19:53.000000000 +0000
++++ linux-2.6.18/sound/soc/codecs/wm9712.c     2006-12-05 23:22:04.000000000 +0000
+@@ -651,7 +651,7 @@ static int wm9712_soc_resume(struct plat
+       int i, ret;
+       u16 *cache = codec->reg_cache;
+-      ret = wm9712_reset(codec, 1);
++      ret = wm9712_reset(codec, 0);
+       if (ret < 0){
+               printk(KERN_ERR "could not reset AC97 codec\n");
+               return ret;
diff --git a/packages/linux/linux-rp-2.6.18/tmio-nand-r7.patch b/packages/linux/linux-rp-2.6.18/tmio-nand-r7.patch
new file mode 100644 (file)
index 0000000..b6ce56e
--- /dev/null
@@ -0,0 +1,593 @@
+ drivers/mtd/nand/Kconfig  |    7 
+ drivers/mtd/nand/Makefile |    1 
+ drivers/mtd/nand/tmio.c   |  554 ++++++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 562 insertions(+)
+
+Index: git/drivers/mtd/nand/tmio.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ git/drivers/mtd/nand/tmio.c        2006-11-07 23:31:12.000000000 +0000
+@@ -0,0 +1,554 @@
++/*
++ * A device driver for NAND flash connected to a Toshiba Mobile IO
++ * controller. This is known to work with the following variants:
++ *    TC6393XB revision 3
++ *
++ * Maintainer: Chris Humbert <mahadri+mtd@drigon.com>
++ *
++ * Copyright (C) 2005 Chris Humbert
++ * Copyright (C) 2005 Dirk Opfer
++ * Copyright (C) 2004 SHARP
++ * Copyright (C) 2002 Lineo Japan, Inc.
++ * Copyright (C) Ian Molton and Sebastian Carlier
++ *
++ * Based on Sharp's NAND driver, sharp_sl_tc6393.c
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#include <linux/module.h>
++#include <linux/types.h>
++#include <linux/delay.h>
++#include <linux/wait.h>
++#include <linux/ioport.h>
++#include <linux/mtd/mtd.h>
++#include <linux/mtd/nand.h>
++#include <linux/mtd/nand_ecc.h>
++#include <linux/mtd/partitions.h>
++#include <asm/io.h>
++#include <asm/hardware/tmio.h>
++
++#include <linux/interrupt.h>
++
++#define mtd_printk(level, mtd, format, arg...)        \
++      printk (level "%s: " format, mtd->name, ## arg)
++#define mtd_warn(mtd, format, arg...)         \
++      mtd_printk (KERN_WARNING, mtd, format, ## arg)
++
++/*--------------------------------------------------------------------------*/
++
++/* tmio_nfcr.mode Register Command List */
++#define FCR_MODE_DATA         0x94    // Data Data_Mode
++#define FCR_MODE_COMMAND      0x95    // Data Command_Mode
++#define FCR_MODE_ADDRESS      0x96    // Data Address_Mode
++
++#define FCR_MODE_HWECC_CALC   0xB4    // HW-ECC Data
++#define FCR_MODE_HWECC_RESULT 0xD4    // HW-ECC Calculation Result Read_Mode
++#define FCR_MODE_HWECC_RESET  0xF4    // HW-ECC Reset
++
++#define FCR_MODE_POWER_ON     0x0C    // Power Supply ON  to SSFDC card
++#define FCR_MODE_POWER_OFF    0x08    // Power Supply OFF to SSFDC card
++
++#define FCR_MODE_LED_OFF      0x00    // LED OFF
++#define FCR_MODE_LED_ON               0x04    // LED ON
++
++#define FCR_MODE_EJECT_ON     0x68    // Ejection Demand from Penguin is Advanced
++#define FCR_MODE_EJECT_OFF    0x08    // Ejection Demand from Penguin is Not Advanced
++
++#define FCR_MODE_LOCK         0x6C    // Operates By Lock_Mode. Ejection Switch is Invalid
++#define FCR_MODE_UNLOCK               0x0C    // Operates By UnLock_Mode.Ejection Switch is Effective
++
++#define FCR_MODE_CONTROLLER_ID        0x40    // Controller ID Read
++#define FCR_MODE_STANDBY      0x00    // SSFDC card Changes Standby State
++
++#define FCR_MODE_WE           0x80
++#define FCR_MODE_ECC1         0x40
++#define FCR_MODE_ECC0         0x20
++#define FCR_MODE_CE           0x10
++#define FCR_MODE_PCNT1                0x08
++#define FCR_MODE_PCNT0                0x04
++#define FCR_MODE_ALE          0x02
++#define FCR_MODE_CLE          0x01
++
++#define FCR_STATUS_BUSY               0x80
++
++/*
++ * NAND Flash Host Controller Configuration Register
++ */
++struct tmio_nfhccr {
++      u8 x00[4];
++      u16     command;        /* 0x04 Command                         */
++      u8 x01[0x0a];
++      u16     base[2];        /* 0x10 NAND Flash Control Reg Base Addr*/
++      u8 x02[0x29];
++      u8      intp;           /* 0x3d Interrupt Pin                   */
++      u8 x03[0x0a];
++      u8      inte;           /* 0x48 Interrupt Enable                */
++      u8 x04;
++      u8      ec;             /* 0x4a Event Control                   */
++      u8 x05;
++      u8      icc;            /* 0x4c Internal Clock Control          */
++      u8 x06[0x0e];
++      u8      eccc;           /* 0x5b ECC Control                     */
++      u8 x07[4];
++      u8      nftc;           /* 0x60 NAND Flash Transaction Control  */
++      u8      nfm;            /* 0x61 NAND Flash Monitor              */
++      u8      nfpsc;          /* 0x62 NAND Flash Power Supply Control */
++      u8      nfdc;           /* 0x63 NAND Flash Detect Control       */
++      u8 x08[0x9c];
++} __attribute__ ((packed));
++
++/*
++ * NAND Flash Control Register
++ */
++struct tmio_nfcr {
++union {
++      u8      u8;             /* 0x00 Data Register                   */
++      u16     u16;
++      u32     u32;
++} __attribute__ ((packed));
++      u8      mode;           /* 0x04 Mode Register                   */
++      u8      status;         /* 0x05 Status Register                 */
++      u8      isr;            /* 0x06 Interrupt Status Register       */
++      u8      imr;            /* 0x07 Interrupt Mask Register         */
++} __attribute__ ((packed));
++
++struct tmio_nand {
++      struct mtd_info                 mtd;
++      struct nand_chip                chip;
++
++      struct tmio_nfhccr __iomem *    ccr;
++      struct tmio_nfcr __iomem *      fcr;
++
++      unsigned int                    irq;
++
++      /* for tmio_nand_read_byte */
++      u8                              read;
++      unsigned                        read_good:1;
++};
++
++#define mtd_to_tmio(m)                        container_of(m, struct tmio_nand, mtd)
++
++/*--------------------------------------------------------------------------*/
++
++static void tmio_nand_hwcontrol(struct mtd_info *mtd, int cmd,
++                                 unsigned int ctrl)
++{
++      struct tmio_nand *tmio = mtd_to_tmio (mtd);
++      struct tmio_nfcr __iomem *fcr = tmio->fcr;
++      struct nand_chip *chip = mtd->priv;
++
++      if (ctrl & NAND_CTRL_CHANGE) {
++              u8 mode;
++
++              if (ctrl & NAND_NCE) {
++                      mode = FCR_MODE_DATA;
++
++                      if (ctrl & NAND_CLE)
++                              mode |=  FCR_MODE_CLE;
++                      else
++                              mode &= ~FCR_MODE_CLE;
++
++                      if (ctrl & NAND_ALE)
++                              mode |=  FCR_MODE_ALE;
++                      else
++                              mode &= ~FCR_MODE_ALE;
++              } else {
++                      mode = FCR_MODE_STANDBY;
++              }
++
++              iowrite8 (mode, &fcr->mode);
++              tmio->read_good = 0;
++      }
++
++      if (cmd != NAND_CMD_NONE)
++              writeb(cmd, chip->IO_ADDR_W);
++}
++
++static int tmio_nand_dev_ready (struct mtd_info* mtd)
++{
++      struct tmio_nand*               tmio    = mtd_to_tmio (mtd);
++      struct tmio_nfcr __iomem *      fcr     = tmio->fcr;
++
++      return !(ioread8 (&fcr->status) & FCR_STATUS_BUSY);
++}
++
++static irqreturn_t tmio_irq (int irq, void *__tmio)
++{
++      struct tmio_nand*               tmio    = __tmio;
++      struct nand_chip*               this    = &tmio->chip;
++      struct tmio_nfcr __iomem *      fcr     = tmio->fcr;
++
++      /* disable RDYREQ interrupt */
++      iowrite8 (0x00, &fcr->imr);
++
++      if (unlikely (!waitqueue_active (&this->controller->wq)))
++              printk (KERN_WARNING TMIO_NAME_NAND ": spurious interrupt\n");
++
++      wake_up (&this->controller->wq);
++      return IRQ_HANDLED;
++}
++
++/*
++ * The TMIO core has a RDYREQ interrupt on the posedge of #SMRB.
++ * This interrupt is normally disabled, but for long operations like
++ * erase and write, we enable it to wake us up.  The irq handler
++ * disables the interrupt.
++ */
++static int
++tmio_nand_wait (struct mtd_info *mtd, struct nand_chip *this)
++{
++      struct tmio_nand*               tmio    = mtd_to_tmio (mtd);
++      struct tmio_nfcr __iomem *      fcr     = tmio->fcr;
++      long                            timeout;
++
++      /* enable RDYREQ interrupt */
++      iowrite8 (0x0f, &fcr->isr);
++      iowrite8 (0x81, &fcr->imr);
++
++      timeout = wait_event_timeout (this->controller->wq, tmio_nand_dev_ready (mtd),
++                      msecs_to_jiffies (this->state == FL_ERASING ? 400 : 20));
++
++      if (unlikely (!tmio_nand_dev_ready (mtd))) {
++              iowrite8 (0x00, &fcr->imr);
++              mtd_warn (mtd, "still busy with %s after %d ms\n",
++                              this->state == FL_ERASING ? "erase" : "program",
++                              this->state == FL_ERASING ? 400 : 20);
++
++      } else if (unlikely (!timeout)) {
++              iowrite8 (0x00, &fcr->imr);
++              mtd_warn (mtd, "timeout waiting for interrupt\n");
++      }
++
++      this->cmdfunc (mtd, NAND_CMD_STATUS, -1, -1);
++      return this->read_byte (mtd);
++}
++
++/*
++ * The TMIO controller combines two 8-bit data bytes into one 16-bit
++ * word. This function separates them so nand_base.c works as expected,
++ * especially its NAND_CMD_READID routines.
++ *
++ * To prevent stale data from being read, tmio_nand_hwcontrol() clears
++ * tmio->read_good.
++ */
++static u_char tmio_nand_read_byte (struct mtd_info *mtd)
++{
++      struct tmio_nand*               tmio    = mtd_to_tmio (mtd);
++      struct tmio_nfcr __iomem *      fcr     = tmio->fcr;
++      unsigned int                    data;
++
++      if (tmio->read_good--)
++              return tmio->read;
++
++      data            = ioread16 (&fcr->u16);
++      tmio->read      = data >> 8;
++      return data;
++}
++
++/*
++ * The TMIO controller converts an 8-bit NAND interface to a 16-bit
++ * bus interface, so all data reads and writes must be 16-bit wide.
++ * Thus, we implement 16-bit versions of the read, write, and verify
++ * buffer functions.
++ */
++static void
++tmio_nand_write_buf (struct mtd_info *mtd, const u_char *buf, int len)
++{
++      struct tmio_nand*               tmio    = mtd_to_tmio (mtd);
++      struct tmio_nfcr __iomem *      fcr     = tmio->fcr;
++
++      iowrite16_rep (&fcr->u16, buf, len >> 1);
++}
++
++static void tmio_nand_read_buf (struct mtd_info *mtd, u_char *buf, int len)
++{
++      struct tmio_nand*               tmio    = mtd_to_tmio (mtd);
++      struct tmio_nfcr __iomem *      fcr     = tmio->fcr;
++
++      ioread16_rep (&fcr->u16, buf, len >> 1);
++}
++
++static int
++tmio_nand_verify_buf (struct mtd_info *mtd, const u_char *buf, int len)
++{
++      struct tmio_nand*               tmio    = mtd_to_tmio (mtd);
++      struct tmio_nfcr __iomem *      fcr     = tmio->fcr;
++      u16*                            p       = (u16*) buf;
++
++      for (len >>= 1; len; len--)
++              if (*(p++) != ioread16 (&fcr->u16))
++                      return -EFAULT;
++      return 0;
++}
++
++static void tmio_nand_enable_hwecc (struct mtd_info* mtd, int mode)
++{
++      struct tmio_nand*               tmio    = mtd_to_tmio (mtd);
++      struct tmio_nfcr __iomem *      fcr     = tmio->fcr;
++
++      iowrite8 (FCR_MODE_HWECC_RESET, &fcr->mode);
++      ioread8 (&fcr->u8);     /* dummy read */
++      iowrite8 (FCR_MODE_HWECC_CALC, &fcr->mode);
++}
++
++static int tmio_nand_calculate_ecc (struct mtd_info* mtd, const u_char* dat,
++                                                      u_char* ecc_code)
++{
++      struct tmio_nand*               tmio    = mtd_to_tmio (mtd);
++      struct tmio_nfcr __iomem *      fcr     = tmio->fcr;
++      unsigned int                    ecc;
++
++      iowrite8 (FCR_MODE_HWECC_RESULT, &fcr->mode);
++
++      ecc = ioread16 (&fcr->u16);
++      ecc_code[1] = ecc;      // 000-255 LP7-0
++      ecc_code[0] = ecc >> 8; // 000-255 LP15-8
++      ecc = ioread16 (&fcr->u16);
++      ecc_code[2] = ecc;      // 000-255 CP5-0,11b
++      ecc_code[4] = ecc >> 8; // 256-511 LP7-0
++      ecc = ioread16 (&fcr->u16);
++      ecc_code[3] = ecc;      // 256-511 LP15-8
++      ecc_code[5] = ecc >> 8; // 256-511 CP5-0,11b
++
++      iowrite8 (FCR_MODE_DATA, &fcr->mode);
++      return 0;
++}
++
++static void tmio_hw_init (struct device *dev, struct tmio_nand *tmio)
++{
++      struct resource*                nfcr    = tmio_resource_control (dev);
++      struct tmio_device*             tdev    = dev_to_tdev (dev);
++      struct tmio_nfhccr __iomem *    ccr     = tmio->ccr;
++      struct tmio_nfcr __iomem *      fcr     = tmio->fcr;
++      unsigned long                   base;
++
++      /* (89h) SMD Buffer ON By TC6393XB SystemConfig gpibfc1 */
++      tdev->ops->clock (dev, 1);
++      tdev->ops->function (dev, 1);
++
++      /* (4Ch) CLKRUN Enable    1st spcrunc */
++      iowrite8 (0x81,                 &ccr->icc);
++
++      /* (10h)BaseAddress    0x1000 spba.spba2 */
++      base = nfcr->start - tdev->iomem->start;
++      iowrite16 (base,                ccr->base + 0);
++      iowrite16 (base >> 16,          ccr->base + 1);
++
++      /* (04h)Command Register I/O spcmd */
++      iowrite8 (0x02,                 &ccr->command);
++
++      /* (62h) Power Supply Control ssmpwc */
++      /* HardPowerOFF - SuspendOFF - PowerSupplyWait_4MS */
++      iowrite8 (0x02,                 &ccr->nfpsc);
++
++      /* (63h) Detect Control ssmdtc */
++      iowrite8 (0x02,                 &ccr->nfdc);
++
++      /* Interrupt status register clear sintst */
++      iowrite8 (0x0f,                 &fcr->isr);
++
++      /* After power supply, Media are reset smode */
++      iowrite8 (FCR_MODE_POWER_ON,    &fcr->mode);
++      iowrite8 (FCR_MODE_COMMAND,     &fcr->mode);
++      iowrite8 (NAND_CMD_RESET,       &fcr->u8);
++
++      /* Standby Mode smode */
++      iowrite8 (FCR_MODE_STANDBY,     &fcr->mode);
++
++      mdelay (5);
++}
++
++static void tmio_hw_stop (struct device *dev, struct tmio_nand *tmio)
++{
++      struct tmio_device*             tdev    = dev_to_tdev (dev);
++      struct tmio_nfcr __iomem *      fcr     = tmio->fcr;
++
++      iowrite8 (FCR_MODE_POWER_OFF,   &fcr->mode);
++      tdev->ops->function (dev, 0);
++      tdev->ops->clock (dev, 0);
++}
++
++/*--------------------------------------------------------------------------*/
++
++#ifdef CONFIG_MTD_PARTITIONS
++static const char *part_probes[] = { "cmdlinepart", NULL };
++#endif
++
++static int tmio_probe (struct device *dev)
++{
++      struct tmio_device*             tdev    = dev_to_tdev (dev);
++      struct tmio_nand_platform_data* tnpd    = dev->platform_data;
++      struct resource*                ccr     = tmio_resource_config (dev);
++      struct resource*                fcr     = tmio_resource_control (dev);
++      struct resource*                irq     = tmio_resource_irq (dev);
++      struct tmio_nand*               tmio;
++      struct mtd_info*                mtd;
++      struct nand_chip*               this;
++      struct mtd_partition*           parts;
++      int                             nbparts = 0;
++      int                             retval;
++
++      if (!tnpd)
++              return -EINVAL;
++
++      retval = request_resource (tdev->iomem, ccr);
++      if (retval)
++              goto err_request_ccr;
++
++      retval = request_resource (tdev->iomem, fcr);
++      if (retval)
++              goto err_request_fcr;
++
++      tmio = kzalloc (sizeof *tmio, GFP_KERNEL);
++      if (!tmio) {
++              retval = -ENOMEM;
++              goto err_kzalloc;
++      }
++
++      dev_set_drvdata (dev, tmio);
++      mtd             = &tmio->mtd;
++      this            = &tmio->chip;
++      mtd->priv       = this;
++      mtd->name       = TMIO_NAME_NAND;
++
++      tmio->ccr = ioremap (ccr->start, ccr->end - ccr->start + 1);
++      if (!tmio->ccr) {
++              retval = -EIO;
++              goto err_iomap_ccr;
++      }
++
++      tmio->fcr = ioremap (fcr->start, fcr->end - fcr->start + 1);
++      if (!tmio->fcr) {
++              retval = -EIO;
++              goto err_iomap_fcr;
++      }
++
++      tmio_hw_init (dev, tmio);
++
++      /* Set address of NAND IO lines */
++      this->IO_ADDR_R         = tmio->fcr;
++      this->IO_ADDR_W         = tmio->fcr;
++
++      /* Set address of hardware control function */
++      this->cmd_ctrl          = tmio_nand_hwcontrol;
++      this->dev_ready         = tmio_nand_dev_ready;
++      this->read_byte         = tmio_nand_read_byte;
++      this->write_buf         = tmio_nand_write_buf;
++      this->read_buf          = tmio_nand_read_buf;
++      this->verify_buf        = tmio_nand_verify_buf;
++
++      /* set eccmode using hardware ECC */
++      this->ecc.mode          = NAND_ECC_HW;
++      this->ecc.size          = 512;
++      this->ecc.bytes         = 6;
++      this->ecc.hwctl         = tmio_nand_enable_hwecc;
++      this->ecc.calculate     = tmio_nand_calculate_ecc;
++      this->ecc.correct       = nand_correct_data;
++      this->badblock_pattern  = tnpd->badblock_pattern;
++
++      /* 15 us command delay time */
++      this->chip_delay        = 15;
++
++      if (irq->start) {
++              retval = request_irq (irq->start, &tmio_irq,
++                                      SA_INTERRUPT, irq->name, tmio);
++              if (!retval) {
++                      tmio->irq       = irq->start;
++                      this->waitfunc  = tmio_nand_wait;
++              } else
++                      mtd_warn (mtd, "request_irq error %d\n", retval);
++      }
++
++      /* Scan to find existence of the device */
++      if (nand_scan (mtd, 1)) {
++              retval = -ENODEV;
++              goto err_scan;
++      }
++
++      /* Register the partitions */
++#ifdef CONFIG_MTD_PARTITIONS
++      nbparts = parse_mtd_partitions (mtd, part_probes, &parts, 0);
++#endif
++      if (nbparts <= 0) {
++              parts   = tnpd->partition;
++              nbparts = tnpd->num_partitions;
++      }
++
++      add_mtd_partitions (mtd, parts, nbparts);
++      return 0;
++
++err_scan:
++      if (tmio->irq)
++              free_irq (tmio->irq, tmio);
++      tmio_hw_stop (dev, tmio);
++      iounmap (tmio->fcr);
++err_iomap_fcr:
++      iounmap (tmio->ccr);
++err_iomap_ccr:
++      kfree (tmio);
++err_kzalloc:
++      release_resource (fcr);
++err_request_fcr:
++      release_resource (ccr);
++err_request_ccr:
++      return retval;
++}
++
++static int tmio_remove (struct device *dev)
++{
++      struct tmio_nand*               tmio    = dev_get_drvdata (dev);
++
++      nand_release (&tmio->mtd);
++      if (tmio->irq)
++              free_irq (tmio->irq, tmio);
++      tmio_hw_stop (dev, tmio);
++      iounmap (tmio->fcr);
++      iounmap (tmio->ccr);
++      kfree (tmio);
++      release_resource (tmio_resource_control (dev));
++      release_resource (tmio_resource_config (dev));
++      return 0;
++}
++
++#ifdef CONFIG_PM
++static int tmio_suspend (struct device *dev, pm_message_t state)
++{
++      tmio_hw_stop (dev, dev_get_drvdata (dev));
++      return 0;
++}
++
++static int tmio_resume (struct device *dev)
++{
++      tmio_hw_init (dev, dev_get_drvdata (dev));
++      return 0;
++}
++#endif
++
++static struct device_driver tmio_driver = {
++      .name           = TMIO_NAME_NAND,
++      .bus            = &tmio_bus_type,
++      .probe          = tmio_probe,
++      .remove         = tmio_remove,
++#ifdef CONFIG_PM
++      .suspend        = tmio_suspend,
++      .resume         = tmio_resume,
++#endif
++};
++
++static int __init tmio_init (void) {
++      return driver_register (&tmio_driver);
++}
++
++static void __exit tmio_exit (void) {
++      driver_unregister (&tmio_driver);
++}
++
++module_init (tmio_init);
++module_exit (tmio_exit);
++
++MODULE_LICENSE ("GPL");
++MODULE_AUTHOR ("Dirk Opfer, Chris Humbert");
++MODULE_DESCRIPTION ("NAND flash driver on Toshiba Mobile IO controller");
+Index: git/drivers/mtd/nand/Kconfig
+===================================================================
+--- git.orig/drivers/mtd/nand/Kconfig  2006-10-31 16:09:03.000000000 +0000
++++ git/drivers/mtd/nand/Kconfig       2006-11-07 22:13:09.000000000 +0000
+@@ -63,6 +63,13 @@ config MTD_NAND_AMS_DELTA
+       help
+         Support for NAND flash on Amstrad E3 (Delta).
++config MTD_NAND_TMIO
++      tristate "NAND Flash device on Toshiba Mobile IO Controller"
++      depends on MTD_NAND && TOSHIBA_TC6393XB
++      help
++        Support for NAND flash connected to a Toshiba Mobile IO
++        Controller in some PDAs, including the Sharp SL6000x.
++
+ config MTD_NAND_TOTO
+       tristate "NAND Flash device on TOTO board"
+       depends on ARCH_OMAP && MTD_NAND && BROKEN
+Index: git/drivers/mtd/nand/Makefile
+===================================================================
+--- git.orig/drivers/mtd/nand/Makefile 2006-10-31 16:09:03.000000000 +0000
++++ git/drivers/mtd/nand/Makefile      2006-11-07 22:13:09.000000000 +0000
+@@ -22,5 +22,6 @@ obj-$(CONFIG_MTD_NAND_TS7250)                += ts7250
+ obj-$(CONFIG_MTD_NAND_NANDSIM)                += nandsim.o
+ obj-$(CONFIG_MTD_NAND_CS553X)         += cs553x_nand.o
+ obj-$(CONFIG_MTD_NAND_NDFC)           += ndfc.o
++obj-$(CONFIG_MTD_NAND_TMIO)           += tmio.o
+ nand-objs = nand_base.o nand_bbt.o
diff --git a/packages/linux/linux-rp-2.6.18/tosa-tmio-lcd-r10.patch b/packages/linux/linux-rp-2.6.18/tosa-tmio-lcd-r10.patch
new file mode 100644 (file)
index 0000000..aef3a04
--- /dev/null
@@ -0,0 +1,472 @@
+ arch/arm/mach-pxa/Kconfig    |    5 
+ arch/arm/mach-pxa/Makefile   |    2 
+ arch/arm/mach-pxa/tosa.c     |   49 +++++-
+ arch/arm/mach-pxa/tosa_lcd.c |  344 +++++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 396 insertions(+), 4 deletions(-)
+
+Index: git/arch/arm/mach-pxa/Makefile
+===================================================================
+--- git.orig/arch/arm/mach-pxa/Makefile        2006-11-07 22:13:10.000000000 +0000
++++ git/arch/arm/mach-pxa/Makefile     2006-11-07 23:29:38.000000000 +0000
+@@ -17,7 +17,7 @@ obj-$(CONFIG_PXA_SHARP_C7xx) += corgi.o 
+ obj-$(CONFIG_PXA_SHARP_Cxx00) += spitz.o corgi_ssp.o corgi_lcd.o sharpsl_pm.o spitz_pm.o
+ obj-$(CONFIG_MACH_AKITA)      += akita-ioexp.o
+ obj-$(CONFIG_MACH_POODLE)     += poodle.o corgi_ssp.o sharpsl_pm.o poodle_pm.o
+-obj-$(CONFIG_MACH_TOSA)         += tosa.o sharpsl_pm.o tosa_pm.o
++obj-$(CONFIG_MACH_TOSA)         += tosa.o sharpsl_pm.o tosa_pm.o tosa_lcd.o
+ obj-$(CONFIG_MACH_HX2750)     += hx2750.o hx2750_test.o
+ # Support for blinky lights
+Index: git/arch/arm/mach-pxa/tosa_lcd.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ git/arch/arm/mach-pxa/tosa_lcd.c   2006-11-07 23:29:25.000000000 +0000
+@@ -0,0 +1,344 @@
++/*
++ *  LCD / Backlight control code for Sharp SL-6000x (tosa)
++ *
++ *  Copyright (c) 2005                Dirk Opfer
++ *
++ *  This program is free software; you can redistribute it and/or modify
++ *  it under the terms of the GNU General Public License version 2 as
++ *  published by the Free Software Foundation.
++ *
++ */
++
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/kernel.h>
++#include <linux/sched.h>
++#include <linux/slab.h>
++#include <linux/delay.h>
++#include <linux/platform_device.h>
++#include <linux/i2c.h>
++#include <linux/fb.h>
++
++#include <asm/mach/sharpsl_param.h>
++#include <asm/hardware.h>
++#include <asm/hardware/scoop.h>
++#include <asm/hardware/tmio.h>
++#include <asm/arch/ssp.h>
++#include <asm/arch/sharpsl.h>
++#include <asm/arch/tosa.h>
++#include <asm/arch/pxa-regs.h>
++
++#define       DAC_BASE        0x4e
++#define DAC_CH1               0
++#define DAC_CH2               1
++
++#define TG_REG0_VQV   0x0001
++#define TG_REG0_COLOR 0x0002
++#define TG_REG0_UD    0x0004
++#define TG_REG0_LR    0x0008
++#define COMADJ_DEFAULT        97
++#define TOSA_LCD_I2C_DEVICEID 0x4711                  // Fixme: new value
++
++static void tosa_lcd_tg_init(struct device *dev);
++static void tosa_lcd_tg_on(struct device *dev, const struct fb_videomode *mode);
++static void tosa_lcd_tg_off(struct device *dev);
++static void tosa_set_backlight(int intensity);
++
++const static struct tmio_lcd_ops tosa_tc6393_lcd_ops = {
++      .init = tosa_lcd_tg_init,
++      .tg_on = tosa_lcd_tg_on,
++      .tg_off = tosa_lcd_tg_off,
++};
++
++static struct platform_device *tosabl_device;
++static struct i2c_driver tosa_driver;
++static struct i2c_client* tosa_i2c_dac;
++static int initialised;
++static int comadj;
++static int bl_intensity;
++static struct ssp_dev tosa_nssp_dev;
++static struct ssp_state tosa_nssp_state;
++static spinlock_t tosa_nssp_lock;
++
++static unsigned short normal_i2c[] = {
++      DAC_BASE,
++      I2C_CLIENT_END 
++};
++I2C_CLIENT_INSMOD;
++
++static struct corgibl_machinfo tosa_bl_machinfo = {
++      .max_intensity = 255,
++      .default_intensity = 68,
++      .limit_mask = 0x0b,
++      .set_bl_intensity = tosa_set_backlight,
++};
++
++int tosa_bl_intensity(void)
++{
++      return bl_intensity;
++}
++
++static void pxa_nssp_output(unsigned char reg, unsigned char data)
++{
++      unsigned long flag, dummy;
++      u32 dat = ( ((reg << 5) & 0xe0) | (data & 0x1f) );
++      spin_lock_irqsave(&tosa_nssp_lock, flag);
++
++      ssp_config(&tosa_nssp_dev, (SSCR0_Motorola | (SSCR0_DSS & 0x07 )), 0, 0, SSCR0_SerClkDiv(128));
++      ssp_enable(&tosa_nssp_dev);
++
++      ssp_write_word(&tosa_nssp_dev,dat);
++
++      /* Read null data back from device to prevent SSP overflow */
++      ssp_read_word(&tosa_nssp_dev, &dummy);
++      ssp_disable(&tosa_nssp_dev);
++      spin_unlock_irqrestore(&tosa_nssp_lock, flag);
++
++}
++
++static void tosa_set_backlight(int intensity)
++{
++      if (!tosa_i2c_dac)
++              return;
++
++      bl_intensity = intensity;
++      /* SetBacklightDuty */
++      i2c_smbus_write_byte_data(tosa_i2c_dac, DAC_CH2, (unsigned char)intensity);
++
++      /* SetBacklightVR */
++      if (intensity)
++              set_tc6393_gpio(&tc6393_device.dev,TOSA_TC6393_BL_C20MA);
++      else
++              reset_tc6393_gpio(&tc6393_device.dev,TOSA_TC6393_BL_C20MA);
++
++      /* bl_enable GP04=1 otherwise GP04=0*/
++      pxa_nssp_output(TG_GPODR2, intensity ? 0x01 : 0x00);    
++}
++
++static void tosa_lcd_tg_init(struct device *dev)
++{
++      /* L3V On */
++      set_scoop_gpio( &tosascoop_jc_device.dev,TOSA_SCOOP_JC_TC3693_L3V_ON); 
++      mdelay(60);
++
++      /* TG On */
++      reset_tc6393_gpio(&tc6393_device.dev,TOSA_TC6393_TG_ON);
++      mdelay(60);
++
++      pxa_nssp_output(TG_TPOSCTL,0x00);       /* delayed 0clk TCTL signal for VGA */
++      pxa_nssp_output(TG_GPOSR,0x02);         /* GPOS0=powercontrol, GPOS1=GPIO, GPOS2=TCTL */
++}
++
++static void tosa_lcd_tg_on(struct device *dev, const struct fb_videomode *mode)
++{
++      const int value = TG_REG0_COLOR | TG_REG0_UD | TG_REG0_LR;
++      pxa_nssp_output(TG_PNLCTL, value | (mode->yres == 320 ? 0 :  TG_REG0_VQV));
++
++      /* TG LCD pannel power up */
++      pxa_nssp_output(TG_PINICTL,0x4);
++      mdelay(50);
++
++      /* TG LCD GVSS */
++      pxa_nssp_output(TG_PINICTL,0x0);
++
++      if (!initialised)
++      {
++              /* after the pannel is powered up the first time, we can access the i2c bus */
++              /* so probe for the DAC */
++              i2c_add_driver(&tosa_driver);
++              initialised = 1;
++              mdelay(50);
++      }
++      if (tosa_i2c_dac)
++              /* set common voltage */
++              i2c_smbus_write_byte_data(tosa_i2c_dac, DAC_CH1, comadj);
++
++}
++
++static void tosa_lcd_tg_off(struct device *dev)
++{
++      /* TG LCD VHSA off */
++      pxa_nssp_output(TG_PINICTL,0x4);
++      mdelay(50);
++      
++      /* TG LCD signal off */
++      pxa_nssp_output(TG_PINICTL,0x6);
++      mdelay(50);
++      
++      /* TG Off */
++      set_tc6393_gpio(&tc6393_device.dev, TOSA_TC6393_TG_ON);
++      mdelay(100);
++      
++      /* L3V Off */
++      reset_scoop_gpio( &tosascoop_jc_device.dev,TOSA_SCOOP_JC_TC3693_L3V_ON); 
++}
++
++static int tosa_detect_client(struct i2c_adapter* adapter, int address, int kind) {
++      int err = 0;
++
++      printk("Tosa-LCD: DAC detected address:0x%2.2x\n",address);
++      if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA ))
++              goto ERROR0;
++
++      if (!(tosa_i2c_dac = (struct i2c_client*)kzalloc(sizeof(*tosa_i2c_dac), GFP_KERNEL))) {
++              err = -ENOMEM;
++              goto ERROR0;
++      }
++
++      //i2c_set_clientdata(tosa_i2c_dac, data);
++      tosa_i2c_dac->addr = address;
++      tosa_i2c_dac->adapter = adapter;
++      tosa_i2c_dac->driver = &tosa_driver;
++      tosa_i2c_dac->dev.parent = &tc6393_device.dev;
++      strcpy(tosa_i2c_dac->name, "tosa lcd");
++      if ((err = i2c_attach_client(tosa_i2c_dac)))
++              goto ERROR3;
++
++      /* Now i2c is ready, allocate the backlight device*/
++      tosabl_device = platform_device_alloc("corgi-bl", -1);
++      if (!tosabl_device) {
++              err = -ENOMEM;
++              goto ERROR4;
++      }
++
++      /* set parent device */
++      tosabl_device->dev.parent = &tosa_i2c_dac->dev;
++      tosabl_device->dev.platform_data  = &tosa_bl_machinfo;
++
++      err = platform_device_add(tosabl_device);
++
++      if (err)
++              platform_device_put(tosabl_device);
++
++      /* set common voltage */
++      i2c_smbus_write_byte_data(tosa_i2c_dac, DAC_CH1, comadj);
++
++      return 0;
++ERROR4:
++      i2c_detach_client(tosa_i2c_dac);
++ERROR3:
++      kfree(tosa_i2c_dac);
++ERROR0:
++      return err;
++}
++
++static int tosa_attach_adapter(struct i2c_adapter* adapter) {
++      return i2c_probe(adapter, &addr_data, &tosa_detect_client);
++}
++
++static int tosa_detach_client(struct i2c_client* client) {
++      int err;
++
++      if ((err = i2c_detach_client(client))) {
++              printk(KERN_ERR "tosa: Cannot deregister client\n");
++              return err;
++      }
++      kfree(client);
++      return 0;
++}
++
++static struct i2c_driver tosa_driver={
++      .id             = TOSA_LCD_I2C_DEVICEID,
++      .attach_adapter = tosa_attach_adapter,
++      .detach_client  = tosa_detach_client,
++};
++
++static int __init tosa_lcd_probe(struct platform_device *pdev)
++{
++      int ret;
++      spin_lock_init(&tosa_nssp_lock);
++
++      if (!pdev->dev.platform_data)
++              return -EINVAL;
++
++      /* Set Common Voltage */
++      comadj = sharpsl_param.comadj == -1 ? COMADJ_DEFAULT : sharpsl_param.comadj;
++
++      ret=ssp_init(&tosa_nssp_dev,2,0);
++
++      /* initialize SSP */
++      pxa_gpio_mode(GPIO83_NSSP_TX);
++      pxa_gpio_mode(GPIO81_NSSP_CLK_OUT);
++      pxa_gpio_mode(GPIO82_NSSP_FRM_OUT);
++
++      if (ret) 
++              printk(KERN_ERR "Unable to register NSSP handler!\n");
++      else {
++              struct tmio_lcd_ops* *tmio_ops = pdev->dev.platform_data;
++              ssp_disable(&tosa_nssp_dev);
++              initialised = 0;
++
++              /* Set the lcd functions */
++              *tmio_ops = (struct tmio_lcd_ops*) &tosa_tc6393_lcd_ops;
++      }
++
++      return ret;
++}
++
++static int tosa_lcd_remove(struct platform_device *pdev)
++{
++      /* delete the lcd functions */
++      struct tmio_lcd_ops* *tmio_ops = pdev->dev.platform_data;
++      *tmio_ops = NULL;
++      
++      ssp_exit(&tosa_nssp_dev);
++      
++      if (tosa_i2c_dac) {
++              i2c_detach_client(tosa_i2c_dac);
++              kfree(tosa_i2c_dac);
++      }
++
++      return 0;
++}
++
++#ifdef CONFIG_PM 
++
++static int tosa_lcd_suspend(struct platform_device *pdev, pm_message_t state)
++{
++      ssp_flush(&tosa_nssp_dev);
++      ssp_save_state(&tosa_nssp_dev,&tosa_nssp_state);
++      return 0;
++}
++
++static int tosa_lcd_resume(struct platform_device *pdev)
++{
++      printk("tosa_lcd_resume\n");
++      ssp_restore_state(&tosa_nssp_dev,&tosa_nssp_state);
++      ssp_enable(&tosa_nssp_dev);
++      printk("tosa_lcd_resume ok\n"); 
++      return 0;
++}
++#else
++
++#define tosa_lcd_suspend NULL
++#define tosa_lcd_resume NULL
++
++#endif
++
++
++static struct platform_driver tosalcd_driver = {
++      .probe          = tosa_lcd_probe,
++      .remove         = tosa_lcd_remove,
++      .suspend        = tosa_lcd_suspend,
++      .resume         = tosa_lcd_resume,
++      .driver         = {
++              .name           = "tosa-lcd",
++      },
++};
++
++static int __init tosa_lcd_init(void)
++{
++      return platform_driver_register(&tosalcd_driver);
++}
++
++static void __exit tosa_lcd_cleanup (void)
++{
++      platform_driver_unregister (&tosalcd_driver);
++}
++
++device_initcall(tosa_lcd_init);
++module_exit (tosa_lcd_cleanup);
++
++MODULE_DESCRIPTION ("Tosa LCD device");
++MODULE_AUTHOR ("Dirk Opfer");
++MODULE_LICENSE ("GPL v2");
+Index: git/arch/arm/mach-pxa/tosa.c
+===================================================================
+--- git.orig/arch/arm/mach-pxa/tosa.c  2006-11-07 22:13:10.000000000 +0000
++++ git/arch/arm/mach-pxa/tosa.c       2006-11-07 23:29:38.000000000 +0000
+@@ -24,6 +24,7 @@
+ #include <linux/mtd/partitions.h>
+ #include <linux/pm.h>
+ #include <linux/delay.h>
++#include <linux/fb.h>
+ #include <asm/setup.h>
+ #include <asm/memory.h>
+@@ -48,7 +49,6 @@
+ #include "generic.h"
+-
+ /*
+  * SCOOP Device
+  */
+@@ -345,7 +345,38 @@ static struct tmio_nand_platform_data to
+       .badblock_pattern = &tosa_tc6393_nand_bbt,
+ };
+-extern struct tmio_lcd_platform_data tosa_tc6393_lcd_platform_data;
++static struct fb_videomode tosa_tc6393_lcd_mode[] = {
++    {
++        .xres = 480,
++        .yres = 640,
++        .pixclock = 0x002cdf00,/* PLL divisor */
++        .left_margin = 0x004c,
++        .right_margin = 0x005b,
++        .upper_margin = 0x0001,
++        .lower_margin = 0x000d,
++        .hsync_len = 0x0002,
++        .vsync_len = 0x0001,
++        .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
++        .vmode = FB_VMODE_NONINTERLACED,
++    },{
++      .xres = 240,
++      .yres = 320,
++      .pixclock = 0x00e7f203,/* PLL divisor */
++      .left_margin = 0x0024,
++      .right_margin = 0x002f,
++      .upper_margin = 0x0001,
++      .lower_margin = 0x000d,
++      .hsync_len = 0x0002,
++      .vsync_len = 0x0001,
++      .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
++      .vmode = FB_VMODE_NONINTERLACED,
++}};
++
++struct tmio_lcd_platform_data tosa_tc6393_lcd_platform_data = {
++    .ops = NULL,
++    .modelist = tosa_tc6393_lcd_mode,
++    .num_modes = ARRAY_SIZE(tosa_tc6393_lcd_mode),
++};
+ static struct tmio_cell tosa_tc6393_cells[] = {
+       {
+@@ -384,6 +415,19 @@ struct platform_device tc6393_device = {
+       .num_resources  = ARRAY_SIZE(tc6393_resources),
+       .resource       = tc6393_resources,
+ };
++EXPORT_SYMBOL (tc6393_device);
++
++/*
++ * Tosa LCD / Backlight stuff
++ */
++static struct platform_device tosalcd_device = {
++    .name     = "tosa-lcd",
++    .id               = -1,
++    .dev      = {
++      .parent = &tc6393_device.dev,
++      .platform_data = &tosa_tc6393_lcd_platform_data.ops,
++    },
++};
+ static struct platform_device *devices[] __initdata = {
+       &tosascoop_device,
+@@ -391,6 +435,7 @@ static struct platform_device *devices[]
+       &tosakbd_device,
+       &tosaled_device,
+       &tc6393_device,
++      &tosalcd_device,
+ };
+ static void tosa_poweroff(void)
+Index: git/arch/arm/mach-pxa/Kconfig
+===================================================================
+--- git.orig/arch/arm/mach-pxa/Kconfig 2006-11-07 22:13:10.000000000 +0000
++++ git/arch/arm/mach-pxa/Kconfig      2006-11-07 22:13:10.000000000 +0000
+@@ -129,7 +129,10 @@ config MACH_TOSA
+       bool "Enable Sharp SL-6000x (Tosa) Support"
+       depends PXA_SHARPSL_25x
+       select TOSHIBA_TC6393XB
+-      select SHARPSL_PM       
++      select I2C
++      select I2C_PXA
++      select SHARPSL_PM
++      select PXA_SSP
+ config PXA25x
+       bool
diff --git a/packages/linux/linux-rp-2.6.18/wm9712-reset-loop-r2.patch b/packages/linux/linux-rp-2.6.18/wm9712-reset-loop-r2.patch
new file mode 100644 (file)
index 0000000..96919b6
--- /dev/null
@@ -0,0 +1,44 @@
+ sound/soc/codecs/wm9712.c |   28 ++++++++++++++++++----------
+ 1 file changed, 18 insertions(+), 10 deletions(-)
+
+Index: linux-2.6.18/sound/soc/codecs/wm9712.c
+===================================================================
+--- linux-2.6.18.orig/sound/soc/codecs/wm9712.c        2006-12-05 23:25:33.000000000 +0000
++++ linux-2.6.18/sound/soc/codecs/wm9712.c     2006-12-05 23:27:20.000000000 +0000
+@@ -618,18 +618,26 @@ static int wm9712_dapm_event(struct snd_
+ static int wm9712_reset(struct snd_soc_codec *codec, int try_warm)
+ {
+-      if (try_warm && soc_ac97_ops.warm_reset) {
+-              soc_ac97_ops.warm_reset(codec->ac97);
+-              if (!(ac97_read(codec, 0) & 0x8000))
+-                      return 1;
+-      }
++      int retry = 3;
++ 
++      while (retry--)
++      {
++              if(try_warm && soc_ac97_ops.warm_reset) {
++                      soc_ac97_ops.warm_reset(codec->ac97);
++                      if(ac97_read(codec, 0) & 0x8000)
++                              continue;
++                      else
++                              return 1;
++              }
+-      soc_ac97_ops.reset(codec->ac97);
+-      if (ac97_read(codec, 0) & 0x8000)
+-              goto err;
+-      return 0;
++              soc_ac97_ops.reset(codec->ac97);
++              if(ac97_read(codec, 0) & 0x8000)
++                      continue;
++              else
++                      return 0;
++
++      }
+-err:
+       printk(KERN_ERR "WM9712 AC97 reset failed\n");
+       return -EIO;
+ }
diff --git a/packages/linux/linux-rp-2.6.18/wm9712-suspend-cold-res-r2.patch b/packages/linux/linux-rp-2.6.18/wm9712-suspend-cold-res-r2.patch
new file mode 100644 (file)
index 0000000..e91e54f
--- /dev/null
@@ -0,0 +1,16 @@
+ sound/soc/codecs/wm9712.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: linux-2.6.18/sound/soc/codecs/wm9712.c
+===================================================================
+--- linux-2.6.18.orig/sound/soc/codecs/wm9712.c        2006-12-05 23:19:53.000000000 +0000
++++ linux-2.6.18/sound/soc/codecs/wm9712.c     2006-12-05 23:22:04.000000000 +0000
+@@ -651,7 +651,7 @@ static int wm9712_soc_resume(struct plat
+       int i, ret;
+       u16 *cache = codec->reg_cache;
+-      ret = wm9712_reset(codec, 1);
++      ret = wm9712_reset(codec, 0);
+       if (ret < 0){
+               printk(KERN_ERR "could not reset AC97 codec\n");
+               return ret;
index cec88f3..a74806f 100644 (file)
@@ -111,11 +111,11 @@ SRC_URI_append_tosa = "\
           ${DOSRC}/tosa-tmio-lcd-r8.patch;patch=1 \
           ${DOSRC}/tosa-bluetooth-r8.patch;patch=1 \
           ${DOSRC}/wm97xx-lg7-r0.patch;patch=1 \
-          ${DOSRC}/wm9712-suspend-cold-res-r1.patch;patch=1 \
+          file://wm9712-suspend-cold-res-r2.patch;patch=1 \
           ${DOSRC}/sharpsl-pm-postresume-r0.patch;patch=1 \
           ${DOSRC}/wm97xx-dig-restore-r0.patch;patch=1 \
           ${DOSRC}/wm97xx-miscdevs-resume-r0.patch;patch=1 \
-          ${DOSRC}/wm9712-reset-loop-r1.patch;patch=1 \
+          file://wm9712-reset-loop-r2.patch;patch=1 \
           file://tosa-lcdnoise-r0.patch;patch=1 \
           file://wm97xx-lcdnoise-r0.patch;patch=1 "
 #         ${DOSRC}/tosa-asoc-r1.patch;patch=1 "
index c8e9a58..ada3590 100644 (file)
@@ -16,7 +16,7 @@ DEFAULT_PREFERENCE = "-1"
 # Hacks should clearly named and at the bottom
 #           ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.14-rc2/2.6.14-rc2-mm1/2.6.14-rc2-mm1.bz2;patch=1 \          
 SRC_URI = "git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git;protocol=git;tag=ae99a78af33f00565a05dbbc6ca9b247fed002c5 \
-           ${RPSRC}/alsa/asoc-v0.12.patch;patch=1 \
+           ${RPSRC}/alsa/asoc-v0.12.4.patch;patch=1 \
            ${RPSRC}/asoc_makefile-r1.patch;patch=1 \
            ${RPSRC}/hx2750_base-r27.patch;patch=1 \
            ${RPSRC}/hx2750_bl-r7.patch;patch=1 \
index 3307bf6..2d94bd6 100644 (file)
@@ -1,6 +1,6 @@
 require linux-rp.inc
 
-PR = "r5"
+PR = "r6"
 
 # Handy URLs
 # git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git;protocol=git;tag=ef7d1b244fa6c94fb76d5f787b8629df64ea4046
@@ -13,7 +13,7 @@ PR = "r5"
 # Patches submitted upstream are towards top of this list 
 # Hacks should clearly named and at the bottom
 SRC_URI = "http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.tar.bz2 \
-           ${RPSRC}/alsa/asoc-v0.12.patch;patch=1 \
+           ${RPSRC}/alsa/asoc-v0.12.4.patch;patch=1 \
            ${RPSRC}/asoc_makefile-r1.patch;patch=1 \
            ${RPSRC}/poodle_audio-r6.patch;patch=1 \
            ${RPSRC}/hx2750_base-r27.patch;patch=1 \
@@ -84,21 +84,21 @@ SRC_URI_append_tosa = "\
            ${CHSRC}/usb-ohci-hooks-r1.patch;patch=1 \
            ${CHSRC}/tmio-core-r4.patch;patch=1 \
            file://tmio-tc6393-r7.patch;patch=1 \
-           file://tmio-nand-r6.patch;patch=1 \
+           file://tmio-nand-r7.patch;patch=1 \
            file://tmio-ohci-r5.patch;patch=1 \
            ${CHSRC}/tmio-fb-r6.patch;patch=1 \
            ${DOSRC}/tosa-keyboard-r17.patch;patch=1 \
            ${DOSRC}/tosa-pxaac97-r6.patch;patch=1 \
            ${DOSRC}/tosa-tmio-r6.patch;patch=1 \
            ${DOSRC}/tosa-power-r17.patch;patch=1 \
-           file://tosa-tmio-lcd-r9.patch;patch=1 \
+           file://tosa-tmio-lcd-r10.patch;patch=1 \
            ${DOSRC}/tosa-bluetooth-r8.patch;patch=1 \
            ${DOSRC}/wm97xx-lg7-r0.patch;patch=1 \
-           ${DOSRC}/wm9712-suspend-cold-res-r1.patch;patch=1 \
+           file://wm9712-suspend-cold-res-r2.patch;patch=1 \
            ${DOSRC}/sharpsl-pm-postresume-r0.patch;patch=1 \
            ${DOSRC}/wm97xx-dig-restore-r0.patch;patch=1 \
            ${DOSRC}/wm97xx-miscdevs-resume-r0.patch;patch=1 \
-           ${DOSRC}/wm9712-reset-loop-r1.patch;patch=1 \
+           file://wm9712-reset-loop-r2.patch;patch=1 \
            file://tosa-lcdnoise-r1.patch;patch=1 \
            file://wm97xx-lcdnoise-r0.patch;patch=1 "
 #          ${DOSRC}/tosa-asoc-r1.patch;patch=1 "