| |
| Driver for Asus OLED display present in some Asus laptops. |
| |
| The code of this driver is based on 'asusoled' program taken from |
| https://launchpad.net/asusoled/. I just wanted to have a simple |
| kernel driver for controlling this device, but I didn't know how |
| to do that. Now I know ;) Also, that program can not be used |
| with usbhid loaded, which means no USB mouse/keyboard while |
| controlling OLED display :( |
| |
| It has been tested on Asus G1 and didn't cause any problems, |
| but I don't guarantee that it won't do anything wrong :) |
| |
| It can (and probably does) have errors. It is usable |
| in my case, and I hope others will find it useful too! |
| |
| ******* |
| |
| Building the module |
| |
| To build the module you need kernel 2.6 include files and some C compiler. |
| |
| Just run: |
| make |
| make install (as a root) |
| |
| It will build (hopefully) the module and install it in |
| /lib/modules/'uname -r'/extra/asus_oled.ko. |
| |
| To load it just use: |
| modprobe asus_oled |
| |
| You can check if it has detected your OLED display by looking into dmesg output. |
| There should be something like this: |
| asus-oled 2-7:1.0: Attached Asus OLED device |
| |
| If it doesn't find your display, you can try removing usbhid module. |
| If you add asus_oled into the list of modules loaded during system boot |
| before usbhid, it will work even when usbhid is present. |
| |
| If it still doesn't detect your hardware, check lsusb output. |
| There should be similar line: |
| Bus 002 Device 005: ID 0b05:1726 ASUSTek Computer, Inc. |
| |
| If you don't see any lines with '0b05:1726' it means that you have different |
| type of hardware that is not detected (it may or may not work, but the driver |
| knows only '0b05:1726' device). |
| |
| ******* |
| |
| Configuration |
| |
| There is only one option: start_off. |
| You can use it by: 'modprobe asus_oled start_off=1', or by adding this |
| line to /etc/modprobe.conf: |
| options asus_oled start_off=1 |
| |
| With this option provided, asus_oled driver will switch off the display |
| when it is detected and attached. It is nice feature to just switch off the 'ASUS' |
| logo. If you don't use the display, it is probably the good idea to switch it off, |
| to protect OLEDs from "wearing off". |
| |
| ******* |
| |
| Usage |
| |
| This module can be controlled with two special files: |
| /sys/class/asus_oled/oled_N/enabled |
| /sys/class/asus_oled/oled_N/picture |
| |
| (N is the device number, the first, and probably the only, has number 1, |
| so it is /sys/class/asus_oled/oled_1/enabled |
| and /sys/class/asus_oled/oled_1/picture) |
| |
| 'enabled' files is for reading and writing, 'picture' is writeable only. |
| |
| You can write 0 or 1 to 'enabled' file, which will switch |
| on and off the display. Reading from this file will tell you the last |
| status set, either 0 or 1. By default it is 1, so if the device was set to 'off', |
| and the computer was rebooted without power-off, this file will contain wrong |
| value - because the device is off, but hasn't been disabled this time and is |
| assumed to be on... |
| |
| To 'picture' file you write pictures to be displayed by the OLED device. |
| The format of the file: |
| <M:WxH> |
| 00001110010111000 |
| 00010101010101010 |
| .... |
| |
| First line is a configuration parameter. Meaning of fields in <M:WxH>: |
| M - picture mode. It can be either 's' for static pictures, |
| 'r' for rolling pictures, and 'f' for flashing pictures. |
| W - width of the picture. May be between 1 and 1792 |
| H - height of the picture. May be between 1 and 32 |
| |
| For example <s:128x32> means static picture, 128 pixels long and 32 pixels high. |
| |
| The physical size of the display is 128x32 pixels. Static and flashing pictures |
| can't be larger than that (actually they can, but only part of them will be displayed ;) ) |
| |
| If the picture is smaller than 128x32 it will be centered. Rolling pictures wider than |
| 128 pixels will be centered too, unless their width = n*128. Vertically they will be |
| centered just like static pictures, if their height is smaller than 32. |
| |
| Flashing pictures will be centered horizontally if their width < 128, but they were |
| centered vertically in a different way. If their height < 16, they will be centered |
| in the upper half of the display (rows 0-15). This is because only the first half |
| of flashing pictures is used for flashing. When the picture with heigh = 32 is |
| displayed in flashing mode, its upper 16 rows will be flashing in the upper half |
| of the display, and the lower half will be empty. After few seconds upper part will |
| stop flashing (but that part of the picture will remain there), and the lower |
| half of the display will start displayin the lower half of the picture |
| in rolling mode, unless it is empty, or the picture was small enough to fit in |
| upper part. It is not mine idea, this is just the way Asus' display work ;) |
| So if you need just flashing, use at most 128x16 picture. If you need flashing and |
| rolling, use whole size of the display. |
| |
| Lines following the first, configuration, line are picture data. Each '1' means |
| that the pixel is lit, and '0' means that it is not. You can also use '#' as ON, |
| and ' ' (space) as OFF. Empty lines and all other characters are ignored. |
| |
| It is possible to write everything in one line <M:WxH>01010101010101010..., |
| and W*H characters will be used. If there is not enough characters, nothing will be |
| displayed. However, the 'line mode' is easier to read (and write), and it also |
| lets to omit parts of data. Whenever End-Of-Line character is found, but |
| the line is not W characters long, it is assumed that all missing characters |
| are equal to the last character in the line. |
| |
| Following line represents '0', '1' and a lots of '0's, dependng on the width of the picture |
| provided in configuration data: |
| 010 |
| |
| So if you need empty line, it is sufficient to write line with only one '0' in it. |
| The same works with '1' (or ' ' and '#'). |
| |
| If there are too many data in the file, they will be ignored. If you are not sure |
| how many characters you are missing, you can add few lines with one zero in each of them. |
| |
| There are some example pictures in .txt format, that can be used as follows: |
| cat foo.txt > /sys/class/asus_oled/oled_1/picture |
| |
| If the display is switched off you also need to run: |
| echo 1 > /sys/class/asus_oled/oled_1/enabled |
| To switch it off, just use: |
| echo 0 > /sys/class/asus_oled/oled_1/enabled |
| |
| |
| ******* |
| |
| For any additional info please have a look at http://lapsus.berlios.de/asus_oled.html |
| |
| |
| |
| Jakub Schmidtke (sjakub@gmail.com) |
| |