linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [Test_Module] Changing brightness in Toshiba notebooks with Phoenix Bios
@ 2007-06-15  0:17 Renato S. Yamane
  2007-07-16 17:28 ` Rolf Eike Beer
  0 siblings, 1 reply; 2+ messages in thread
From: Renato S. Yamane @ 2007-06-15  0:17 UTC (permalink / raw)
  To: linux-kernel

Forwarding from: Toshiba_Linux-Users (tlinux-users@linux.toshiba-dme.co.jp)

=============
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. <jaimeff@gmail.com>
* 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 ====================

Best Regards,
Renato S. Yamane

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [Test_Module] Changing brightness in Toshiba notebooks with Phoenix  Bios
  2007-06-15  0:17 [Test_Module] Changing brightness in Toshiba notebooks with Phoenix Bios Renato S. Yamane
@ 2007-07-16 17:28 ` Rolf Eike Beer
  0 siblings, 0 replies; 2+ messages in thread
From: Rolf Eike Beer @ 2007-07-16 17:28 UTC (permalink / raw)
  To: Renato S. Yamane; +Cc: linux-kernel

[-- Attachment #1: Type: text/plain, Size: 394 bytes --]

Am Freitag, 15. Juni 2007 schrieb Renato S. Yamane:
> Forwarding from: Toshiba_Linux-Users (tlinux-users@linux.toshiba-dme.co.jp)
>
> =============
> I only tested on my Toshiba Satellite Pro A100 and it works.

You may want to have a look on the "omnibook" project on 
http://omnibook.sf.net. Although it's named omnibook it added support for 
many laptop goodies on my A178.

Eike

[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2007-07-16 17:28 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-06-15  0:17 [Test_Module] Changing brightness in Toshiba notebooks with Phoenix Bios Renato S. Yamane
2007-07-16 17:28 ` Rolf Eike Beer

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).