[tlinux-users:08525] Re: reg:ToshibaA100-139 Fn key

Jaime <[email protected]> Tue, 19 Jun 2007 18:55:35 +0200
Newsgroups gmane.linux.hardware.toshiba
Message-ID <[email protected]>
Sorry, no idea about where obtain information about that. I started
the for lcd brightness module after some mails I sent to the Toshiba
support requesting a specification with no result (They sent me some
pdf's, but unfortunately they were useless), so debugging the windows
driver was the only solution.

I think it would be better add this module to a more generic-driver
rather than adding more functionalities. I sent it to the omnibook
people. Maybe you should add the functionalities to this driver.

I have an ATI x1400 and never had a problem with the VGA output.

Cheers

Jaime


On 6/19/07, Christian Tenllado <[email protected]> wrote:
> Thanks a lot Jaime, it was a problem with my insmod. I don't know insmod
> does not work on my installation. I copied the module in
> the /lib/modules/mykernel and used run depmod so I could load the module
> with modprobe. Now it works!!
>
> Thanks once more. I will have a look to the code to see if I can add
> more functionality. For instance, I need to get the VGA output working,
> do you have any idea where can I get the info I need for that?
>
> Thanks again a lot.
>
> Cheers.
>
> El vie, 15-06-2007 a las 13:18 +0200, Jaime escribió:
> > Christian, please send a bit more information of what you are doing.
> > The commands you use and their outputs, as well as the last lines of
> > syslog where the OOPS happened.
> > I'm using 2.6.21 and shouldn't be a problem the kernel version. A
> > segmentation fault or a hang could happen during echoing the number to
> > the device (because the module doesn't make any kind of tests) but
> > during the insmod it's very strange.
> >
> > Try to send more data about it, maybe it could be solved.
> >
> > Regards
> >
> > Jaime
> >
> > On 6/15/07, Christian Tenllado <[email protected]> wrote:
> > > Hello:
> > >
> > > I have followed this conversation, because I have the same problem. I
> > > have followed this instructions on a Toshiba A100 with a Debian Sid and
> > > kernel 2.6.21-1-686 kernel.
> > >
> > > When I try insmod I get a segmentation fault. Do you know if the problem
> > > is the version of the kernel I am using? Can you help me to find out
> > > which is the problem?
> > >
> > > Thanks in advance.
> > >
> > > Christian
> > >
> > > El jue, 14-06-2007 a las 20:15 +0200, Jaime escribió:
> > > > You can type the following commands in a xterm:
> > > >
> > > >    mkdir test_dir
> > > > copy test.c to test_dir
> > > >
> > > >    cd test_dir
> > > >    echo "obj-m := test.o" > Makefile
> > > >    make -C /usr/src/linux SUBDIRS=`pwd` modules
> > > >    mknod test_file c 181 0
> > > >
> > > > Until here only the first time. Then you can load de module (as root):
> > > >
> > > >    insmod test.ko
> > > >
> > > > Whatever user can do now:
> > > >
> > > >    echo 2 > test_file
> > > >
> > > > The "2" can be a number from 0 to 7 (the brightness)
> > > >
> > > > In order to make this work you should have de kernel source's in
> > > > /usr/src/linux to compile the module.
> > > >
> > > > Hope this will be useful for you.
> > > > Regards
> > > >
> > > > Jaime
> > > >
> > > >
> > > >
> > > >
> > > >
> > > > On 6/14/07, atul jain <[email protected]> wrote:
> > > > >
> > > > > Hello Jaime,
> > > > >               Thanks for sending  module , can you give  the details
> > > > > regarding first part
> > > > > Which  Makefile   i  need  to  edit in oder to  make it  work , as  it is
> > > > > unclear to  me .
> > > > >
> > > > >
> > > > >
> > > > > On 6/14/07, Jaime <[email protected]> wrote:
> > > > > > I made a small module with reverse engeneering of the Windows driver.
> > > > > > I only tested on my Toshiba Satellite Pro A100 and it works.
> > > > > > To compile:
> > > > > > Edit a Makefile and add:
> > > > > >    obj-m := test.o
> > > > >
> > > > >
> > > > > > then run in the same directory:
> > > > > >
> > > > > >   make -C /usr/src/linux SUBDIRS=`pwd` modules
> > > > > >
> > > > > > Then make the file for the new device:
> > > > > >
> > > > > >   mknod test_file c 181 0
> > > > > >
> > > > > > Load de module:
> > > > > >
> > > > > >   insmod test.ko
> > > > > >
> > > > > > And now, if you are very very lucky, maybe it will work:
> > > > > >
> > > > > >    echo 3 > test_file
> > > > > >
> > > > > > But I warn: THE MOST PROBABLY THING WILL HAPPEN IS THE FREEZE OF THE
> > > > > > LAPTOP IF YOUR MODEL DOESN'T MATCH EXACTLY WITH THE MODEL I TESTED. If
> > > > > > you don't have a Phoenix BIOS don't try this, and if you have.. well..
> > > > > > it's your election x)
> > > > > >
> > > > > > Here is the driver
> > > > > >
> > > > > > test.c
> > > > > > =================== CUT HERE ===================
> > > > > > /*
> > > > > > * Module for Toshiba lcd bright change.
> > > > > > * I only made it for my Toshiba Satellite Pro A100 with Phoenix BIOS
> > > > > > * I don't know under which models it works (I suppose very few)
> > > > > > * The asm code I inserted I took it from a disass of the windows
> > > > > > * driver provided by Toshiba.
> > > > > > * WARNING:
> > > > > > * The driver does NOT make any tests if the model is valid or not
> > > > > > * so, the MOST probably effect of running this will be the hang of
> > > > > > * the laptop, or something worse.
> > > > > > * PLEASE DON'T USE THIS unless you really know what you are doing
> > > > > > * This module isn't made for give support to any Toshiba model,
> > > > > > * only for tests purpouses , sorry about it.
> > > > > > *
> > > > > > * Jaime F. <[email protected]>
> > > > > > * License: GNU/GPL
> > > > > > */
> > > > > >
> > > > > >
> > > > > > #include <linux/kernel.h>
> > > > > > #include <linux/module.h>
> > > > > > #include <linux/fs.h>
> > > > > > #include <linux/io.h>
> > > > > >
> > > > > > #define DEVICE_NAME "lcd_bright"
> > > > > > #define MAJOR_NUM 181
> > > > > >
> > > > > > char *ptr;
> > > > > >
> > > > > > static ssize_t
> > > > > > device_write(struct file *file,
> > > > > >              const char __user * buffer, size_t length, loff_t * offset)
> > > > > > {
> > > > > >   char *addr;
> > > > > >   addr=(char *)__pa(ptr);
> > > > > >   addr+=0x10;
> > > > > >
> > > > > >   strcpy(ptr, "INVTOS");
> > > > > >   //ptr+=10;
> > > > > >   *(ptr+16)=(char) buffer[0]-0x30;
> > > > > >   //printk("escribiendo %x\n", *ptr);
> > > > > > /*
> > > > > >   inb( 0x2e);
> > > > > >   inb( 0x2f);
> > > > > >   outb(7, 0x2e);
> > > > > >   outb(9, 0x2f);
> > > > > >   v3=inb(0x2f);
> > > > > >   outb2(0x2e, 0x55);
> > > > > >   outb2(0x2e, 7);
> > > > > >   outb2(0x2f,0x10);
> > > > > >   outb2(0x2e,0xe0);
> > > > > >   v4=inb(0x2f);
> > > > > >   outb2(0x2f,2);
> > > > > >   v5=inb(0x2f);
> > > > > >   outb2(0x2f,3);
> > > > > >
> > > > > >   outb2(0x2e, 7);
> > > > > >   outb2(0x2f,9);
> > > > > >   outb2(0x2e,0x60);
> > > > > >   v1=inb(0x2f);
> > > > > >   outb2(0x2e,7);
> > > > > >   outb2(0x2f,0x10);
> > > > > >   outb2(0x2e,0xe0);
> > > > > >   outb2(0x2f,0);
> > > > > >   outb2(0x2e, 7);
> > > > > >   outb2(0x2f, 9);
> > > > > >   outb2 ( 0x2e, 0xaa);
> > > > > >   outb2 ( 0x400, 0xAF);
> > > > > >   v2=inb( 0x401);
> > > > > >   outb2( 0x400, 0xAF);
> > > > > > */
> > > > > >
> > > > > >   __asm__("cli\n"
> > > > > >         /*        "mov $0x01E4, %%eax\n"
> > > > > >                   "mov $0x00b0, %%dx\n"
> > > > > >                   "movb $0x02, 0xEF\n"
> > > > > >                   "out %%eax, %%dx\n"
> > > > > > */
> > > > > >                 "mov %0, %%edx\n"
> > > > > >                 "mov %%edx, %%edi\n"
> > > > > >                 "mov $0x20, %%ecx\n"
> > > > > >                 "mov $0x8000f840, %%eax\n mov $0xcf8, %%edx\n out %%eax,
> > > > > %%dx\n"
> > > > > >                 "mov $0xcfc, %%dx\n"
> > > > > >                 "in %%dx, %%eax\n"
> > > > > >                 "and $0x0000ff80, %%eax\n"
> > > > > >                 "add $0x2c, %%eax\n"
> > > > > >                 "mov %%ax, %%dx\n"
> > > > > >                 "in %%dx, %%eax\n"
> > > > > >                 "push %%eax\n"
> > > > > > //              "mov %%ax, %%dx\n"
> > > > > >                 "xor %%eax, %%eax\n"
> > > > > >                 "out %%eax, %%dx\n"
> > > > > >                 "mov $0xA2E4, %%eax\n"
> > > > > >                 "mov $0xb2, %%dx\n"
> > > > > >                 "out %%eax, %%dx\n"
> > > > > >                 "pop %%eax\n"
> > > > > >                 "mov $0x102c, %%dx\n"
> > > > > >                 "out %%eax, %%dx\n"
> > > > > > /*              "movl $0x10, %%edx\n\t"
> > > > > >                 "movl %%edx, %%edi\n\t"
> > > > > >                 "movl $0x20, %%ecx\n"
> > > > > >                 "movw  $0x00E4, %%ax\n"
> > > > > >                 "movb  $0x5, %%ah\n"
> > > > > >                 "outw  %%ax, $0xb2\n"
> > > > > >                 "movl %%eax, %0\n sti\n"
> > > > > >                 */
> > > > > >         :
> > > > > >         :"r"(addr): "%eax", "%edx", "%ecx","%edi", "%esi");
> > > > > >   return length;
> > > > > > }
> > > > > >
> > > > > > struct file_operations Fops = {
> > > > > >   .write = device_write,
> > > > > > };
> > > > > >
> > > > > > int init_module()
> > > > > > {
> > > > > >   int ret_val;
> > > > > >   ptr=(char *)kmalloc(100, GFP_KERNEL);
> > > > > >   ptr+=10;
> > > > > >   ret_val = register_chrdev(MAJOR_NUM, DEVICE_NAME, &Fops);
> > > > > >
> > > > > >   if (ret_val < 0)
> > > > > >   {
> > > > > >     printk(KERN_ALERT "El registro del dispositivo falló (%d)\n",
> > > > > ret_val);
> > > > > >     return ret_val;
> > > > > >   }
> > > > > >
> > > > > > return 0;
> > > > > > }
> > > > > >
> > > > > > void cleanup_module()
> > > > > > {
> > > > > >   int ret;
> > > > > >
> > > > > >   ret = unregister_chrdev(MAJOR_NUM, DEVICE_NAME);
> > > > > >
> > > > > >   if (ret < 0)
> > > > > >     printk(KERN_ALERT "Error: unregister_chrdev: %d\n", ret);
> > > > > > }
> > > > > >
> > > > > > ===================== CUT HERE ====================
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > > On 6/14/07, Mathieu Larose < [email protected]> wrote:
> > > > > > > Hi Atul,
> > > > > > >
> > > > > > >  I know it won't be very useful, but I just want to let you know that
> > > > > I'm in
> > > > > > > the same situation as you. I've tried a lot of "solution", but none of
> > > > > these
> > > > > > > worked. I even contacted Toshiba and Phoenix to get information about
> > > > > this
> > > > > > > BIOS, and they refused to tell me anything. Maybe you should try to
> > > > > contact
> > > > > > > Toshiba you too or start to reverse engineering it on Windows :)
> > > > > > >
> > > > > > >  I know that Mathieu on omnibook has received a lot of request to
> > > > > support
> > > > > > > your model, but without information from Toshiba, he won't do anything.
> > > > > > >
> > > > > > >
> > > > > > >  Mathieu
> > > > > > >
> > > > > > >
> > > > > > > 2007/6/13, atul jain <[email protected]>:
> > > > > > > >
> > > > > > > > Hello  all ,
> > > > > > > >
> > > > > > > >                      i  bought  toshiba A100-139
> > > > > last week   and
> > > > > > > installed debian etch on it .I found that  the fnfx is not functioning
> > > > > > > >                      so , i am unable to  set  lcd brigthness  and
> > > > > also
> > > > > > > since the bios vendor is pheonix , so  i cannot use
> > > > > > > >                      toshiba utils.
> > > > > > > >
> > > > > > > >
> > > > > > > >                     If anyone   any idea reagarding  this  , please
> > > > > let me
> > > > > > > know.
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > > waiting for reply
> > > > > > > >
> > > > > > > >
> > > > > > > > Thanks  in advance
> > > > > > > > --
> > > > > > > >
> > > > > > > > Cheers :)
> > > > > > > > Atul
> > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > > >
> > > > > --
> > > > >
> > > > > Regards
> > > > > Atul
> > > >
> > >
> > >
> > >
> >
>
>
>