[oe-commits] org.oe.dev linux-openzaurus: added patches from mikearthur to fix TS on tosa

hrw commit openembedded-commits at lists.openembedded.org
Wed Aug 30 13:28:24 UTC 2006


linux-openzaurus: added patches from mikearthur to fix TS on tosa

Author: hrw at openembedded.org
Branch: org.openembedded.dev
Revision: f07209e13ea4b7f60145e80b883d99db259c7c8c
ViewMTN: http://monotone.openembedded.org/revision.psp?id=f07209e13ea4b7f60145e80b883d99db259c7c8c
Files:
1
packages/linux/linux-openzaurus-2.6.17/tosa-lcdnoise-r0.patch
packages/linux/linux-openzaurus-2.6.17/wm97xx-lcdnoise-r0.patch
packages/linux/linux-openzaurus_2.6.17.bb
Diffs:

#
# mt diff -r708df891f9f12bc072e9dea6f782a23aa35bbc9e -rf07209e13ea4b7f60145e80b883d99db259c7c8c
#
# 
# 
# add_file "packages/linux/linux-openzaurus-2.6.17/tosa-lcdnoise-r0.patch"
#  content [1cdfc29ab8f29ca5dbbbd7314cde51f5b3be6e59]
# 
# add_file "packages/linux/linux-openzaurus-2.6.17/wm97xx-lcdnoise-r0.patch"
#  content [f3d77590d33c723c46416833e88f28293f41626b]
# 
# patch "packages/linux/linux-openzaurus_2.6.17.bb"
#  from [9f0bc3228b7917275611e8d38746cd942a4a3cbb]
#    to [a17f34bbc72eabf694be1bc22eacac890f846f43]
# 
============================================================
--- packages/linux/linux-openzaurus-2.6.17/tosa-lcdnoise-r0.patch	1cdfc29ab8f29ca5dbbbd7314cde51f5b3be6e59
+++ packages/linux/linux-openzaurus-2.6.17/tosa-lcdnoise-r0.patch	1cdfc29ab8f29ca5dbbbd7314cde51f5b3be6e59
@@ -0,0 +1,157 @@
+Index: linux-tosa/arch/arm/mach-pxa/tosa.c
+===================================================================
+--- linux-tosa.orig/arch/arm/mach-pxa/tosa.c	2006-08-29 16:52:59.000000000 +0100
++++ linux-tosa/arch/arm/mach-pxa/tosa.c	2006-08-29 16:55:25.959706776 +0100
+@@ -2,6 +2,7 @@
+  *  Support for Sharp SL-C6000x PDAs
+  *  Model: (Tosa)
+  *
++ *  Copyright (c) 2006 Wolfson Microelectronics PLC.
+  *  Copyright (c) 2005 Dirk Opfer
+  *
+  *	Based on code written by Sharp/Lineo for 2.4 kernels
+@@ -46,6 +47,8 @@
+ #include <asm/hardware/tmio.h>
+ #include <asm/mach/sharpsl_param.h>
+ 
++#include <linux/wm97xx.h>
++
+ #include "generic.h"
+ 
+ /*
+@@ -428,6 +431,16 @@
+     },
+ };
+ 
++
++/*
++ * Tosa Touchscreen device
++ */
++
++static struct wm97xx_machinfo tosa_ts_machinfo = {
++    .get_hsync_time   = tosa_get_hsync_time,
++    .wait_hsync       = tosa_wait_hsync,
++};
++
+ /*
+  * Tosa Blueooth
+  */
+@@ -457,6 +470,7 @@
+ 	GPSR(TOSA_GPIO_ON_RESET) = GPIO_bit(TOSA_GPIO_ON_RESET);
+ 
+ 	mdelay(1000);
++    wm97xx_unset_machinfo();
+ }
+ 
+ static void tosa_restart(void)
+@@ -501,6 +515,8 @@
+ 	platform_scoop_config = &tosa_pcmcia_config;
+ 
+ 	platform_add_devices(devices, ARRAY_SIZE(devices));
++
++    wm97xx_set_machinfo(&tosa_ts_machinfo);
+ }
+ 
+ static void __init fixup_tosa(struct machine_desc *desc,
+Index: linux-tosa/arch/arm/mach-pxa/tosa_lcd.c
+===================================================================
+--- linux-tosa.orig/arch/arm/mach-pxa/tosa_lcd.c	2006-08-29 16:52:59.000000000 +0100
++++ linux-tosa/arch/arm/mach-pxa/tosa_lcd.c	2006-08-29 16:55:32.818664056 +0100
+@@ -1,6 +1,7 @@
+ /*
+  *  LCD / Backlight control code for Sharp SL-6000x (tosa)
+  *
++ *  Copyright (c) 2006      Wolfson Microelectronics PLC.
+  *  Copyright (c) 2005		Dirk Opfer
+  *
+  *  This program is free software; you can redistribute it and/or modify
+@@ -59,6 +60,8 @@
+ static struct ssp_dev tosa_nssp_dev;
+ static struct ssp_state tosa_nssp_state;
+ static spinlock_t tosa_nssp_lock;
++static int blanked;
++static unsigned long hsync_time;
+ 
+ static unsigned short normal_i2c[] = {
+ 	DAC_BASE,
+@@ -130,6 +133,17 @@
+ 	pxa_nssp_output(TG_GPOSR,0x02);		/* GPOS0=powercontrol, GPOS1=GPIO, GPOS2=TCTL */
+ }
+ 
++static unsigned long calc_hsync_time(const struct fb_videomode *mode) {
++    /* The 25 and 44 'magic numbers' are from Sharp's 2.4 patches */
++    if (mode->yres == 640) {
++        return 25;
++    }
++    if (mode->yres == 320) {
++        return 44;
++    }
++    return 0;
++}
++
+ 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;
+@@ -154,6 +168,8 @@
+ 		/* set common voltage */
+ 		i2c_smbus_write_byte_data(tosa_i2c_dac, DAC_CH1, comadj);
+ 
++    blanked = 0;
++    hsync_time = calc_hsync_time(mode);
+ }
+ 
+ static void tosa_lcd_tg_off(struct device *dev)
+@@ -172,6 +188,8 @@
+ 	
+ 	/* L3V Off */
+ 	reset_scoop_gpio( &tosascoop_jc_device.dev,TOSA_SCOOP_JC_TC3693_L3V_ON); 
++
++    blanked = 1;
+ }
+ 
+ static int tosa_detect_client(struct i2c_adapter* adapter, int address, int kind) {
+@@ -238,6 +256,23 @@
+ 	return 0;
+ }
+ 
++unsigned long tosa_get_hsync_time(void)
++{
++/* This method should eventually contain the correct algorithm for calculating
++   the hsync_time */
++    if (blanked)
++        return 0;
++    else
++        return hsync_time;
++}
++
++void tosa_wait_hsync(void)
++{
++    /* Waits for a rising edge on the VGA line */
++    while((GPLR(TOSA_GPIO_VGA_LINE) & GPIO_bit(TOSA_GPIO_VGA_LINE)) == 0);
++    while((GPLR(TOSA_GPIO_VGA_LINE) & GPIO_bit(TOSA_GPIO_VGA_LINE)) != 0);
++}
++
+ static struct i2c_driver tosa_driver={
+ 	.id		= TOSA_LCD_I2C_DEVICEID,
+ 	.attach_adapter	= tosa_attach_adapter,
+Index: linux-tosa/include/asm-arm/arch-pxa/tosa.h
+===================================================================
+--- linux-tosa.orig/include/asm-arm/arch-pxa/tosa.h	2006-08-29 16:52:59.000000000 +0100
++++ linux-tosa/include/asm-arm/arch-pxa/tosa.h	2006-08-29 16:55:12.442761664 +0100
+@@ -1,6 +1,7 @@
+ /*
+  * Hardware specific definitions for Sharp SL-C6000x series of PDAs
+  *
++ * Copyright (c) 2006 Wolfson Microelectronics PLC.
+  * Copyright (c) 2005 Dirk Opfer
+  *
+  * Based on Sharp's 2.4 kernel patches
+@@ -187,4 +188,8 @@
+ extern struct platform_device tosascoop_jc_device;
+ extern struct platform_device tosascoop_device;
+ extern struct platform_device tc6393_device;
++
++unsigned long tosa_get_hsync_time(void);
++void tosa_wait_hsync(void);
++
+ #endif /* _ASM_ARCH_TOSA_H_ */
============================================================
--- packages/linux/linux-openzaurus-2.6.17/wm97xx-lcdnoise-r0.patch	f3d77590d33c723c46416833e88f28293f41626b
+++ packages/linux/linux-openzaurus-2.6.17/wm97xx-lcdnoise-r0.patch	f3d77590d33c723c46416833e88f28293f41626b
@@ -0,0 +1,208 @@
+Index: linux-tosa/drivers/input/touchscreen/wm9712.c
+===================================================================
+--- linux-tosa.orig/drivers/input/touchscreen/wm9712.c	2006-08-29 16:52:36.008543280 +0100
++++ linux-tosa/drivers/input/touchscreen/wm9712.c	2006-08-29 16:52:50.923275896 +0100
+@@ -1,7 +1,7 @@
+ /*
+  * wm9712.c  --  Codec driver for Wolfson WM9712 AC97 Codecs.
+  *
+- * Copyright 2003, 2004, 2005 Wolfson Microelectronics PLC.
++ * Copyright 2003, 2004, 2005, 2006 Wolfson Microelectronics PLC.
+  * Author: Liam Girdwood
+  *         liam.girdwood at wolfsonmicro.com or linux at wolfsonmicro.com
+  * Parts Copyright : Ian Molton <spyro at f2s.com>
+@@ -13,6 +13,12 @@
+  *  Free Software Foundation;  either version 2 of the  License, or (at your
+  *  option) any later version.
+  *
++ *  Revision history
++ *     4th Jul 2005  Initial version.
++ *    29th Aug 2006  Mike Arthur <mike at mikearthur.co.uk>
++ *                   Added fixes for Sharp SL-6000 (Tosa) LCD noise causing
++ *                   touchscreen interference.
++ *
+  */
+ 
+ #include <linux/module.h>
+@@ -28,6 +34,10 @@
+ #define WM9705_VERSION		"0.60"
+ #define DEFAULT_PRESSURE	0xb0c0
+ 
++#define CCNT(a)     asm volatile ("mrc p14, 0, %0, C1, C1, 0" : "=r"(a))
++#define CCNT_ON()   asm("mcr p14, 0, %0, C0, C0, 0" : : "r"(1))
++#define CCNT_OFF()  asm("mcr p14, 0, %0, C0, C0, 0" : : "r"(1))
++
+ /*
+  * Debug
+  */
+@@ -243,6 +253,36 @@
+ 	return wm->dig[2] & WM9712_PDEN;
+ }
+ 
++
++#ifdef CONFIG_MACH_TOSA
++/* On the Sharp SL-6000 (Tosa), due to a noisy LCD, we need to perform a wait
++ * before sampling the Y axis of the touchscreen */
++static inline void wm9712_lcd_sync_on(struct wm97xx* wm, int adcsel) {
++    unsigned long timer1 = 0, timer2 = 0, wait_time = 0;
++    if (adcsel == WM97XX_ADCSEL_Y) {
++        wait_time = wm97xx_calc_lcd_waittime(wm);
++
++        CCNT_ON();
++
++        if (wait_time) {
++            /* wait for LCD rising edge */
++            wm_machinfo->wait_hsync();
++            /* get clock */
++            CCNT(timer1);
++            CCNT(timer2);
++
++            while ((timer2 - timer1) < wait_time) {
++                CCNT(timer2);
++            }
++        }
++    }
++}
++
++static inline void wm9712_lcd_sync_off(void) {
++    CCNT_OFF();
++}
++#endif
++
+ /*
+  * Read a sample from the WM9712 adc in polling mode.
+  */
+@@ -260,6 +300,9 @@
+ 	/* set up digitiser */
+ 	if (adcsel & 0x8000)
+ 		adcsel = ((adcsel & 0x7fff) + 3) << 12;
++    #ifdef CONFIG_MACH_TOSA
++    wm9712_lcd_sync_on(wm, adcsel);
++    #endif
+ 	wm97xx_reg_write(wm, AC97_WM97XX_DIGITISER1, adcsel | WM97XX_POLL | WM97XX_DELAY(delay));
+ 	
+ 	/* wait 3 AC97 time slots + delay for conversion */
+@@ -282,6 +325,10 @@
+ 	
+ 	*sample = wm97xx_reg_read(wm, AC97_WM97XX_DIGITISER_RD);
+ 	
++    #ifdef CONFIG_MACH_TOSA
++    wm9712_lcd_sync_off();
++    #endif
++
+ 	/* check we have correct sample */
+ 	if ((*sample & WM97XX_ADCSEL_MASK) != adcsel) {
+ 		dbg ("adc wrong sample, read %x got %x", adcsel,
+@@ -303,11 +350,12 @@
+ static int wm9712_poll_touch(struct wm97xx* wm, struct wm97xx_data *data)
+ {
+ 	int rc;
+-	
+ 	if ((rc = wm9712_poll_sample(wm, WM97XX_ADCSEL_X, &data->x)) != RC_VALID)
+ 		return rc;
++
+ 	if ((rc = wm9712_poll_sample(wm, WM97XX_ADCSEL_Y, &data->y)) != RC_VALID)
+ 		return rc;
++
+ 	if (pil && !five_wire) {
+ 		if ((rc = wm9712_poll_sample(wm, WM97XX_ADCSEL_PRES, &data->p)) != RC_VALID)
+ 			return rc;
+Index: linux-tosa/drivers/input/touchscreen/wm97xx-core.c
+===================================================================
+--- linux-tosa.orig/drivers/input/touchscreen/wm97xx-core.c	2006-08-29 16:52:36.008543280 +0100
++++ linux-tosa/drivers/input/touchscreen/wm97xx-core.c	2006-08-29 16:52:50.924275744 +0100
+@@ -2,7 +2,7 @@
+  * wm97xx-core.c  --  Touch screen driver core for Wolfson WM9705, WM9712
+  *                           and WM9713 AC97 Codecs.
+  *
+- * Copyright 2003, 2004, 2005 Wolfson Microelectronics PLC.
++ * Copyright 2003, 2004, 2005, 2006 Wolfson Microelectronics PLC.
+  * Author: Liam Girdwood
+  *         liam.girdwood at wolfsonmicro.com or linux at wolfsonmicro.com
+  * Parts Copyright : Ian Molton <spyro at f2s.com>
+@@ -67,6 +67,9 @@
+  *                   GPIOs) and 2.6 power management. 
+  *    29th Nov 2004  Added WM9713 support.
+  *     4th Jul 2005  Moved codec specific code out to seperate files.
++ *    29th Aug 2006  Mike Arthur <mike at mikearthur.co.uk>
++ *                   Added fixes for Sharp SL-6000 (Tosa) LCD noise causing
++ *                   touchscreen interference.
+  */  
+     
+ #include <linux/module.h>
+@@ -94,6 +97,7 @@
+ static DECLARE_MUTEX(gpio_sem);
+ static LIST_HEAD(wm97xx_misc_list);
+ static struct wm97xx* wm_codec = NULL;
++struct wm97xx_machinfo *wm_machinfo;
+ 
+ /*
+  * WM97xx - enable/disable AUX ADC sysfs 
+@@ -832,6 +836,23 @@
+ 		mdev->remove(wm_codec);
+ }
+ 
++#ifdef CONFIG_MACH_TOSA
++/* On the Sharp SL-6000 (Tosa), due to a noisy LCD, we need to perform a wait
++ * before sampling the Y axis of the touchscreen */
++unsigned long wm97xx_calc_lcd_waittime(struct wm97xx *wm) {
++    unsigned long hsync_time = wm_machinfo->get_hsync_time();
++    return hsync_time;
++}
++
++void wm97xx_set_machinfo(struct wm97xx_machinfo *machinfo) {
++    wm_machinfo = machinfo;
++}
++
++void wm97xx_unset_machinfo() {
++    wm_machinfo = NULL;
++}
++#endif
++
+ static struct device_driver wm97xx_driver = {
+ 	.name = 	"ac97", 
+ 	.bus = 		&ac97_bus_type, 
+@@ -861,6 +882,9 @@
+ EXPORT_SYMBOL_GPL(wm97xx_reg_write);
+ EXPORT_SYMBOL_GPL(wm97xx_register_misc_dev);
+ EXPORT_SYMBOL_GPL(wm97xx_unregister_misc_dev);
++EXPORT_SYMBOL_GPL(wm97xx_calc_lcd_waittime);
++EXPORT_SYMBOL_GPL(wm97xx_set_machinfo);
++EXPORT_SYMBOL_GPL(wm97xx_unset_machinfo);
+ 
+ module_init(wm97xx_init); 
+ module_exit(wm97xx_exit);
+Index: linux-tosa/include/linux/wm97xx.h
+===================================================================
+--- linux-tosa.orig/include/linux/wm97xx.h	2006-08-29 16:52:36.008543280 +0100
++++ linux-tosa/include/linux/wm97xx.h	2006-08-29 16:52:50.924275744 +0100
+@@ -207,6 +207,7 @@
+ 
+ struct wm97xx;
+ extern struct wm97xx_codec_drv wm97xx_codec;
++extern struct wm97xx_machinfo *wm_machinfo;
+ 
+ /*
+  * Codec driver interface - allows mapping to WM9705/12/13 and newer codecs
+@@ -253,6 +254,11 @@
+ 	struct list_head list;
+ };
+ 
++struct wm97xx_machinfo {
++    unsigned long (*get_hsync_time)(void);
++    void (*wait_hsync)(void);
++};
++
+ int wm97xx_register_misc_dev(struct wm97xx_misc_dev* mdev);
+ void wm97xx_unregister_misc_dev(struct wm97xx_misc_dev* mdev);
+ 
+@@ -281,4 +287,9 @@
+ int wm97xx_acc_startup(struct wm97xx* wm);
+ void wm97xx_acc_shutdown(struct wm97xx* wm);
+ 
++
++unsigned long wm97xx_calc_lcd_waittime(struct wm97xx *wm);
++void wm97xx_set_machinfo(struct wm97xx_machinfo *machinfo);
++void wm97xx_unset_machinfo(void);
++
+ #endif
============================================================
--- packages/linux/linux-openzaurus_2.6.17.bb	9f0bc3228b7917275611e8d38746cd942a4a3cbb
+++ packages/linux/linux-openzaurus_2.6.17.bb	a17f34bbc72eabf694be1bc22eacac890f846f43
@@ -1,6 +1,6 @@ require linux-openzaurus.inc
 require linux-openzaurus.inc
 
-PR = "r20"
+PR = "r21"
 
 # Handy URLs
 # git://rsync.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git \
@@ -115,7 +115,9 @@ SRC_URI_append_tosa = "\
 	   ${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"
+	   ${DOSRC}/wm9712-reset-loop-r1.patch;patch=1 \
+	   file://tosa-lcdnoise-r0.patch;patch=1 \
+	   file://wm97xx-lcdnoise-r0.patch;patch=1 "
 #	   ${DOSRC}/tosa-asoc-r1.patch;patch=1 "
 
 S = "${WORKDIR}/linux-2.6.17"






More information about the Openembedded-commits mailing list