Speakup and PCI Express Serial Cards

Trevor Astrope astrope at tabbweb.com
Fri Jan 22 16:07:27 EST 2010


For those following along in the ongoing saga of Trevor versus speakup and 
the pci express card, here is the latest chapter:

I last left you after modifying serialio.h and hard coding the values for 
my pci express card. This had no effect.

Well, after checking a little closer, the hard coded values for 
SERIAL_PORT_DFNS is in an #ifndef, so it seems it is defined elsewhere. 
Trevor not being a C programmer, let alone a kernel developer, changed 
that #ifndef to a #ifdef to see where it is defined.

Turns out, in my case, it is defined in 
/usr/src/kernels/2.6.31.9-174.fc12.x86_64/arch/x86/include/asm/serial.h, 
and what is more, it is defined the same way as it is in serialio.h.

Taking up thy keyboard, I carefully change the first entry to look like 
this:

         { 0, BASE_BAUD, 0xCC00, 16, STD_COM_FLAGS },    /* ttyS0 */     \

I then do the ever so familiar, make clean; make; make modules_install; 
and add another depmod -a, just for luck. But alas, it is all for not. I 
still only hear silence after connecting my dectalk express and invoking 
the modprobe speakup_dectlk command.

Desperate times, calling for desperate measures, I once again roll up my 
sleeves, take a deep breath, and once again delve into the speakup source 
code...

I notice some print statements that are commented out in serialio.c, so I 
uncomment them in hopes of getting some more information in the logs. For 
those who are still following along and are just dieing to know what they 
are, I won't keep you in suspense...

75 /*printk(KERN_ERR "in irq\n"); */
76 /*pr_warn("in IRQ\n"); */

There are some others, but they aren't important for now.

At first, I did not see anything else being printed in the logs. In the 
time honoured tradition of, "what happens when I do this," I commented out 
these lines in serialio.c:

41                if (synth_request_region(ser->port, 8))
42                        return NULL;

Once again, after the make clean; make; make modules_install; ritual, 
followed by the modprobe speakup_dectlk invocation, with the depmod -a 
thrown in there for luck, you'll never guess what happened...

I heard the following in a slow and drawn out, but still familiar voice, 
"Dectalk Express found." But where is the rest? No prompt, no nothing. Hit 
enter a few times, but only my old friend, silence. I told you that you 
wouldn't guess.

I did find those print statements I told you about in the logs though, so 
I do feel I'm getting closer. I feel I only 
need to figure out what synth_request_region(ser->port, 8) means, and I'll 
be a little closer...

I will beg upon the mercy of the speakup developers and offer them a gift 
in the form of my logs and hopefully I will be rewarded with some 
enlightenment.

Jan 22 15:10:05 trevor kernel: speakup: unregistering synth device 
/dev/synth
Jan 22 15:10:54 trevor kernel: speakup 3.1.3: initialized
Jan 22 15:10:54 trevor kernel: synth name on entry is: <NULL>
Jan 22 15:10:54 trevor kernel: initialized device: /dev/synth, node (MAJOR 
10, $
Jan 22 15:10:54 trevor kernel: synth probe
Jan 22 15:10:54 trevor kernel: Ports not available, trying to steal them
Jan 22 15:10:54 trevor kernel: Trying to free nonexistent resource 
<00000000000$
Jan 22 15:10:54 trevor kernel: in irq
Jan 22 15:10:54 trevor kernel: in IRQ

These last two lines are repeated a few times

Jan 22 15:10:54 trevor kernel: Jan 22 15:10:54 trevor kernel: Dectalk 
Express: $

And then about a hundred more of the irq lines, followed by this, likely 
after I disconnected the synth

Jan 22 15:11:27 trevor kernel: Dectalk Express: too many timeouts, 
deactivating$

As usual, any help is appreciated. I hope you at least enjoyed my 
ramblings as I slowly, but surely lose my mind.

Thanks,

Trevor





More information about the Speakup mailing list