I'd like to ask for the merge of the following patch into the stable
branch. It's just a rebase of the latest fixes that went into .dev on
top of the stable branch. And Anthony Callegaro verified that this patch
does really fix all remaining tosa problems.

With this patch applied tosa should boot w/o problems with 2.6.24 OE
kernels.

>From 996f640aa84139765af6b791c9796e547c043a67 Mon Sep 17 00:00:00 2001
From: Dmitry Baryshkov <[EMAIL PROTECTED]>
Date: Tue, 18 Nov 2008 04:18:54 +0300
Subject: [PATCH] linux-rp-2.6.24: fix tosa kernel

add two patches: one to correctly initialise the AC97 interface on PXA,
other to fixup the tosa-bl driver (most important thing is pxa_gpio_mode() 
setting).

Signed-off-by: Dmitry Baryshkov <[EMAIL PROTECTED]>
---
 ...97-switch-AC-unit-to-correct-state-before.patch |   56 +++++++++++
 .../linux/linux-rp-2.6.24/tosa/tosa-bl-fixup.diff  |  103 ++++++++++++++++++++
 packages/linux/linux-rp_2.6.24.bb                  |    4 +-
 3 files changed, 162 insertions(+), 1 deletions(-)
 create mode 100644 
packages/linux/linux-rp-2.6.24/tosa/0001-pxa2xx-ac97-switch-AC-unit-to-correct-state-before.patch
 create mode 100644 packages/linux/linux-rp-2.6.24/tosa/tosa-bl-fixup.diff

diff --git 
a/packages/linux/linux-rp-2.6.24/tosa/0001-pxa2xx-ac97-switch-AC-unit-to-correct-state-before.patch
 
b/packages/linux/linux-rp-2.6.24/tosa/0001-pxa2xx-ac97-switch-AC-unit-to-correct-state-before.patch
new file mode 100644
index 0000000..09f0cb9
--- /dev/null
+++ 
b/packages/linux/linux-rp-2.6.24/tosa/0001-pxa2xx-ac97-switch-AC-unit-to-correct-state-before.patch
@@ -0,0 +1,56 @@
+From 688df15bb534519e0698cc8e4a4d9234afd32105 Mon Sep 17 00:00:00 2001
+From: Dmitry Baryshkov <[EMAIL PROTECTED]>
+Date: Fri, 7 Nov 2008 15:50:39 +0300
+Subject: [PATCH] pxa2xx-ac97: switch AC unit to correct state before probing
+
+If AC97 unit is in partially enabled state, early request_irq can trigger
+IRQ storm or even full hang up. Workaround this by forcibly switching ACLINK 
off
+at the start of the probe.
+
+Signed-off-by: Dmitry Baryshkov <[EMAIL PROTECTED]>
+---
+ sound/soc/pxa/pxa2xx-ac97.c |   30 +++++++++++++++++-------------
+ 1 files changed, 17 insertions(+), 13 deletions(-)
+
+Index: linux-2.6.24/sound/soc/pxa/pxa2xx-ac97.c
+===================================================================
+--- linux-2.6.24.orig/sound/soc/pxa/pxa2xx-ac97.c      2008-01-25 
01:58:37.000000000 +0300
++++ linux-2.6.24/sound/soc/pxa/pxa2xx-ac97.c   2008-11-15 20:02:45.396976363 
+0300
+@@ -284,10 +284,6 @@ static int pxa2xx_ac97_probe(struct plat
+ {
+       int ret;
+
+-      ret = request_irq(IRQ_AC97, pxa2xx_ac97_irq, IRQF_DISABLED, "AC97", 
NULL);
+-      if (ret < 0)
+-              goto err;
+-
+       pxa_gpio_mode(GPIO31_SYNC_AC97_MD);
+       pxa_gpio_mode(GPIO30_SDATA_OUT_AC97_MD);
+       pxa_gpio_mode(GPIO28_BITCLK_AC97_MD);
+@@ -296,15 +292,23 @@ static int pxa2xx_ac97_probe(struct plat
+       /* Use GPIO 113 as AC97 Reset on Bulverde */
+       pxa_gpio_mode(113 | GPIO_ALT_FN_2_OUT);
+ #endif
++      GCR = GCR_ACLINK_OFF;
++
+       pxa_set_cken(CKEN_AC97, 1);
++
++      ret = request_irq(IRQ_AC97, pxa2xx_ac97_irq, IRQF_DISABLED, "AC97", 
NULL);
++      if (ret < 0)
++              goto err;
++
++
+       return 0;
+
+- err:
+-      if (CKEN & (1 << CKEN_AC97)) {
++err:
++/*    if (CKEN & (1 << CKEN_AC97)) {*/
+               GCR |= GCR_ACLINK_OFF;
+               free_irq(IRQ_AC97, NULL);
+               pxa_set_cken(CKEN_AC97, 0);
+-      }
++/*    }*/
+       return ret;
+ }
+
diff --git a/packages/linux/linux-rp-2.6.24/tosa/tosa-bl-fixup.diff 
b/packages/linux/linux-rp-2.6.24/tosa/tosa-bl-fixup.diff
new file mode 100644
index 0000000..c4a23d1
--- /dev/null
+++ b/packages/linux/linux-rp-2.6.24/tosa/tosa-bl-fixup.diff
@@ -0,0 +1,103 @@
+Index: linux-2.6.24/drivers/video/backlight/tosa_bl.c
+===================================================================
+--- linux-2.6.24.orig/drivers/video/backlight/tosa_bl.c        2008-11-15 
22:59:51.592985003 +0300
++++ linux-2.6.24/drivers/video/backlight/tosa_bl.c     2008-11-18 
04:08:13.021416618 +0300
+@@ -76,6 +76,8 @@ static void pxa_nssp_output(struct tosa_
+
+ static void tosa_set_backlight(struct tosa_bl_data *data, int brightness)
+ {
++      pr_debug("tosa_set_backlight\n");
++
+       /* SetBacklightDuty */
+       i2c_smbus_write_byte_data(&data->client, DAC_CH2, (unsigned 
char)brightness);
+
+@@ -91,7 +93,7 @@ static void tosa_set_backlight(struct to
+
+ static void tosa_lcd_tg_init(struct tosa_bl_data *data)
+ {
+-      dev_dbg(&data->bl_dev->dev, "tosa_lcd_init\n");
++      pr_debug("tosa_lcd_init\n");
+
+       /* L3V On */
+       set_scoop_gpio( &tosascoop_jc_device.dev,TOSA_SCOOP_JC_TC6393XB_L3V_ON);
+@@ -116,7 +118,7 @@ static void tosa_lcd_tg_on(struct tosa_b
+
+       tosa_lcd_tg_init(data);
+
+-      dev_dbg(&data->bl_dev->dev, "tosa_lcd_on: %04x (%d)\n", value, 
mode->yres);
++      pr_debug("tosa_lcd_on: %04x (%d)\n", value, mode->yres);
+       pxa_nssp_output(data, TG_PNLCTL, value);
+
+       /* TG LCD pannel power up */
+@@ -129,12 +131,15 @@ static void tosa_lcd_tg_on(struct tosa_b
+
+       /* set common voltage */
+       i2c_smbus_write_byte_data(&data->client, DAC_CH1, data->comadj);
++
++      tosa_set_backlight(data, data->bl_dev->props.brightness);
++
+ }
+
+ static void tosa_lcd_tg_off(struct tosa_bl_data *data)
+ {
+       tosa_set_backlight(data, 0);
+-      dev_dbg(&data->bl_dev->dev, "tosa_lcd_off\n");
++      pr_debug("tosa_lcd_off\n");
+       /* TG LCD VHSA off */
+       pxa_nssp_output(data, TG_PINICTL,0x4);
+       mdelay(50);
+@@ -158,8 +163,6 @@ static int tosa_bl_update_status(struct
+       struct tosa_bl_data *data = dev_get_drvdata(&dev->dev);
+       int new_power = max(props->power, props->fb_blank);
+
+-      tosa_set_backlight(data, props->brightness);
+-
+       if (new_power)
+               tosa_lcd_tg_off(data);
+       else
+@@ -223,22 +226,26 @@ static int tosa_bl_detect_client(struct
+
+       err = gpio_request(TOSA_TC6393XB_BL_C20MA, "backlight");
+       if (err) {
+-              dev_dbg(&data->bl_dev->dev, "Unable to request gpio!\n");
++              printk(KERN_ERR "tosa-bl; Unable to request gpio!\n");
+               goto err_gpio_bl;
+       }
+
+       err = gpio_request(TOSA_TC6393XB_TG_ON, "tg");
+       if (err) {
+-              dev_dbg(&data->bl_dev->dev, "Unable to request gpio!\n");
++              printk(KERN_ERR "tosa-bl: Unable to request gpio!\n");
+               goto err_gpio_tg;
+       }
+
+       err = ssp_init(&data->nssp_dev,2,0);
+       if (err) {
+-              dev_err(&data->bl_dev->dev, "Unable to register NSSP 
handler!\n");
++              printk(KERN_ERR "tosa-bl: Unable to register NSSP handler!\n");
+               goto err_ssp_init;
+       }
+
++      pxa_gpio_mode(GPIO83_NSSP_TX);
++      pxa_gpio_mode(GPIO81_NSSP_CLK_OUT);
++      pxa_gpio_mode(GPIO82_NSSP_FRM_OUT);
++
+       /* Tell the i2c layer a new client has arrived */
+       err = i2c_attach_client(client);
+       if (err)
+@@ -269,7 +276,6 @@ static int tosa_bl_detect_client(struct
+ err_fb_register:
+       backlight_device_unregister(data->bl_dev);
+ err_bl_register:
+-      tosa_set_backlight(data, 0);
+       tosa_lcd_tg_off(data);
+
+       err = i2c_detach_client(client);
+@@ -296,7 +302,6 @@ static int tosa_bl_detach_client(struct
+
+       backlight_device_unregister(data->bl_dev);
+
+-      tosa_set_backlight(data, 0);
+       tosa_lcd_tg_off(data);
+
+       /* Try to detach the client from i2c space */
diff --git a/packages/linux/linux-rp_2.6.24.bb 
b/packages/linux/linux-rp_2.6.24.bb
index df732ac..0128adc 100644
--- a/packages/linux/linux-rp_2.6.24.bb
+++ b/packages/linux/linux-rp_2.6.24.bb
@@ -1,6 +1,6 @@
 require linux-rp.inc
 
-PR = "r9"
+PR = "r10"
 
 DEFAULT_PREFERENCE = "-1"
 #DEFAULT_PREFERENCE_collie = "1"
@@ -181,6 +181,8 @@ SRC_URI_append_tosa = "\
            file://tosa/0043-Use-clocklib-for-sa1100-sub-arch.patch;patch=1 \
            
file://tosa/0056-Support-resetting-by-asserting-GPIO-pin.patch;patch=1 \
            file://tosa/0057-Clean-up-tosa-resetting.patch;patch=1 \
+           
file://tosa/0001-pxa2xx-ac97-switch-AC-unit-to-correct-state-before.patch;patch=1
 \
+           file://tosa/tosa-bl-fixup.diff;patch=1 \
            "
 
 SRC_URI_append_akita = "\
-- 
1.5.6.5


-- 
With best wishes
Dmitry


_______________________________________________
Openembedded-stablebranch mailing list
[email protected]
http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-stablebranch

Reply via email to