[kernel] r16309 - in dists/trunk/linux-2.6/debian: . patches/debian patches/features/all/speakup patches/series

Ben Hutchings benh at alioth.debian.org
Sat Sep 18 16:48:26 UTC 2010


Author: benh
Date: Sat Sep 18 16:48:22 2010
New Revision: 16309

Log:
speakup: Update to match Debian package version 3.1.5.dfsg.1-1

Added:
   dists/trunk/linux-2.6/debian/patches/features/all/speakup/speakup-fix-vc_tty.patch
Deleted:
   dists/trunk/linux-2.6/debian/patches/debian/keyboard-export-k_handler.patch
   dists/trunk/linux-2.6/debian/patches/features/all/speakup/slab-build-fix.patch
Modified:
   dists/trunk/linux-2.6/debian/changelog
   dists/trunk/linux-2.6/debian/patches/features/all/speakup/speakup-add.patch
   dists/trunk/linux-2.6/debian/patches/series/base

Modified: dists/trunk/linux-2.6/debian/changelog
==============================================================================
--- dists/trunk/linux-2.6/debian/changelog	Sat Sep 18 01:06:06 2010	(r16308)
+++ dists/trunk/linux-2.6/debian/changelog	Sat Sep 18 16:48:22 2010	(r16309)
@@ -2,6 +2,9 @@
 
   * New upstream release candidate
 
+  [ Ben Hutchings ]
+  * speakup: Update to match Debian package version 3.1.5.dfsg.1-1
+
  -- Ben Hutchings <ben at decadent.org.uk>  Mon, 13 Sep 2010 01:25:14 +0100
 
 linux-2.6 (2.6.35-1~experimental.3) experimental; urgency=low

Modified: dists/trunk/linux-2.6/debian/patches/features/all/speakup/speakup-add.patch
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/features/all/speakup/speakup-add.patch	Sat Sep 18 01:06:06 2010	(r16308)
+++ dists/trunk/linux-2.6/debian/patches/features/all/speakup/speakup-add.patch	Sat Sep 18 16:48:22 2010	(r16309)
@@ -1,5 +1,5 @@
 --- a/drivers/staging/speakup/allmodule.mk	1970-01-01 01:00:00.000000000 +0100
-+++ b/drivers/staging/speakup/allmodule.mk	2009-08-13 01:21:12.000000000 +0100
++++ b/drivers/staging/speakup/allmodule.mk	2010-07-22 15:06:52.000000000 +0100
 @@ -0,0 +1,15 @@
 +CONFIG_SPEAKUP_SYNTH_ACNTSA=m
 +CONFIG_SPEAKUP_SYNTH_ACNTPC=m
@@ -17,7 +17,7 @@
 +CONFIG_SPEAKUP_SYNTH_DUMMY=m
 +CONFIG_SPEAKUP=m
 --- a/drivers/staging/speakup/buffers.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/drivers/staging/speakup/buffers.c	2009-08-13 01:21:12.000000000 +0100
++++ b/drivers/staging/speakup/buffers.c	2010-07-22 15:06:52.000000000 +0100
 @@ -0,0 +1,124 @@
 +#include <linux/console.h>
 +#include <linux/smp_lock.h>
@@ -144,7 +144,7 @@
 +}
 +EXPORT_SYMBOL_GPL(synth_buffer_clear);
 --- a/drivers/staging/speakup/devsynth.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/drivers/staging/speakup/devsynth.c	2009-08-13 01:21:12.000000000 +0100
++++ b/drivers/staging/speakup/devsynth.c	2010-07-22 15:06:52.000000000 +0100
 @@ -0,0 +1,92 @@
 +#include <linux/errno.h>
 +#include <linux/miscdevice.h>	/* for misc_register, and SYNTH_MINOR */
@@ -238,12 +238,121 @@
 +	misc_deregister(&synth_device);
 +	misc_registered = 0;
 +}
+--- a/drivers/staging/speakup/fakekey.c	1970-01-01 01:00:00.000000000 +0100
++++ b/drivers/staging/speakup/fakekey.c	2010-07-22 15:06:52.000000000 +0100
+@@ -0,0 +1,105 @@
++/* fakekey.c
++ * Functions for simulating keypresses.
++ *
++ * Copyright (C) 2010 the Speakup Team
++ *
++ * 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.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
++ */
++#include <linux/types.h>
++#include <linux/slab.h>
++#include <linux/preempt.h>
++#include <linux/percpu.h>
++#include <linux/input.h>
++
++#include "speakup.h"
++
++#define PRESSED 1
++#define RELEASED 0
++
++DEFINE_PER_CPU(bool, reporting_keystroke);
++
++static struct input_dev *virt_keyboard;
++
++int speakup_add_virtual_keyboard(void)
++{
++	int err;
++
++	virt_keyboard = input_allocate_device();
++
++	if (!virt_keyboard)
++		return -ENOMEM;
++
++	virt_keyboard->name = "Speakup";
++	virt_keyboard->id.bustype = BUS_VIRTUAL;
++	virt_keyboard->phys = "speakup/input0";
++	virt_keyboard->dev.parent = NULL;
++
++	__set_bit(EV_KEY, virt_keyboard->evbit);
++	__set_bit(KEY_DOWN, virt_keyboard->keybit);
++
++	err = input_register_device(virt_keyboard);
++	if (err) {
++		input_free_device(virt_keyboard);
++		virt_keyboard = NULL;
++	}
++
++	return err;
++}
++
++void speakup_remove_virtual_keyboard(void)
++{
++	if (virt_keyboard != NULL) {
++		input_unregister_device(virt_keyboard);
++		input_free_device(virt_keyboard);
++		virt_keyboard = NULL;
++	}
++}
++
++/*
++	 * Send a simulated down-arrow to the application.
++	 */
++void speakup_fake_down_arrow(void)
++{
++	unsigned long flags;
++
++	/* disable keyboard interrupts */
++	local_irq_save(flags);
++	/* don't change CPU */
++	preempt_disable();
++
++	__get_cpu_var(reporting_keystroke) = true;
++	input_report_key(virt_keyboard, KEY_DOWN, PRESSED);
++	input_report_key(virt_keyboard, KEY_DOWN, RELEASED);
++	__get_cpu_var(reporting_keystroke) = false;
++
++	/* reenable preemption */
++	preempt_enable();
++	/* reenable keyboard interrupts */
++	local_irq_restore(flags);
++}
++
++/*
++	 * Are we handling a simulated keypress on the current CPU?
++	 * Returns a boolean.
++	 */
++bool speakup_fake_key_pressed(void)
++{
++	bool is_pressed;
++
++	is_pressed = get_cpu_var(reporting_keystroke);
++	put_cpu_var(reporting_keystroke);
++
++	return is_pressed;
++}
 --- a/drivers/staging/speakup/i18n.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/drivers/staging/speakup/i18n.c	2009-08-13 01:21:12.000000000 +0100
-@@ -0,0 +1,621 @@
++++ b/drivers/staging/speakup/i18n.c	2010-07-22 15:06:52.000000000 +0100
+@@ -0,0 +1,622 @@
 +/* Internationalization implementation.  Includes definitions of English
 + * string arrays, and the i18n pointer. */
 +
++#include <linux/slab.h>		/* For kmalloc. */
 +#include <linux/ctype.h>
 +#include <linux/module.h>
 +#include <linux/string.h>
@@ -863,7 +972,7 @@
 +	spk_unlock(flags);
 +}
 --- a/drivers/staging/speakup/i18n.h	1970-01-01 01:00:00.000000000 +0100
-+++ b/drivers/staging/speakup/i18n.h	2009-08-13 01:21:12.000000000 +0100
++++ b/drivers/staging/speakup/i18n.h	2010-07-22 15:06:52.000000000 +0100
 @@ -0,0 +1,228 @@
 +#ifndef I18N_H
 +#define I18N_H
@@ -1094,8 +1203,8 @@
 +
 +#endif
 --- a/drivers/staging/speakup/Kbuild	1970-01-01 01:00:00.000000000 +0100
-+++ b/drivers/staging/speakup/Kbuild	2009-10-04 16:44:13.000000000 +0100
-@@ -0,0 +1,29 @@
++++ b/drivers/staging/speakup/Kbuild	2010-09-18 17:20:01.000000000 +0100
+@@ -0,0 +1,30 @@
 +include $M/allmodule.mk
 +obj-$(CONFIG_SPEAKUP_SYNTH_ACNTSA) += speakup_acntsa.o
 +obj-$(CONFIG_SPEAKUP_SYNTH_ACNTPC) += speakup_acntpc.o
@@ -1117,6 +1226,7 @@
 +	buffers.o \
 +	devsynth.o \
 +	i18n.o \
++	fakekey.o \
 +	main.o \
 +	keyhelp.o \
 +	kobjects.o \
@@ -1126,7 +1236,7 @@
 +	thread.o \
 +	varhandlers.o
 --- a/drivers/staging/speakup/Kconfig	1970-01-01 01:00:00.000000000 +0100
-+++ b/drivers/staging/speakup/Kconfig	2009-08-13 01:21:12.000000000 +0100
++++ b/drivers/staging/speakup/Kconfig	2010-07-22 15:06:52.000000000 +0100
 @@ -0,0 +1,168 @@
 +menu "Speakup console speech"
 +
@@ -1297,7 +1407,7 @@
 +endif	# SPEAKUP
 +endmenu
 --- a/drivers/staging/speakup/keyhelp.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/drivers/staging/speakup/keyhelp.c	2009-08-13 01:21:12.000000000 +0100
++++ b/drivers/staging/speakup/keyhelp.c	2010-07-22 15:06:52.000000000 +0100
 @@ -0,0 +1,212 @@
 +/* speakup_keyhelp.c
 +   help module for speakup
@@ -1512,8 +1622,8 @@
 +	return 1;
 +}
 --- a/drivers/staging/speakup/kobjects.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/drivers/staging/speakup/kobjects.c	2009-08-13 01:21:12.000000000 +0100
-@@ -0,0 +1,986 @@
++++ b/drivers/staging/speakup/kobjects.c	2010-07-22 15:06:52.000000000 +0100
+@@ -0,0 +1,1007 @@
 +/*
 + * Speakup kobject implementation
 + *
@@ -1527,6 +1637,7 @@
 + * Released under the GPL version 2 only.
 + *
 + */
++#include <linux/slab.h>		/* For kmalloc. */
 +#include <linux/kernel.h>
 +#include <linux/kobject.h>
 +#include <linux/string.h>
@@ -2159,6 +2270,26 @@
 +			param->name, (int)param->var_type);
 +	break;
 +	}
++	/*
++	 * If voice was just changed, we might need to reset our default
++	 * pitch and volume.
++	 */
++	if (strcmp(attr->attr.name, "voice") == 0) {
++		if (synth && synth->default_pitch) {
++			param = var_header_by_name("pitch");
++			if (param)  {
++				set_num_var(synth->default_pitch[value], param, E_NEW_DEFAULT);
++				set_num_var(0, param, E_DEFAULT);
++			}
++		}
++		if (synth && synth->default_vol) {
++			param = var_header_by_name("vol");
++			if (param)  {
++				set_num_var(synth->default_vol[value], param, E_NEW_DEFAULT);
++				set_num_var(0, param, E_DEFAULT);
++			}
++		}
++	}
 +	spk_unlock(flags);
 +
 +	if (ret == SET_DEFAULT)
@@ -2501,8 +2632,8 @@
 +	kobject_put(accessibility_kobj);
 +}
 --- a/drivers/staging/speakup/main.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/drivers/staging/speakup/main.c	2009-08-13 01:21:12.000000000 +0100
-@@ -0,0 +1,2284 @@
++++ b/drivers/staging/speakup/main.c	2010-07-22 15:06:52.000000000 +0100
+@@ -0,0 +1,2304 @@
 +/* speakup.c
 +   review functions for the speakup screen review package.
 +   originally written by: Kirk Reiser and Andy Berdan.
@@ -2620,9 +2751,6 @@
 +#define read_all_mode CT_Max
 +
 +static struct tty_struct *tty;
-+typedef void (*k_handler_fn)(struct vc_data *vc, unsigned char value,
-+			     char up_flag);
-+extern k_handler_fn k_handler[16];
 +
 +static void spkup_write(const char *in_buf, int count);
 +
@@ -2725,6 +2853,7 @@
 +};
 +
 +struct task_struct *speakup_task;
++struct bleep unprocessed_sound;
 +static int spk_keydown;
 +static u_char spk_lastkey, spk_close_press, keymap_flags;
 +static u_char last_keycode, this_speakup_key;
@@ -2772,7 +2901,10 @@
 +	freq = vals[val%12];
 +	if (val > 11)
 +		freq *= (1 << (val/12));
-+	kd_mksound(freq, msecs_to_jiffies(time));
++	unprocessed_sound.freq = freq;
++	unprocessed_sound.jiffies = msecs_to_jiffies(time);
++	unprocessed_sound.active = 1;
++	/* We can only have 1 active sound at a time. */
 +}
 +
 +static void speakup_shut_up(struct vc_data *vc)
@@ -2950,7 +3082,7 @@
 +		if (w & vc->vc_hi_font_mask)
 +			c |= 0x100;
 +
-+		ch = inverse_translate(vc, c);
++		ch = inverse_translate(vc, c, 0);
 +		*attribs = (w & 0xff00) >> 8;
 +	}
 +	return ch;
@@ -3812,11 +3944,10 @@
 +};
 +
 +static void
-+kbd_fakekey2(struct vc_data *vc, int v, int command)
++kbd_fakekey2(struct vc_data *vc, int command)
 +{
 +	del_timer(&cursor_timer);
-+	k_handler[KT_CUR](vc, v, 0);
-+	k_handler[KT_CUR](vc, v, 1);
++	speakup_fake_down_arrow();
 +	start_read_all_timer(vc, command);
 +}
 +
@@ -3832,7 +3963,7 @@
 +	cursor_track = read_all_mode;
 +	reset_index_count(0);
 +	if (get_sentence_buf(vc, 0) == -1)
-+		kbd_fakekey2(vc, 0, RA_DOWN_ARROW);
++		kbd_fakekey2(vc, RA_DOWN_ARROW);
 +	else {
 +		say_sentence_num(0, 0);
 +		synth_insert_next_index(0);
@@ -3873,7 +4004,7 @@
 +		reset_index_count(sentcount+1);
 +		if (indcount == 1) {
 +			if (!say_sentence_num(sentcount+1, 0)) {
-+				kbd_fakekey2(vc, 0, RA_FIND_NEXT_SENT);
++				kbd_fakekey2(vc, RA_FIND_NEXT_SENT);
 +				return;
 +			}
 +			synth_insert_next_index(0);
@@ -3885,7 +4016,7 @@
 +			} else
 +				synth_insert_next_index(0);
 +			if (!say_sentence_num(sn, 0)) {
-+				kbd_fakekey2(vc, 0, RA_FIND_NEXT_SENT);
++				kbd_fakekey2(vc, RA_FIND_NEXT_SENT);
 +				return;
 +			}
 +			synth_insert_next_index(0);
@@ -3901,7 +4032,7 @@
 +		break;
 +	case RA_DOWN_ARROW:
 +		if (get_sentence_buf(vc, 0) == -1) {
-+			kbd_fakekey2(vc, 0, RA_DOWN_ARROW);
++			kbd_fakekey2(vc, RA_DOWN_ARROW);
 +		} else {
 +			say_sentence_num(0, 0);
 +			synth_insert_next_index(0);
@@ -3913,7 +4044,7 @@
 +		if (rv == -1)
 +			read_all_doc(vc);
 +		if (rv == 0)
-+			kbd_fakekey2(vc, 0, RA_FIND_NEXT_SENT);
++			kbd_fakekey2(vc, RA_FIND_NEXT_SENT);
 +		else {
 +			say_sentence_num(1, 0);
 +			synth_insert_next_index(0);
@@ -3925,7 +4056,7 @@
 +	case RA_TIMER:
 +		get_index_count(&indcount, &sentcount);
 +		if (indcount < 2)
-+			kbd_fakekey2(vc, 0, RA_DOWN_ARROW);
++			kbd_fakekey2(vc, RA_DOWN_ARROW);
 +		else
 +			start_read_all_timer(vc, RA_TIMER);
 +		break;
@@ -4628,6 +4759,19 @@
 +
 +	if (vc->vc_mode == KD_GRAPHICS)
 +		return ret;
++
++	/*
++	 * First, determine whether we are handling a fake keypress on
++	 * the current processor.  If we are, then return NOTIFY_OK,
++	 * to pass the keystroke up the chain.  This prevents us from
++	 * trying to take the Speakup lock while it is held by the
++	 * processor on which the simulated keystroke was generated.
++	 * Also, the simulated keystrokes should be ignored by Speakup.
++	 */
++
++	if (speakup_fake_key_pressed())
++		return ret;
++
 +	switch (code) {
 +	case KBD_KEYCODE:
 +		/* speakup requires keycode and keysym currently */
@@ -4727,16 +4871,22 @@
 +	for (i = 0; speakup_console[i]; i++)
 +		kfree(speakup_console[i]);
 +	speakup_kobj_exit();
++	speakup_remove_virtual_keyboard();
 +}
 +
 +/* call by: module_init() */
 +static int __init speakup_init(void)
 +{
 +	int i;
++	int err;
 +	struct st_spk_t *first_console;
 +	struct vc_data *vc = vc_cons[fg_console].d;
 +	struct var_t *var;
 +
++	err = speakup_add_virtual_keyboard();
++	if (err)
++		return err;
++
 +	initialize_msgs(); /* Initialize arrays for i18n. */
 +	first_console = kzalloc(sizeof(*first_console), GFP_KERNEL);
 +	if (!first_console)
@@ -4784,11 +4934,12 @@
 +	return 0;
 +}
 +
++
 +module_init(speakup_init);
 +module_exit(speakup_exit);
 +
 --- a/drivers/staging/speakup/Makefile	1970-01-01 01:00:00.000000000 +0100
-+++ b/drivers/staging/speakup/Makefile	2009-08-13 01:21:12.000000000 +0100
++++ b/drivers/staging/speakup/Makefile	2010-07-22 15:06:52.000000000 +0100
 @@ -0,0 +1,12 @@
 +KERNELDIR = /lib/modules/`uname -r`/build
 +
@@ -4803,8 +4954,9 @@
 +clean:
 +	make -C $(KERNELDIR) M=`pwd` `cat allmodule.mk` $@
 --- a/drivers/staging/speakup/selection.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/drivers/staging/speakup/selection.c	2009-08-13 01:21:12.000000000 +0100
-@@ -0,0 +1,152 @@
++++ b/drivers/staging/speakup/selection.c	2010-07-22 15:06:52.000000000 +0100
+@@ -0,0 +1,153 @@
++#include <linux/slab.h> /* for kmalloc */
 +#include <linux/consolemap.h>
 +#include <linux/interrupt.h>
 +#include <linux/sched.h>
@@ -4829,7 +4981,7 @@
 +
 +static unsigned char sel_pos(int n)
 +{
-+	return inverse_translate(spk_sel_cons, screen_glyph(spk_sel_cons, n));
++	return inverse_translate(spk_sel_cons, screen_glyph(spk_sel_cons, n), 0);
 +}
 +
 +void speakup_clear_selection(void)
@@ -4958,8 +5110,8 @@
 +}
 +
 --- a/drivers/staging/speakup/serialio.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/drivers/staging/speakup/serialio.c	2009-08-13 01:21:12.000000000 +0100
-@@ -0,0 +1,208 @@
++++ b/drivers/staging/speakup/serialio.c	2010-07-22 15:06:52.000000000 +0100
+@@ -0,0 +1,212 @@
 +#include <linux/interrupt.h>
 +#include <linux/ioport.h>
 +
@@ -4982,6 +5134,7 @@
 +	unsigned int cval = 0;
 +	int cflag = CREAD | HUPCL | CLOCAL | B9600 | CS8;
 +	struct serial_state *ser = NULL;
++	int err;
 +
 +	ser = rs_table + index;
 +	/*	Divisor, bytesize and parity */
@@ -5000,8 +5153,11 @@
 +		/* try to take it back. */
 +		printk("Ports not available, trying to steal them\n");
 +		__release_region(&ioport_resource, ser->port, 8);
-+		if (synth_request_region(ser->port, 8))
++		err = synth_request_region(ser->port, 8);
++		if (err) {
++			pr_warn("Unable to allocate port at %x, errno %i", ser->port, err);
 +			return NULL;
++		}
 +	}
 +
 +	/*	Disable UART interrupts, set DTR and RTS high
@@ -5169,7 +5325,7 @@
 +EXPORT_SYMBOL_GPL(spk_serial_release);
 +
 --- a/drivers/staging/speakup/serialio.h	1970-01-01 01:00:00.000000000 +0100
-+++ b/drivers/staging/speakup/serialio.h	2009-08-13 01:21:12.000000000 +0100
++++ b/drivers/staging/speakup/serialio.h	2010-07-22 15:06:52.000000000 +0100
 @@ -0,0 +1,55 @@
 +#ifndef _SPEAKUP_SERIAL_H
 +#define _SPEAKUP_SERIAL_H
@@ -5227,7 +5383,7 @@
 +
 +#endif
 --- a/drivers/staging/speakup/speakup_acnt.h	1970-01-01 01:00:00.000000000 +0100
-+++ b/drivers/staging/speakup/speakup_acnt.h	2009-08-13 01:21:12.000000000 +0100
++++ b/drivers/staging/speakup/speakup_acnt.h	2010-07-22 15:06:52.000000000 +0100
 @@ -0,0 +1,16 @@
 +/* speakup_acntpc.h - header file for speakups Accent-PC driver. */
 +
@@ -5246,8 +5402,8 @@
 +#define SYNTH_ALMOST_EMPTY 'M' /* synth has les than 2 seconds of text left */
 +#define SYNTH_SPEAKING	's' /* synth is speaking and has a fare way to go */
 --- a/drivers/staging/speakup/speakup_acntpc.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/drivers/staging/speakup/speakup_acntpc.c	2009-08-13 01:21:12.000000000 +0100
-@@ -0,0 +1,323 @@
++++ b/drivers/staging/speakup/speakup_acntpc.c	2010-07-22 15:06:52.000000000 +0100
+@@ -0,0 +1,327 @@
 +/*
 + * written by: Kirk Reiser <kirk at braille.uwo.ca>
 + * this version considerably modified by David Borowski, david575 at rogers.com
@@ -5284,7 +5440,7 @@
 +#include "speakup.h"
 +#include "speakup_acnt.h" /* local header file for Accent values */
 +
-+#define DRV_VERSION "2.9"
++#define DRV_VERSION "2.10"
 +#define synth_readable() (inb_p(synth_port_control) & SYNTH_READABLE)
 +#define synth_writable() (inb_p(synth_port_control) & SYNTH_WRITABLE)
 +#define synth_full() (inb_p(speakup_info.port_tts + UART_RX) == 'F')
@@ -5307,6 +5463,7 @@
 +	{ PITCH, .u.n = {"\033P%d", 5, 0, 9, 0, 0, NULL }},
 +	{ VOL, .u.n = {"\033A%d", 5, 0, 9, 0, 0, NULL }},
 +	{ TONE, .u.n = {"\033V%d", 5, 0, 9, 0, 0, NULL }},
++	{ DIRECT, .u.n = {NULL, 0, 0, 1, 0, 0, NULL }},
 +	V_LAST_VAR
 +};
 +
@@ -5328,6 +5485,8 @@
 +
 +static struct kobj_attribute delay_time_attribute =
 +	__ATTR(delay_time, ROOT_W, spk_var_show, spk_var_store);
++static struct kobj_attribute direct_attribute =
++	__ATTR(direct, USER_RW, spk_var_show, spk_var_store);
 +static struct kobj_attribute full_time_attribute =
 +	__ATTR(full_time, ROOT_W, spk_var_show, spk_var_store);
 +static struct kobj_attribute jiffy_delta_attribute =
@@ -5347,6 +5506,7 @@
 +	&tone_attribute.attr,
 +	&vol_attribute.attr,
 +	&delay_time_attribute.attr,
++	&direct_attribute.attr,
 +	&full_time_attribute.attr,
 +	&jiffy_delta_attribute.attr,
 +	&trigger_time_attribute.attr,
@@ -5529,7 +5689,7 @@
 +	if (port_val != 0x53fc) {
 +		/* 'S' and out&input bits */
 +		pr_info("%s: not found\n", synth->long_name);
-+		synth_release_region(synth_portlist[i], SYNTH_IO_EXTENT);
++		synth_release_region(synth_port_control, SYNTH_IO_EXTENT);
 +		synth_port_control = 0;
 +		return -ENODEV;
 +	}
@@ -5572,8 +5732,8 @@
 +MODULE_VERSION(DRV_VERSION);
 +
 --- a/drivers/staging/speakup/speakup_acntsa.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/drivers/staging/speakup/speakup_acntsa.c	2009-08-13 01:21:12.000000000 +0100
-@@ -0,0 +1,160 @@
++++ b/drivers/staging/speakup/speakup_acntsa.c	2010-07-22 15:06:52.000000000 +0100
+@@ -0,0 +1,164 @@
 +/*
 + * originally written by: Kirk Reiser <kirk at braille.uwo.ca>
 +* this version considerably modified by David Borowski, david575 at rogers.com
@@ -5603,7 +5763,7 @@
 +#include "speakup.h"
 +#include "speakup_acnt.h" /* local header file for Accent values */
 +
-+#define DRV_VERSION "2.10"
++#define DRV_VERSION "2.11"
 +#define synth_full() (inb_p(speakup_info.port_tts + UART_RX) == 'F')
 +#define PROCSPEECH '\r'
 +
@@ -5616,6 +5776,7 @@
 +	{ PITCH, .u.n = {"\033P%d", 5, 0, 9, 0, 0, NULL }},
 +	{ VOL, .u.n = {"\033A%d", 9, 0, 9, 0, 0, NULL }},
 +	{ TONE, .u.n = {"\033V%d", 5, 0, 9, 0, 0, NULL }},
++	{ DIRECT, .u.n = {NULL, 0, 0, 1, 0, 0, NULL }},
 +	V_LAST_VAR
 +};
 +
@@ -5637,6 +5798,8 @@
 +
 +static struct kobj_attribute delay_time_attribute =
 +	__ATTR(delay_time, ROOT_W, spk_var_show, spk_var_store);
++static struct kobj_attribute direct_attribute =
++	__ATTR(direct, USER_RW, spk_var_show, spk_var_store);
 +static struct kobj_attribute full_time_attribute =
 +	__ATTR(full_time, ROOT_W, spk_var_show, spk_var_store);
 +static struct kobj_attribute jiffy_delta_attribute =
@@ -5656,6 +5819,7 @@
 +	&tone_attribute.attr,
 +	&vol_attribute.attr,
 +	&delay_time_attribute.attr,
++	&direct_attribute.attr,
 +	&full_time_attribute.attr,
 +	&jiffy_delta_attribute.attr,
 +	&trigger_time_attribute.attr,
@@ -5735,8 +5899,8 @@
 +MODULE_VERSION(DRV_VERSION);
 +
 --- a/drivers/staging/speakup/speakup_apollo.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/drivers/staging/speakup/speakup_apollo.c	2009-08-13 01:21:12.000000000 +0100
-@@ -0,0 +1,221 @@
++++ b/drivers/staging/speakup/speakup_apollo.c	2010-07-22 15:06:52.000000000 +0100
+@@ -0,0 +1,225 @@
 +/*
 + * originally written by: Kirk Reiser <kirk at braille.uwo.ca>
 +* this version considerably modified by David Borowski, david575 at rogers.com
@@ -5770,7 +5934,7 @@
 +#include "serialio.h"
 +#include "speakup.h"
 +
-+#define DRV_VERSION "2.20"
++#define DRV_VERSION "2.21"
 +#define SYNTH_CLEAR 0x18
 +#define PROCSPEECH '\r'
 +
@@ -5784,6 +5948,7 @@
 +	{ VOL, .u.n = {"@A%x", 10, 0, 15, 0, 0, NULL }},
 +	{ VOICE, .u.n = {"@V%d", 1, 1, 6, 0, 0, NULL }},
 +	{ LANG, .u.n = {"@=%d,", 1, 1, 4, 0, 0, NULL }},
++	{ DIRECT, .u.n = {NULL, 0, 0, 1, 0, 0, NULL }},
 +	V_LAST_VAR
 +};
 +
@@ -5807,6 +5972,8 @@
 +
 +static struct kobj_attribute delay_time_attribute =
 +	__ATTR(delay_time, ROOT_W, spk_var_show, spk_var_store);
++static struct kobj_attribute direct_attribute =
++	__ATTR(direct, USER_RW, spk_var_show, spk_var_store);
 +static struct kobj_attribute full_time_attribute =
 +	__ATTR(full_time, ROOT_W, spk_var_show, spk_var_store);
 +static struct kobj_attribute jiffy_delta_attribute =
@@ -5827,6 +5994,7 @@
 +	&voice_attribute.attr,
 +	&vol_attribute.attr,
 +	&delay_time_attribute.attr,
++	&direct_attribute.attr,
 +	&full_time_attribute.attr,
 +	&jiffy_delta_attribute.attr,
 +	&trigger_time_attribute.attr,
@@ -5959,8 +6127,8 @@
 +MODULE_VERSION(DRV_VERSION);
 +
 --- a/drivers/staging/speakup/speakup_audptr.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/drivers/staging/speakup/speakup_audptr.c	2009-08-13 01:21:12.000000000 +0100
-@@ -0,0 +1,191 @@
++++ b/drivers/staging/speakup/speakup_audptr.c	2010-07-22 15:06:52.000000000 +0100
+@@ -0,0 +1,195 @@
 +/*
 + * originally written by: Kirk Reiser <kirk at braille.uwo.ca>
 + * this version considerably modified by David Borowski, david575 at rogers.com
@@ -5989,7 +6157,7 @@
 +#include "speakup.h"
 +#include "serialio.h"
 +
-+#define DRV_VERSION "2.10"
++#define DRV_VERSION "2.11"
 +#define SYNTH_CLEAR 0x18 /* flush synth buffer */
 +#define PROCSPEECH '\r' /* start synth processing speech char */
 +
@@ -6004,6 +6172,7 @@
 +	{ VOL, .u.n = {"\x05[g%d]", 21, 0, 40, 0, 0, NULL }},
 +	{ TONE, .u.n = {"\x05[s%d]", 9, 0, 63, 0, 0, 0 }},
 +	{ PUNCT, .u.n = {"\x05[A%c]", 0, 0, 3, 0, 0, "nmsa" }},
++	{ DIRECT, .u.n = {NULL, 0, 0, 1, 0, 0, NULL }},
 +	V_LAST_VAR
 +};
 +
@@ -6027,6 +6196,8 @@
 +
 +static struct kobj_attribute delay_time_attribute =
 +	__ATTR(delay_time, ROOT_W, spk_var_show, spk_var_store);
++static struct kobj_attribute direct_attribute =
++	__ATTR(direct, USER_RW, spk_var_show, spk_var_store);
 +static struct kobj_attribute full_time_attribute =
 +	__ATTR(full_time, ROOT_W, spk_var_show, spk_var_store);
 +static struct kobj_attribute jiffy_delta_attribute =
@@ -6047,6 +6218,7 @@
 +	&tone_attribute.attr,
 +	&vol_attribute.attr,
 +	&delay_time_attribute.attr,
++	&direct_attribute.attr,
 +	&full_time_attribute.attr,
 +	&jiffy_delta_attribute.attr,
 +	&trigger_time_attribute.attr,
@@ -6153,8 +6325,8 @@
 +MODULE_VERSION(DRV_VERSION);
 +
 --- a/drivers/staging/speakup/speakup_bns.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/drivers/staging/speakup/speakup_bns.c	2009-08-13 01:21:12.000000000 +0100
-@@ -0,0 +1,143 @@
++++ b/drivers/staging/speakup/speakup_bns.c	2010-07-22 15:06:52.000000000 +0100
+@@ -0,0 +1,147 @@
 +/*
 + * originally written by: Kirk Reiser <kirk at braille.uwo.ca>
 +* this version considerably modified by David Borowski, david575 at rogers.com
@@ -6182,7 +6354,7 @@
 +#include "spk_priv.h"
 +#include "speakup.h"
 +
-+#define DRV_VERSION "2.10"
++#define DRV_VERSION "2.11"
 +#define SYNTH_CLEAR 0x18
 +#define PROCSPEECH '\r'
 +
@@ -6193,6 +6365,7 @@
 +	{ PITCH, .u.n = {"\x05%dP", 8, 0, 16, 0, 0, NULL }},
 +	{ VOL, .u.n = {"\x05%dV", 8, 0, 16, 0, 0, NULL }},
 +	{ TONE, .u.n = {"\x05%dT", 8, 0, 16, 0, 0, NULL }},
++	{ DIRECT, .u.n = {NULL, 0, 0, 1, 0, 0, NULL }},
 +	V_LAST_VAR
 +};
 +
@@ -6214,6 +6387,8 @@
 +
 +static struct kobj_attribute delay_time_attribute =
 +	__ATTR(delay_time, ROOT_W, spk_var_show, spk_var_store);
++static struct kobj_attribute direct_attribute =
++	__ATTR(direct, USER_RW, spk_var_show, spk_var_store);
 +static struct kobj_attribute full_time_attribute =
 +	__ATTR(full_time, ROOT_W, spk_var_show, spk_var_store);
 +static struct kobj_attribute jiffy_delta_attribute =
@@ -6233,6 +6408,7 @@
 +	&tone_attribute.attr,
 +	&vol_attribute.attr,
 +	&delay_time_attribute.attr,
++	&direct_attribute.attr,
 +	&full_time_attribute.attr,
 +	&jiffy_delta_attribute.attr,
 +	&trigger_time_attribute.attr,
@@ -6299,8 +6475,8 @@
 +MODULE_VERSION(DRV_VERSION);
 +
 --- a/drivers/staging/speakup/speakup_decext.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/drivers/staging/speakup/speakup_decext.c	2009-08-13 01:21:12.000000000 +0100
-@@ -0,0 +1,238 @@
++++ b/drivers/staging/speakup/speakup_decext.c	2010-07-22 15:06:52.000000000 +0100
+@@ -0,0 +1,242 @@
 +/*
 + * originally written by: Kirk Reiser <kirk at braille.uwo.ca>
 +* this version considerably modified by David Borowski, david575 at rogers.com
@@ -6334,7 +6510,7 @@
 +#include "serialio.h"
 +#include "speakup.h"
 +
-+#define DRV_VERSION "2.13"
++#define DRV_VERSION "2.14"
 +#define SYNTH_CLEAR 0x03
 +#define PROCSPEECH 0x0b
 +static unsigned char last_char;
@@ -6355,6 +6531,7 @@
 +	{ VOL, .u.n = {"[:dv gv %d]", 13, 0, 16, 0, 5, NULL }},
 +	{ PUNCT, .u.n = {"[:pu %c]", 0, 0, 2, 0, 0, "nsa" }},
 +	{ VOICE, .u.n = {"[:n%c]", 0, 0, 9, 0, 0, "phfdburwkv" }},
++	{ DIRECT, .u.n = {NULL, 0, 0, 1, 0, 0, NULL }},
 +	V_LAST_VAR
 +};
 +
@@ -6378,6 +6555,8 @@
 +
 +static struct kobj_attribute delay_time_attribute =
 +	__ATTR(delay_time, ROOT_W, spk_var_show, spk_var_store);
++static struct kobj_attribute direct_attribute =
++	__ATTR(direct, USER_RW, spk_var_show, spk_var_store);
 +static struct kobj_attribute full_time_attribute =
 +	__ATTR(full_time, ROOT_W, spk_var_show, spk_var_store);
 +static struct kobj_attribute jiffy_delta_attribute =
@@ -6398,6 +6577,7 @@
 +	&voice_attribute.attr,
 +	&vol_attribute.attr,
 +	&delay_time_attribute.attr,
++	&direct_attribute.attr,
 +	&full_time_attribute.attr,
 +	&jiffy_delta_attribute.attr,
 +	&trigger_time_attribute.attr,
@@ -6540,8 +6720,8 @@
 +MODULE_VERSION(DRV_VERSION);
 +
 --- a/drivers/staging/speakup/speakup_dectlk.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/drivers/staging/speakup/speakup_dectlk.c	2009-08-13 01:21:12.000000000 +0100
-@@ -0,0 +1,306 @@
++++ b/drivers/staging/speakup/speakup_dectlk.c	2010-07-22 15:06:52.000000000 +0100
+@@ -0,0 +1,315 @@
 +/*
 + * originally written by: Kirk Reiser <kirk at braille.uwo.ca>
 + * this version considerably modified by David Borowski, david575 at rogers.com
@@ -6577,7 +6757,7 @@
 +#include "spk_priv.h"
 +#include "serialio.h"
 +
-+#define DRV_VERSION "2.15"
++#define DRV_VERSION "2.20"
 +#define SYNTH_CLEAR 0x03
 +#define PROCSPEECH 0x0b
 +static volatile int xoff;
@@ -6595,13 +6775,14 @@
 +static DECLARE_WAIT_QUEUE_HEAD(flush);
 +
 +static struct var_t vars[] = {
-+	{ CAPS_START, .u.s = {"[:dv ap 200]" }},
-+	{ CAPS_STOP, .u.s = {"[:dv ap 100]" }},
-+	{ RATE, .u.n = {"[:ra %d]", 9, 0, 18, 150, 25, NULL }},
-+	{ PITCH, .u.n = {"[:dv ap %d]", 80, 0, 200, 20, 0, NULL }},
-+	{ VOL, .u.n = {"[:dv gv %d]", 13, 0, 14, 0, 5, NULL }},
-+	{ PUNCT, .u.n = {"[:pu %c]", 0, 0, 2, 0, 0, "nsa" }},
-+	{ VOICE, .u.n = {"[:n%c]", 0, 0, 9, 0, 0, "phfdburwkv" }},
++	{ CAPS_START, .u.s = {"[:dv ap 160] " }},
++	{ CAPS_STOP, .u.s = {"[:dv ap 100 ] " }},
++	{ RATE, .u.n = {"[:ra %d] ", 180, 75, 650, 0, 0, NULL }},
++	{ PITCH, .u.n = {"[:dv ap %d] ", 122, 50, 350, 0, 0, NULL }},
++	{ VOL, .u.n = {"[:dv g5 %d] ", 86, 60, 86, 0, 0, NULL }},
++	{ PUNCT, .u.n = {"[:pu %c] ", 0, 0, 2, 0, 0, "nsa" }},
++	{ VOICE, .u.n = {"[:n%c] ", 0, 0, 9, 0, 0, "phfdburwkv" }},
++	{ DIRECT, .u.n = {NULL, 0, 0, 1, 0, 0, NULL }},
 +	V_LAST_VAR
 +};
 +
@@ -6625,6 +6806,8 @@
 +
 +static struct kobj_attribute delay_time_attribute =
 +	__ATTR(delay_time, ROOT_W, spk_var_show, spk_var_store);
++static struct kobj_attribute direct_attribute =
++	__ATTR(direct, USER_RW, spk_var_show, spk_var_store);
 +static struct kobj_attribute full_time_attribute =
 +	__ATTR(full_time, ROOT_W, spk_var_show, spk_var_store);
 +static struct kobj_attribute jiffy_delta_attribute =
@@ -6645,17 +6828,21 @@
 +	&voice_attribute.attr,
 +	&vol_attribute.attr,
 +	&delay_time_attribute.attr,
++	&direct_attribute.attr,
 +	&full_time_attribute.attr,
 +	&jiffy_delta_attribute.attr,
 +	&trigger_time_attribute.attr,
 +	NULL,	/* need to NULL terminate the list of attributes */
 +};
 +
++static int ap_defaults[] = {122, 89, 155, 110, 208, 240, 200, 106, 306};
++static int g5_defaults[] = {86, 81, 86, 84, 81, 80, 83, 83, 73};
++
 +static struct spk_synth synth_dectlk = {
 +	.name = "dectlk",
 +	.version = DRV_VERSION,
 +	.long_name = "Dectalk Express",
-+	.init = "[:dv ap 100][:error sp]",
++	.init = "[:error sp :name paul :rate 180 :tsr off] ",
 +	.procspeech = PROCSPEECH,
 +	.clear = SYNTH_CLEAR,
 +	.delay = 500,
@@ -6665,6 +6852,8 @@
 +	.startup = SYNTH_START,
 +	.checkval = SYNTH_CHECK,
 +	.vars = vars,
++	.default_pitch = ap_defaults,
++	.default_vol = g5_defaults,
 +	.probe = serial_synth_probe,
 +	.release = spk_serial_release,
 +	.synth_immediate = spk_synth_immediate,
@@ -6675,7 +6864,7 @@
 +	.read_buff_add = read_buff_add,
 +	.get_index = get_index,
 +	.indexing = {
-+		.command = "[:in re %d] ",
++		.command = "[:in re %d ] ",
 +		.lowindex = 1,
 +		.highindex = 8,
 +		.currindex = 1,
@@ -6849,8 +7038,8 @@
 +MODULE_VERSION(DRV_VERSION);
 +
 --- a/drivers/staging/speakup/speakup_dtlk.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/drivers/staging/speakup/speakup_dtlk.c	2009-08-13 01:21:12.000000000 +0100
-@@ -0,0 +1,379 @@
++++ b/drivers/staging/speakup/speakup_dtlk.c	2010-07-22 15:06:52.000000000 +0100
+@@ -0,0 +1,386 @@
 +/*
 + * originally written by: Kirk Reiser <kirk at braille.uwo.ca>
 +* this version considerably modified by David Borowski, david575 at rogers.com
@@ -6886,7 +7075,7 @@
 +#include "speakup_dtlk.h" /* local header file for DoubleTalk values */
 +#include "speakup.h"
 +
-+#define DRV_VERSION "2.9"
++#define DRV_VERSION "2.10"
 +#define PROCSPEECH 0x00
 +#define synth_readable() ((synth_status = inb_p(speakup_info.port_tts + UART_RX)) & TTS_READABLE)
 +#define synth_writable() ((synth_status = inb_p(speakup_info.port_tts + UART_RX)) & TTS_WRITABLE)
@@ -6914,6 +7103,7 @@
 +	{ PUNCT, .u.n = {"\x01%db", 7, 0, 15, 0, 0, NULL }},
 +	{ VOICE, .u.n = {"\x01%do", 0, 0, 7, 0, 0, NULL }},
 +	{ FREQUENCY, .u.n = {"\x01%df", 5, 0, 9, 0, 0, NULL }},
++	{ DIRECT, .u.n = {NULL, 0, 0, 1, 0, 0, NULL }},
 +	V_LAST_VAR
 +};
 +
@@ -6941,6 +7131,8 @@
 +
 +static struct kobj_attribute delay_time_attribute =
 +	__ATTR(delay_time, ROOT_W, spk_var_show, spk_var_store);
++static struct kobj_attribute direct_attribute =
++	__ATTR(direct, USER_RW, spk_var_show, spk_var_store);
 +static struct kobj_attribute full_time_attribute =
 +	__ATTR(full_time, ROOT_W, spk_var_show, spk_var_store);
 +static struct kobj_attribute jiffy_delta_attribute =
@@ -6963,6 +7155,7 @@
 +	&voice_attribute.attr,
 +	&vol_attribute.attr,
 +	&delay_time_attribute.attr,
++	&direct_attribute.attr,
 +	&full_time_attribute.attr,
 +	&jiffy_delta_attribute.attr,
 +	&trigger_time_attribute.attr,
@@ -7162,6 +7355,8 @@
 +		speakup_info.port_tts = port_forced;
 +		pr_info("probe forced to %x by kernel command line\n",
 +				speakup_info.port_tts);
++		if ((port_forced & 0xf) != 0xf)
++			pr_info("warning: port base should probably end with f\n");
 +		if (synth_request_region(speakup_info.port_tts-1,
 +					SYNTH_IO_EXTENT)) {
 +			pr_warn("sorry, port already reserved\n");
@@ -7187,6 +7382,7 @@
 +	port_val &= 0xfbff;
 +	if (port_val != 0x107f) {
 +		pr_info("DoubleTalk PC: not found\n");
++		synth_release_region(synth_lpc, SYNTH_IO_EXTENT);
 +		return -ENODEV;
 +	}
 +	while (inw_p(synth_lpc) != 0x147f)
@@ -7231,7 +7427,7 @@
 +MODULE_VERSION(DRV_VERSION);
 +
 --- a/drivers/staging/speakup/speakup_dtlk.h	1970-01-01 01:00:00.000000000 +0100
-+++ b/drivers/staging/speakup/speakup_dtlk.h	2009-08-13 01:21:12.000000000 +0100
++++ b/drivers/staging/speakup/speakup_dtlk.h	2010-07-22 15:06:52.000000000 +0100
 @@ -0,0 +1,54 @@
 +/* speakup_dtlk.h - header file for speakups DoubleTalk driver. */
 +
@@ -7288,8 +7484,8 @@
 +	u_char has_indexing;	/* nonzero if indexing is implemented */
 +};
 --- a/drivers/staging/speakup/speakup_dummy.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/drivers/staging/speakup/speakup_dummy.c	2009-08-13 01:21:12.000000000 +0100
-@@ -0,0 +1,144 @@
++++ b/drivers/staging/speakup/speakup_dummy.c	2010-07-22 15:06:52.000000000 +0100
+@@ -0,0 +1,148 @@
 +/*
 + * originally written by: Kirk Reiser <kirk at braille.uwo.ca>
 + * this version considerably modified by David Borowski, david575 at rogers.com
@@ -7320,7 +7516,7 @@
 +#include "speakup.h"
 +
 +#define PROCSPEECH '\n'
-+#define DRV_VERSION "2.10"
++#define DRV_VERSION "2.11"
 +#define SYNTH_CLEAR '!'
 +
 +static struct var_t vars[] = {
@@ -7330,6 +7526,7 @@
 +	{ PITCH, .u.n = {"PITCH %d\n", 8, 0, 16, 0, 0, NULL }},
 +	{ VOL, .u.n = {"VOL %d\n", 8, 0, 16, 0, 0, NULL }},
 +	{ TONE, .u.n = {"TONE %d\n", 8, 0, 16, 0, 0, NULL }},
++	{ DIRECT, .u.n = {NULL, 0, 0, 1, 0, 0, NULL }},
 +	V_LAST_VAR
 +};
 +
@@ -7351,6 +7548,8 @@
 +
 +static struct kobj_attribute delay_time_attribute =
 +	__ATTR(delay_time, ROOT_W, spk_var_show, spk_var_store);
++static struct kobj_attribute direct_attribute =
++	__ATTR(direct, USER_RW, spk_var_show, spk_var_store);
 +static struct kobj_attribute full_time_attribute =
 +	__ATTR(full_time, ROOT_W, spk_var_show, spk_var_store);
 +static struct kobj_attribute jiffy_delta_attribute =
@@ -7370,6 +7569,7 @@
 +	&tone_attribute.attr,
 +	&vol_attribute.attr,
 +	&delay_time_attribute.attr,
++	&direct_attribute.attr,
 +	&full_time_attribute.attr,
 +	&jiffy_delta_attribute.attr,
 +	&trigger_time_attribute.attr,
@@ -7435,8 +7635,8 @@
 +MODULE_VERSION(DRV_VERSION);
 +
 --- a/drivers/staging/speakup/speakup.h	1970-01-01 01:00:00.000000000 +0100
-+++ b/drivers/staging/speakup/speakup.h	2009-08-13 01:21:12.000000000 +0100
-@@ -0,0 +1,124 @@
++++ b/drivers/staging/speakup/speakup.h	2010-07-22 15:06:52.000000000 +0100
+@@ -0,0 +1,127 @@
 +#ifndef _SPEAKUP_H
 +#define _SPEAKUP_H
 +#include <linux/version.h>
@@ -7444,7 +7644,7 @@
 +#include "spk_types.h"
 +#include "i18n.h"
 +
-+#define SPEAKUP_VERSION "3.1.3"
++#define SPEAKUP_VERSION "3.1.5"
 +#define KEY_MAP_VER 119
 +#define SHIFT_TBL_SIZE 64
 +#define MAX_DESC_LEN 72
@@ -7480,10 +7680,6 @@
 +#define B_SYM 0x0800
 +#define B_CAPSYM (B_CAP|B_SYM)
 +
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,23)
-+#define inverse_translate(vc, c) inverse_translate(vc, c, 0)
-+#endif
-+
 +#define IS_WDLM(x) (spk_chartab[((u_char)x)]&B_WDLM)
 +#define IS_CHAR(x, type) (spk_chartab[((u_char)x)]&type)
 +#define IS_TYPE(x, type) ((spk_chartab[((u_char)x)]&type) == type)
@@ -7559,11 +7755,18 @@
 +extern short pitch_shift, synth_flags;
 +extern int quiet_boot;
 +extern char *synth_name;
++extern struct bleep unprocessed_sound;
++
++/* Prototypes from fakekey.c. */
++int speakup_add_virtual_keyboard(void);
++void speakup_remove_virtual_keyboard(void);
++void speakup_fake_down_arrow(void);
++bool speakup_fake_key_pressed(void);
 +
 +#endif
 --- a/drivers/staging/speakup/speakup_keypc.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/drivers/staging/speakup/speakup_keypc.c	2009-08-13 01:21:12.000000000 +0100
-@@ -0,0 +1,323 @@
++++ b/drivers/staging/speakup/speakup_keypc.c	2010-07-22 15:06:52.000000000 +0100
+@@ -0,0 +1,327 @@
 +/*
 + * written by David Borowski
 + *
@@ -7596,7 +7799,7 @@
 +#include "spk_priv.h"
 +#include "speakup.h"
 +
-+#define DRV_VERSION "2.9"
++#define DRV_VERSION "2.10"
 +#define SYNTH_IO_EXTENT	0x04
 +#define SWAIT udelay(70)
 +#define synth_writable() (inb_p(synth_port + UART_RX) & 0x10)
@@ -7620,6 +7823,7 @@
 +	{ CAPS_STOP, .u.s = {"[f90]" }},
 +	{ RATE, .u.n = {"\04%c ", 8, 0, 10, 81, -8, NULL }},
 +	{ PITCH, .u.n = {"[f%d]", 5, 0, 9, 40, 10, NULL }},
++	{ DIRECT, .u.n = {NULL, 0, 0, 1, 0, 0, NULL }},
 +	V_LAST_VAR
 +};
 +
@@ -7637,6 +7841,8 @@
 +
 +static struct kobj_attribute delay_time_attribute =
 +	__ATTR(delay_time, ROOT_W, spk_var_show, spk_var_store);
++static struct kobj_attribute direct_attribute =
++	__ATTR(direct, USER_RW, spk_var_show, spk_var_store);
 +static struct kobj_attribute full_time_attribute =
 +	__ATTR(full_time, ROOT_W, spk_var_show, spk_var_store);
 +static struct kobj_attribute jiffy_delta_attribute =
@@ -7654,6 +7860,7 @@
 +	&pitch_attribute.attr,
 +	&rate_attribute.attr,
 +	&delay_time_attribute.attr,
++	&direct_attribute.attr,
 +	&full_time_attribute.attr,
 +	&jiffy_delta_attribute.attr,
 +	&trigger_time_attribute.attr,
@@ -7846,7 +8053,7 @@
 +	}
 +	if (port_val != 0x80) {
 +		pr_info("%s: not found\n", synth->long_name);
-+		synth_release_region(synth_portlist[i], SYNTH_IO_EXTENT);
++		synth_release_region(synth_port, SYNTH_IO_EXTENT);
 +		synth_port = 0;
 +		return -ENODEV;
 +	}
@@ -7888,8 +8095,8 @@
 +MODULE_VERSION(DRV_VERSION);
 +
 --- a/drivers/staging/speakup/speakup_ltlk.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/drivers/staging/speakup/speakup_ltlk.c	2009-08-13 01:21:12.000000000 +0100
-@@ -0,0 +1,191 @@
++++ b/drivers/staging/speakup/speakup_ltlk.c	2010-07-22 15:06:52.000000000 +0100
+@@ -0,0 +1,195 @@
 +/*
 + * originally written by: Kirk Reiser <kirk at braille.uwo.ca>
 +* this version considerably modified by David Borowski, david575 at rogers.com
@@ -7919,7 +8126,7 @@
 +#include "serialio.h"
 +#include "speakup_dtlk.h" /* local header file for LiteTalk values */
 +
-+#define DRV_VERSION "2.10"
++#define DRV_VERSION "2.11"
 +#define synth_full( ) ( !( inb( synth_port_tts + UART_MSR ) & UART_MSR_CTS ) )
 +#define PROCSPEECH 0x0d
 +
@@ -7935,6 +8142,7 @@
 +	{ PUNCT, .u.n = {"\x01%db", 7, 0, 15, 0, 0, NULL }},
 +	{ VOICE, .u.n = {"\x01%do", 0, 0, 7, 0, 0, NULL }},
 +	{ FREQUENCY, .u.n = {"\x01%df", 5, 0, 9, 0, 0, NULL }},
++	{ DIRECT, .u.n = {NULL, 0, 0, 1, 0, 0, NULL }},
 +	V_LAST_VAR
 +};
 +
@@ -7962,6 +8170,8 @@
 +
 +static struct kobj_attribute delay_time_attribute =
 +	__ATTR(delay_time, ROOT_W, spk_var_show, spk_var_store);
++static struct kobj_attribute direct_attribute =
++	__ATTR(direct, USER_RW, spk_var_show, spk_var_store);
 +static struct kobj_attribute full_time_attribute =
 +	__ATTR(full_time, ROOT_W, spk_var_show, spk_var_store);
 +static struct kobj_attribute jiffy_delta_attribute =
@@ -7984,6 +8194,7 @@
 +	&voice_attribute.attr,
 +	&vol_attribute.attr,
 +	&delay_time_attribute.attr,
++	&direct_attribute.attr,
 +	&full_time_attribute.attr,
 +	&jiffy_delta_attribute.attr,
 +	&trigger_time_attribute.attr,
@@ -8082,7 +8293,7 @@
 +MODULE_VERSION(DRV_VERSION);
 +
 --- a/drivers/staging/speakup/speakupmap.h	1970-01-01 01:00:00.000000000 +0100
-+++ b/drivers/staging/speakup/speakupmap.h	2009-08-13 01:21:12.000000000 +0100
++++ b/drivers/staging/speakup/speakupmap.h	2010-07-22 15:06:52.000000000 +0100
 @@ -0,0 +1,65 @@
 +	119, 62, 6,
 +	0, 16, 20, 17, 32, 48, 0,
@@ -8150,7 +8361,7 @@
 +	125, 128, 128, 0, 0, 0, 0,
 +	0, 119
 --- a/drivers/staging/speakup/speakupmap.map	1970-01-01 01:00:00.000000000 +0100
-+++ b/drivers/staging/speakup/speakupmap.map	2009-08-13 01:21:12.000000000 +0100
++++ b/drivers/staging/speakup/speakupmap.map	2010-07-22 15:06:52.000000000 +0100
 @@ -0,0 +1,93 @@
 +spk key_f9 = punc_level_dec
 +spk key_f10 = punc_level_inc
@@ -8246,7 +8457,7 @@
 + ctrl spk key_semicolon = say_last_char
 +spk key_r = read_all_doc
 --- a/drivers/staging/speakup/speakup_soft.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/drivers/staging/speakup/speakup_soft.c	2009-08-13 01:21:12.000000000 +0100
++++ b/drivers/staging/speakup/speakup_soft.c	2010-07-22 15:06:52.000000000 +0100
 @@ -0,0 +1,366 @@
 +/* speakup_soft.c - speakup driver to register and make available
 + * a user space device for software synthesizers.  written by: Kirk
@@ -8274,7 +8485,7 @@
 +#include <linux/unistd.h>
 +#include <linux/miscdevice.h> /* for misc_register, and SYNTH_MINOR */
 +#include <linux/poll.h> /* for poll_wait() */
-+#include <linux/sched.h>
++#include <linux/sched.h> /* schedule(), signal_pending(), TASK_INTERRUPTIBLE */
 +
 +#include "spk_priv.h"
 +#include "speakup.h"
@@ -8615,8 +8826,8 @@
 +MODULE_VERSION(DRV_VERSION);
 +
 --- a/drivers/staging/speakup/speakup_spkout.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/drivers/staging/speakup/speakup_spkout.c	2009-08-13 01:21:12.000000000 +0100
-@@ -0,0 +1,161 @@
++++ b/drivers/staging/speakup/speakup_spkout.c	2010-07-22 15:06:52.000000000 +0100
+@@ -0,0 +1,165 @@
 +/*
 + * originally written by: Kirk Reiser <kirk at braille.uwo.ca>
 +* this version considerably modified by David Borowski, david575 at rogers.com
@@ -8645,7 +8856,7 @@
 +#include "speakup.h"
 +#include "serialio.h"
 +
-+#define DRV_VERSION "2.10"
++#define DRV_VERSION "2.11"
 +#define SYNTH_CLEAR 0x18
 +#define PROCSPEECH '\r'
 +
@@ -8659,6 +8870,7 @@
 +	{ VOL, .u.n = {"\x05V%d", 9, 0, 9, 0, 0, NULL }},
 +	{ TONE, .u.n = {"\x05T%c", 8, 0, 25, 65, 0, NULL }},
 +	{ PUNCT, .u.n = {"\x05M%c", 0, 0, 3, 0, 0, "nsma" }},
++	{ DIRECT, .u.n = {NULL, 0, 0, 1, 0, 0, NULL }},
 +	V_LAST_VAR
 +};
 +
@@ -8682,6 +8894,8 @@
 +
 +static struct kobj_attribute delay_time_attribute =
 +	__ATTR(delay_time, ROOT_W, spk_var_show, spk_var_store);
++static struct kobj_attribute direct_attribute =
++	__ATTR(direct, USER_RW, spk_var_show, spk_var_store);
 +static struct kobj_attribute full_time_attribute =
 +	__ATTR(full_time, ROOT_W, spk_var_show, spk_var_store);
 +static struct kobj_attribute jiffy_delta_attribute =
@@ -8702,6 +8916,7 @@
 +	&tone_attribute.attr,
 +	&vol_attribute.attr,
 +	&delay_time_attribute.attr,
++	&direct_attribute.attr,
 +	&full_time_attribute.attr,
 +	&jiffy_delta_attribute.attr,
 +	&trigger_time_attribute.attr,
@@ -8779,8 +8994,8 @@
 +MODULE_VERSION(DRV_VERSION);
 +
 --- a/drivers/staging/speakup/speakup_txprt.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/drivers/staging/speakup/speakup_txprt.c	2009-08-13 01:21:12.000000000 +0100
-@@ -0,0 +1,143 @@
++++ b/drivers/staging/speakup/speakup_txprt.c	2010-07-22 15:06:52.000000000 +0100
+@@ -0,0 +1,147 @@
 +/*
 + * originally written by: Kirk Reiser <kirk at braille.uwo.ca>
 +* this version considerably modified by David Borowski, david575 at rogers.com
@@ -8808,7 +9023,7 @@
 +#include "spk_priv.h"
 +#include "speakup.h"
 +
-+#define DRV_VERSION "2.10"
++#define DRV_VERSION "2.11"
 +#define SYNTH_CLEAR 0x18
 +#define PROCSPEECH '\r' /* process speech char */
 +
@@ -8819,6 +9034,7 @@
 +	{ PITCH, .u.n = {"\x05P%d", 5, 0, 9, 0, 0, NULL }},
 +	{ VOL, .u.n = {"\x05V%d", 5, 0, 9, 0, 0, NULL }},
 +	{ TONE, .u.n = {"\x05T%c", 12, 0, 25, 61, 0, NULL }},
++	{ DIRECT, .u.n = {NULL, 0, 0, 1, 0, 0, NULL }},
 +	V_LAST_VAR
 +	 };
 +
@@ -8840,6 +9056,8 @@
 +
 +static struct kobj_attribute delay_time_attribute =
 +	__ATTR(delay_time, ROOT_W, spk_var_show, spk_var_store);
++static struct kobj_attribute direct_attribute =
++	__ATTR(direct, USER_RW, spk_var_show, spk_var_store);
 +static struct kobj_attribute full_time_attribute =
 +	__ATTR(full_time, ROOT_W, spk_var_show, spk_var_store);
 +static struct kobj_attribute jiffy_delta_attribute =
@@ -8859,6 +9077,7 @@
 +	&tone_attribute.attr,
 +	&vol_attribute.attr,
 +	&delay_time_attribute.attr,
++	&direct_attribute.attr,
 +	&full_time_attribute.attr,
 +	&jiffy_delta_attribute.attr,
 +	&trigger_time_attribute.attr,
@@ -8925,7 +9144,7 @@
 +MODULE_VERSION(DRV_VERSION);
 +
 --- a/drivers/staging/speakup/spk_priv.h	1970-01-01 01:00:00.000000000 +0100
-+++ b/drivers/staging/speakup/spk_priv.h	2009-08-13 01:21:12.000000000 +0100
++++ b/drivers/staging/speakup/spk_priv.h	2010-07-22 15:06:52.000000000 +0100
 @@ -0,0 +1,93 @@
 +/* spk_priv.h
 +   review functions for the speakup screen review package.
@@ -9021,7 +9240,7 @@
 +
 +#endif
 --- a/drivers/staging/speakup/spk_priv_keyinfo.h	1970-01-01 01:00:00.000000000 +0100
-+++ b/drivers/staging/speakup/spk_priv_keyinfo.h	2009-08-13 01:21:12.000000000 +0100
++++ b/drivers/staging/speakup/spk_priv_keyinfo.h	2010-07-22 15:06:52.000000000 +0100
 @@ -0,0 +1,110 @@
 +/* spk_priv.h
 +   review functions for the speakup screen review package.
@@ -9134,8 +9353,8 @@
 +
 +#endif
 --- a/drivers/staging/speakup/spk_types.h	1970-01-01 01:00:00.000000000 +0100
-+++ b/drivers/staging/speakup/spk_types.h	2009-08-13 01:21:12.000000000 +0100
-@@ -0,0 +1,185 @@
++++ b/drivers/staging/speakup/spk_types.h	2010-07-22 15:06:52.000000000 +0100
+@@ -0,0 +1,193 @@
 +#ifndef SPEAKUP_TYPES_H
 +#define SPEAKUP_TYPES_H
 +
@@ -9166,7 +9385,8 @@
 +	E_DEFAULT = 0,
 +	E_SET,
 +	E_INC,
-+	E_DEC
++	E_DEC,
++	E_NEW_DEFAULT,
 +};
 +
 +enum var_id_t {
@@ -9300,6 +9520,8 @@
 +	short startup;
 +	const int checkval; /* for validating a proper synth module */
 +	struct var_t *vars;
++	int *default_pitch;
++	int *default_vol;
 +	int (*probe)(struct spk_synth *synth);
 +	void (*release)(void);
 +	const char *(*synth_immediate)(struct spk_synth *synth, const char *buff);
@@ -9320,9 +9542,14 @@
 +	int flushing;
 +};
 +
++struct bleep {
++	short freq;
++	unsigned long jiffies;
++	int active;
++};
 +#endif
 --- a/drivers/staging/speakup/synth.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/drivers/staging/speakup/synth.c	2009-08-13 01:21:12.000000000 +0100
++++ b/drivers/staging/speakup/synth.c	2010-07-22 15:06:52.000000000 +0100
 @@ -0,0 +1,458 @@
 +#include <linux/types.h>
 +#include <linux/ctype.h>	/* for isdigit() and friends */
@@ -9783,8 +10010,8 @@
 +
 +short punc_masks[] = { 0, SOME, MOST, PUNC, PUNC|B_SYM };
 --- a/drivers/staging/speakup/thread.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/drivers/staging/speakup/thread.c	2009-08-13 01:21:12.000000000 +0100
-@@ -0,0 +1,47 @@
++++ b/drivers/staging/speakup/thread.c	2010-07-22 15:06:52.000000000 +0100
+@@ -0,0 +1,58 @@
 +#include <linux/kthread.h>
 +#include <linux/wait.h>
 +
@@ -9799,14 +10026,22 @@
 +{
 +	unsigned long flags;
 +	int should_break;
++	struct bleep our_sound;
++
++	our_sound.active = 0;
++	our_sound.freq = 0;
++	our_sound.jiffies = 0;
 +
 +	mutex_lock(&spk_mutex);
 +	while (1) {
 +		DEFINE_WAIT(wait);
 +		while(1) {
 +			spk_lock(flags);
++			our_sound = unprocessed_sound;
++			unprocessed_sound.active = 0;
 +			prepare_to_wait(&speakup_event, &wait, TASK_INTERRUPTIBLE);
 +			should_break = kthread_should_stop() ||
++				our_sound.active ||
 +				(synth && synth->catch_up && synth->alive &&
 +					(speakup_info.flushing ||
 +					!synth_buffer_empty()));
@@ -9821,6 +10056,9 @@
 +		if (kthread_should_stop())
 +			break;
 +
++		if (our_sound.active) {
++			kd_mksound(our_sound.freq, our_sound.jiffies);
++		}
 +		if (synth && synth->catch_up && synth->alive) {
 +			/* It is up to the callee to take the lock, so that it
 +			 * can sleep whenever it likes */
@@ -9833,8 +10071,8 @@
 +	return 0;
 +}
 --- a/drivers/staging/speakup/varhandlers.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/drivers/staging/speakup/varhandlers.c	2009-08-13 01:21:12.000000000 +0100
-@@ -0,0 +1,395 @@
++++ b/drivers/staging/speakup/varhandlers.c	2010-07-22 15:06:52.000000000 +0100
+@@ -0,0 +1,403 @@
 +#include <linux/ctype.h>
 +#include "spk_types.h"
 +#include "spk_priv.h"
@@ -10023,6 +10261,14 @@
 +	struct var_t *var_data = var->data;
 +	if (var_data == NULL)
 +		return E_UNDEF;
++
++	if (how == E_NEW_DEFAULT) {
++		if (input < var_data->u.n.low || input > var_data->u.n.high)
++			ret = E_RANGE;
++		else
++			var_data->u.n.default_val = input;
++		return ret;
++	}
 +	if (how == E_DEFAULT) {
 +		val = var_data->u.n.default_val;
 +		ret = SET_DEFAULT;

Added: dists/trunk/linux-2.6/debian/patches/features/all/speakup/speakup-fix-vc_tty.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/trunk/linux-2.6/debian/patches/features/all/speakup/speakup-fix-vc_tty.patch	Sat Sep 18 16:48:22 2010	(r16309)
@@ -0,0 +1,38 @@
+From: Ben Hutchings <ben at decadent.org.uk>
+Subject: [PATCH] speakup: Fix references to vc_data::vc_tty
+
+--- a/drivers/staging/speakup/buffers.c
++++ b/drivers/staging/speakup/buffers.c
+@@ -30,8 +30,8 @@
+ 	for (i = 0; i < MAX_NR_CONSOLES; i++) {
+ 		if (speakup_console[i] && speakup_console[i]->tty_stopped)
+ 			continue;
+-		if ((vc_cons[i].d != NULL) && (vc_cons[i].d->vc_tty != NULL))
+-			start_tty(vc_cons[i].d->vc_tty);
++		if ((vc_cons[i].d != NULL) && (vc_cons[i].d->port.tty != NULL))
++			start_tty(vc_cons[i].d->port.tty);
+ 	}
+ 	unlock_kernel();
+ }
+@@ -53,8 +53,8 @@
+ 		return;
+ 	}
+ 	for (i = 0; i < MAX_NR_CONSOLES; i++)
+-		if ((vc_cons[i].d != NULL) && (vc_cons[i].d->vc_tty != NULL))
+-			stop_tty(vc_cons[i].d->vc_tty);
++		if ((vc_cons[i].d != NULL) && (vc_cons[i].d->port.tty != NULL))
++			stop_tty(vc_cons[i].d->port.tty);
+ 	if (!in_atomic())
+ 		unlock_kernel();
+ 	return;
+--- a/drivers/staging/speakup/main.c
++++ b/drivers/staging/speakup/main.c
+@@ -2010,7 +2010,7 @@
+ 		return 0;
+ 
+ 	spk_lock(flags);
+-	tty = vc->vc_tty;
++	tty = vc->port.tty;
+ 	if (type >= 0xf0)
+ 		type -= 0xf0;
+ 	if (type == KT_PAD &&

Modified: dists/trunk/linux-2.6/debian/patches/series/base
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/series/base	Sat Sep 18 01:06:06 2010	(r16308)
+++ dists/trunk/linux-2.6/debian/patches/series/base	Sat Sep 18 16:48:22 2010	(r16309)
@@ -23,10 +23,7 @@
 # diff -ur --unidirectional-new-file nonexistent src | filterdiff --strip=1 --addoldprefix=a/drivers/staging/speakup/ --addnewprefix=b/drivers/staging/speakup/
 + features/all/speakup/speakup-add.patch
 + features/all/speakup/speakup-kbuild.patch
-# made manually
-+ features/all/speakup/slab-build-fix.patch
-# speakup also needs this
-+ debian/keyboard-export-k_handler.patch
++ features/all/speakup/speakup-fix-vc_tty.patch
 
 + bugfix/ia64/hardcode-arch-script-output.patch
 + bugfix/mips/disable-advansys.patch



More information about the Kernel-svn-changes mailing list