Initial commit (release 0.3.25)
This commit is contained in:
commit
59c5f9e107
340
COPYING
Normal file
340
COPYING
Normal file
@ -0,0 +1,340 @@
|
|||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
Version 2, June 1991
|
||||||
|
|
||||||
|
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||||
|
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
|
Preamble
|
||||||
|
|
||||||
|
The licenses for most software are designed to take away your
|
||||||
|
freedom to share and change it. By contrast, the GNU General Public
|
||||||
|
License is intended to guarantee your freedom to share and change free
|
||||||
|
software--to make sure the software is free for all its users. This
|
||||||
|
General Public License applies to most of the Free Software
|
||||||
|
Foundation's software and to any other program whose authors commit to
|
||||||
|
using it. (Some other Free Software Foundation software is covered by
|
||||||
|
the GNU Library General Public License instead.) You can apply it to
|
||||||
|
your programs, too.
|
||||||
|
|
||||||
|
When we speak of free software, we are referring to freedom, not
|
||||||
|
price. Our General Public Licenses are designed to make sure that you
|
||||||
|
have the freedom to distribute copies of free software (and charge for
|
||||||
|
this service if you wish), that you receive source code or can get it
|
||||||
|
if you want it, that you can change the software or use pieces of it
|
||||||
|
in new free programs; and that you know you can do these things.
|
||||||
|
|
||||||
|
To protect your rights, we need to make restrictions that forbid
|
||||||
|
anyone to deny you these rights or to ask you to surrender the rights.
|
||||||
|
These restrictions translate to certain responsibilities for you if you
|
||||||
|
distribute copies of the software, or if you modify it.
|
||||||
|
|
||||||
|
For example, if you distribute copies of such a program, whether
|
||||||
|
gratis or for a fee, you must give the recipients all the rights that
|
||||||
|
you have. You must make sure that they, too, receive or can get the
|
||||||
|
source code. And you must show them these terms so they know their
|
||||||
|
rights.
|
||||||
|
|
||||||
|
We protect your rights with two steps: (1) copyright the software, and
|
||||||
|
(2) offer you this license which gives you legal permission to copy,
|
||||||
|
distribute and/or modify the software.
|
||||||
|
|
||||||
|
Also, for each author's protection and ours, we want to make certain
|
||||||
|
that everyone understands that there is no warranty for this free
|
||||||
|
software. If the software is modified by someone else and passed on, we
|
||||||
|
want its recipients to know that what they have is not the original, so
|
||||||
|
that any problems introduced by others will not reflect on the original
|
||||||
|
authors' reputations.
|
||||||
|
|
||||||
|
Finally, any free program is threatened constantly by software
|
||||||
|
patents. We wish to avoid the danger that redistributors of a free
|
||||||
|
program will individually obtain patent licenses, in effect making the
|
||||||
|
program proprietary. To prevent this, we have made it clear that any
|
||||||
|
patent must be licensed for everyone's free use or not licensed at all.
|
||||||
|
|
||||||
|
The precise terms and conditions for copying, distribution and
|
||||||
|
modification follow.
|
||||||
|
|
||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||||
|
|
||||||
|
0. This License applies to any program or other work which contains
|
||||||
|
a notice placed by the copyright holder saying it may be distributed
|
||||||
|
under the terms of this General Public License. The "Program", below,
|
||||||
|
refers to any such program or work, and a "work based on the Program"
|
||||||
|
means either the Program or any derivative work under copyright law:
|
||||||
|
that is to say, a work containing the Program or a portion of it,
|
||||||
|
either verbatim or with modifications and/or translated into another
|
||||||
|
language. (Hereinafter, translation is included without limitation in
|
||||||
|
the term "modification".) Each licensee is addressed as "you".
|
||||||
|
|
||||||
|
Activities other than copying, distribution and modification are not
|
||||||
|
covered by this License; they are outside its scope. The act of
|
||||||
|
running the Program is not restricted, and the output from the Program
|
||||||
|
is covered only if its contents constitute a work based on the
|
||||||
|
Program (independent of having been made by running the Program).
|
||||||
|
Whether that is true depends on what the Program does.
|
||||||
|
|
||||||
|
1. You may copy and distribute verbatim copies of the Program's
|
||||||
|
source code as you receive it, in any medium, provided that you
|
||||||
|
conspicuously and appropriately publish on each copy an appropriate
|
||||||
|
copyright notice and disclaimer of warranty; keep intact all the
|
||||||
|
notices that refer to this License and to the absence of any warranty;
|
||||||
|
and give any other recipients of the Program a copy of this License
|
||||||
|
along with the Program.
|
||||||
|
|
||||||
|
You may charge a fee for the physical act of transferring a copy, and
|
||||||
|
you may at your option offer warranty protection in exchange for a fee.
|
||||||
|
|
||||||
|
2. You may modify your copy or copies of the Program or any portion
|
||||||
|
of it, thus forming a work based on the Program, and copy and
|
||||||
|
distribute such modifications or work under the terms of Section 1
|
||||||
|
above, provided that you also meet all of these conditions:
|
||||||
|
|
||||||
|
a) You must cause the modified files to carry prominent notices
|
||||||
|
stating that you changed the files and the date of any change.
|
||||||
|
|
||||||
|
b) You must cause any work that you distribute or publish, that in
|
||||||
|
whole or in part contains or is derived from the Program or any
|
||||||
|
part thereof, to be licensed as a whole at no charge to all third
|
||||||
|
parties under the terms of this License.
|
||||||
|
|
||||||
|
c) If the modified program normally reads commands interactively
|
||||||
|
when run, you must cause it, when started running for such
|
||||||
|
interactive use in the most ordinary way, to print or display an
|
||||||
|
announcement including an appropriate copyright notice and a
|
||||||
|
notice that there is no warranty (or else, saying that you provide
|
||||||
|
a warranty) and that users may redistribute the program under
|
||||||
|
these conditions, and telling the user how to view a copy of this
|
||||||
|
License. (Exception: if the Program itself is interactive but
|
||||||
|
does not normally print such an announcement, your work based on
|
||||||
|
the Program is not required to print an announcement.)
|
||||||
|
|
||||||
|
These requirements apply to the modified work as a whole. If
|
||||||
|
identifiable sections of that work are not derived from the Program,
|
||||||
|
and can be reasonably considered independent and separate works in
|
||||||
|
themselves, then this License, and its terms, do not apply to those
|
||||||
|
sections when you distribute them as separate works. But when you
|
||||||
|
distribute the same sections as part of a whole which is a work based
|
||||||
|
on the Program, the distribution of the whole must be on the terms of
|
||||||
|
this License, whose permissions for other licensees extend to the
|
||||||
|
entire whole, and thus to each and every part regardless of who wrote it.
|
||||||
|
|
||||||
|
Thus, it is not the intent of this section to claim rights or contest
|
||||||
|
your rights to work written entirely by you; rather, the intent is to
|
||||||
|
exercise the right to control the distribution of derivative or
|
||||||
|
collective works based on the Program.
|
||||||
|
|
||||||
|
In addition, mere aggregation of another work not based on the Program
|
||||||
|
with the Program (or with a work based on the Program) on a volume of
|
||||||
|
a storage or distribution medium does not bring the other work under
|
||||||
|
the scope of this License.
|
||||||
|
|
||||||
|
3. You may copy and distribute the Program (or a work based on it,
|
||||||
|
under Section 2) in object code or executable form under the terms of
|
||||||
|
Sections 1 and 2 above provided that you also do one of the following:
|
||||||
|
|
||||||
|
a) Accompany it with the complete corresponding machine-readable
|
||||||
|
source code, which must be distributed under the terms of Sections
|
||||||
|
1 and 2 above on a medium customarily used for software interchange; or,
|
||||||
|
|
||||||
|
b) Accompany it with a written offer, valid for at least three
|
||||||
|
years, to give any third party, for a charge no more than your
|
||||||
|
cost of physically performing source distribution, a complete
|
||||||
|
machine-readable copy of the corresponding source code, to be
|
||||||
|
distributed under the terms of Sections 1 and 2 above on a medium
|
||||||
|
customarily used for software interchange; or,
|
||||||
|
|
||||||
|
c) Accompany it with the information you received as to the offer
|
||||||
|
to distribute corresponding source code. (This alternative is
|
||||||
|
allowed only for noncommercial distribution and only if you
|
||||||
|
received the program in object code or executable form with such
|
||||||
|
an offer, in accord with Subsection b above.)
|
||||||
|
|
||||||
|
The source code for a work means the preferred form of the work for
|
||||||
|
making modifications to it. For an executable work, complete source
|
||||||
|
code means all the source code for all modules it contains, plus any
|
||||||
|
associated interface definition files, plus the scripts used to
|
||||||
|
control compilation and installation of the executable. However, as a
|
||||||
|
special exception, the source code distributed need not include
|
||||||
|
anything that is normally distributed (in either source or binary
|
||||||
|
form) with the major components (compiler, kernel, and so on) of the
|
||||||
|
operating system on which the executable runs, unless that component
|
||||||
|
itself accompanies the executable.
|
||||||
|
|
||||||
|
If distribution of executable or object code is made by offering
|
||||||
|
access to copy from a designated place, then offering equivalent
|
||||||
|
access to copy the source code from the same place counts as
|
||||||
|
distribution of the source code, even though third parties are not
|
||||||
|
compelled to copy the source along with the object code.
|
||||||
|
|
||||||
|
4. You may not copy, modify, sublicense, or distribute the Program
|
||||||
|
except as expressly provided under this License. Any attempt
|
||||||
|
otherwise to copy, modify, sublicense or distribute the Program is
|
||||||
|
void, and will automatically terminate your rights under this License.
|
||||||
|
However, parties who have received copies, or rights, from you under
|
||||||
|
this License will not have their licenses terminated so long as such
|
||||||
|
parties remain in full compliance.
|
||||||
|
|
||||||
|
5. You are not required to accept this License, since you have not
|
||||||
|
signed it. However, nothing else grants you permission to modify or
|
||||||
|
distribute the Program or its derivative works. These actions are
|
||||||
|
prohibited by law if you do not accept this License. Therefore, by
|
||||||
|
modifying or distributing the Program (or any work based on the
|
||||||
|
Program), you indicate your acceptance of this License to do so, and
|
||||||
|
all its terms and conditions for copying, distributing or modifying
|
||||||
|
the Program or works based on it.
|
||||||
|
|
||||||
|
6. Each time you redistribute the Program (or any work based on the
|
||||||
|
Program), the recipient automatically receives a license from the
|
||||||
|
original licensor to copy, distribute or modify the Program subject to
|
||||||
|
these terms and conditions. You may not impose any further
|
||||||
|
restrictions on the recipients' exercise of the rights granted herein.
|
||||||
|
You are not responsible for enforcing compliance by third parties to
|
||||||
|
this License.
|
||||||
|
|
||||||
|
7. If, as a consequence of a court judgment or allegation of patent
|
||||||
|
infringement or for any other reason (not limited to patent issues),
|
||||||
|
conditions are imposed on you (whether by court order, agreement or
|
||||||
|
otherwise) that contradict the conditions of this License, they do not
|
||||||
|
excuse you from the conditions of this License. If you cannot
|
||||||
|
distribute so as to satisfy simultaneously your obligations under this
|
||||||
|
License and any other pertinent obligations, then as a consequence you
|
||||||
|
may not distribute the Program at all. For example, if a patent
|
||||||
|
license would not permit royalty-free redistribution of the Program by
|
||||||
|
all those who receive copies directly or indirectly through you, then
|
||||||
|
the only way you could satisfy both it and this License would be to
|
||||||
|
refrain entirely from distribution of the Program.
|
||||||
|
|
||||||
|
If any portion of this section is held invalid or unenforceable under
|
||||||
|
any particular circumstance, the balance of the section is intended to
|
||||||
|
apply and the section as a whole is intended to apply in other
|
||||||
|
circumstances.
|
||||||
|
|
||||||
|
It is not the purpose of this section to induce you to infringe any
|
||||||
|
patents or other property right claims or to contest validity of any
|
||||||
|
such claims; this section has the sole purpose of protecting the
|
||||||
|
integrity of the free software distribution system, which is
|
||||||
|
implemented by public license practices. Many people have made
|
||||||
|
generous contributions to the wide range of software distributed
|
||||||
|
through that system in reliance on consistent application of that
|
||||||
|
system; it is up to the author/donor to decide if he or she is willing
|
||||||
|
to distribute software through any other system and a licensee cannot
|
||||||
|
impose that choice.
|
||||||
|
|
||||||
|
This section is intended to make thoroughly clear what is believed to
|
||||||
|
be a consequence of the rest of this License.
|
||||||
|
|
||||||
|
8. If the distribution and/or use of the Program is restricted in
|
||||||
|
certain countries either by patents or by copyrighted interfaces, the
|
||||||
|
original copyright holder who places the Program under this License
|
||||||
|
may add an explicit geographical distribution limitation excluding
|
||||||
|
those countries, so that distribution is permitted only in or among
|
||||||
|
countries not thus excluded. In such case, this License incorporates
|
||||||
|
the limitation as if written in the body of this License.
|
||||||
|
|
||||||
|
9. The Free Software Foundation may publish revised and/or new versions
|
||||||
|
of the General Public License from time to time. Such new versions will
|
||||||
|
be similar in spirit to the present version, but may differ in detail to
|
||||||
|
address new problems or concerns.
|
||||||
|
|
||||||
|
Each version is given a distinguishing version number. If the Program
|
||||||
|
specifies a version number of this License which applies to it and "any
|
||||||
|
later version", you have the option of following the terms and conditions
|
||||||
|
either of that version or of any later version published by the Free
|
||||||
|
Software Foundation. If the Program does not specify a version number of
|
||||||
|
this License, you may choose any version ever published by the Free Software
|
||||||
|
Foundation.
|
||||||
|
|
||||||
|
10. If you wish to incorporate parts of the Program into other free
|
||||||
|
programs whose distribution conditions are different, write to the author
|
||||||
|
to ask for permission. For software which is copyrighted by the Free
|
||||||
|
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||||
|
make exceptions for this. Our decision will be guided by the two goals
|
||||||
|
of preserving the free status of all derivatives of our free software and
|
||||||
|
of promoting the sharing and reuse of software generally.
|
||||||
|
|
||||||
|
NO WARRANTY
|
||||||
|
|
||||||
|
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||||
|
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||||
|
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||||
|
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||||
|
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||||
|
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||||
|
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||||
|
REPAIR OR CORRECTION.
|
||||||
|
|
||||||
|
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||||
|
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||||
|
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||||
|
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||||
|
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||||
|
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||||
|
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||||
|
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||||
|
POSSIBILITY OF SUCH DAMAGES.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
How to Apply These Terms to Your New Programs
|
||||||
|
|
||||||
|
If you develop a new program, and you want it to be of the greatest
|
||||||
|
possible use to the public, the best way to achieve this is to make it
|
||||||
|
free software which everyone can redistribute and change under these terms.
|
||||||
|
|
||||||
|
To do so, attach the following notices to the program. It is safest
|
||||||
|
to attach them to the start of each source file to most effectively
|
||||||
|
convey the exclusion of warranty; and each file should have at least
|
||||||
|
the "copyright" line and a pointer to where the full notice is found.
|
||||||
|
|
||||||
|
<one line to give the program's name and a brief idea of what it does.>
|
||||||
|
Copyright (C) <year> <name of author>
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
|
||||||
|
Also add information on how to contact you by electronic and paper mail.
|
||||||
|
|
||||||
|
If the program is interactive, make it output a short notice like this
|
||||||
|
when it starts in an interactive mode:
|
||||||
|
|
||||||
|
Gnomovision version 69, Copyright (C) year name of author
|
||||||
|
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||||
|
This is free software, and you are welcome to redistribute it
|
||||||
|
under certain conditions; type `show c' for details.
|
||||||
|
|
||||||
|
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||||
|
parts of the General Public License. Of course, the commands you use may
|
||||||
|
be called something other than `show w' and `show c'; they could even be
|
||||||
|
mouse-clicks or menu items--whatever suits your program.
|
||||||
|
|
||||||
|
You should also get your employer (if you work as a programmer) or your
|
||||||
|
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||||
|
necessary. Here is a sample; alter the names:
|
||||||
|
|
||||||
|
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||||
|
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||||
|
|
||||||
|
<signature of Ty Coon>, 1 April 1989
|
||||||
|
Ty Coon, President of Vice
|
||||||
|
|
||||||
|
This General Public License does not permit incorporating your program into
|
||||||
|
proprietary programs. If your program is a subroutine library, you may
|
||||||
|
consider it more useful to permit linking proprietary applications with the
|
||||||
|
library. If this is what you want to do, use the GNU Library General
|
||||||
|
Public License instead of this License.
|
115
Changelog
Normal file
115
Changelog
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
2012-01-21 0.3.25 Silvan Calarco <silvan.calarco@mambasoft.it>
|
||||||
|
- initscript:
|
||||||
|
- load applesmc module
|
||||||
|
- macbook-lightd:
|
||||||
|
- check for sensor file existence or exit
|
||||||
|
|
||||||
|
2011-09-01 0.3.24 Silvan Calarco <silvan.calarco@mambasoft.it>
|
||||||
|
- initscript:
|
||||||
|
- configure it-macbook in /etc/vconsole.conf when Apple computer is detected;
|
||||||
|
- remove it-macbook KEYMAP configuration for non Apple computers
|
||||||
|
|
||||||
|
2009-08-03 0.3.23 Silvan Calarco <silvan.calarco@mambasoft.it>
|
||||||
|
- macbook-lightd: small fix to algorithm
|
||||||
|
|
||||||
|
2009-07-25 0.3.22 Silvan Calarco <silvan.calarco@mambasoft.it>
|
||||||
|
- modprobe.conf.d/macbook: install as /etc/modprobe.d/macbook.conf
|
||||||
|
|
||||||
|
2009-06-29 0.3.21 Silvan Calarco <silvan.calarco@mambasoft.it>
|
||||||
|
- initscript: redirect macbook-light output to fix multithreaded init lockup
|
||||||
|
|
||||||
|
2009-06-23 0.3.20 Silvan Calarco <silvan.calarco@mambasoft.it>:
|
||||||
|
- initscript: disabled LCD backlight setting (managed by HAL/KDE)
|
||||||
|
- macbook-lightd: modified and re-enabled in initscript
|
||||||
|
|
||||||
|
2009-02-24 0.3.19 Silvan Calarco <silvan.calarco@mambasoft.it>:
|
||||||
|
- modprobe.conf.d/macbook: st fnmode for hid_apple not for hid (kernel 2.6.28)
|
||||||
|
|
||||||
|
2008-04-14 0.3.18 Silvan Calarco <silvan.calarco@mambasoft.it>:
|
||||||
|
- isight-firmware-loaded: removed as it is now provided by external package
|
||||||
|
|
||||||
|
2008-03-09 0.3.17 Silvan Calarco <silvan.calarco@mambasoft.it>:
|
||||||
|
- initscript: fix check for SYSTEM_MANUFACTURER against new postplug
|
||||||
|
|
||||||
|
2008-02-01 0.3.16 Silvan Calarco <silvan.calarco@mambasoft.it>:
|
||||||
|
- macbook-set-input: don't execute xbindkeys and xmodmap as they are
|
||||||
|
now handled by xbindkeys-start
|
||||||
|
- initscript: use /etc/sysconfig/machine to detect manufacturer
|
||||||
|
|
||||||
|
2008-01-08 0.3.15 Silvan Calarco <silvan.calarco@mambasoft.it>:
|
||||||
|
- Makefile: build statically against libpci
|
||||||
|
|
||||||
|
2007-11-10 0.3.14 Silvan Calarco <silvan.calarco@mambasoft.it>:
|
||||||
|
- initscript: remove mapping of <SUPER> button to central mouse key
|
||||||
|
|
||||||
|
2007-09-12 0.3.13 Silvan Calarco <silvan.calarco@mambasoft.it>:
|
||||||
|
- initscripts: replace loading of module speedstep-centrino (obsolete)
|
||||||
|
with acpi_cpufreqd
|
||||||
|
|
||||||
|
2007-09-10 0.3.12 Silvan Calarco <silvan.calarco@mambasoft.it>:
|
||||||
|
- swapped right-Apple and numpad enter association (respectively they
|
||||||
|
are now ISO_Level3_Shift and right mouse key
|
||||||
|
|
||||||
|
2007-08-31 0.3.11 Silvan Calarco <silvan.calarco@mambasoft.it>:
|
||||||
|
- initscript: set mause button emulation to apple keys
|
||||||
|
- modprobe: enable pb_fnmode=2 option of hid module
|
||||||
|
- macbook_set_input: xprofile script moved to /usr/bin/macbook_set_input
|
||||||
|
and called by kde autostart desktop file
|
||||||
|
|
||||||
|
2007-08-15 0.3.10 Silvan Calarco <silvan.calarco@mambasoft.it>:
|
||||||
|
- initscript: don't install suid root
|
||||||
|
|
||||||
|
2007-08-06 0.3.9 Silvan Calarco <silvan.calarco@mambasoft.it>:
|
||||||
|
- initscript: load specific modules here instead of /etc/modules.d/macbook
|
||||||
|
- /etc/modules.d/macbook: remove
|
||||||
|
- initscript: change chkconfig priority from 44 to 42 (before cpufreqd)
|
||||||
|
|
||||||
|
2007-08-03 0.3.8 Silvan Calarco <silvan.calarco@mambasoft.it>:
|
||||||
|
- initscript: added support for macmini configuration in lirc
|
||||||
|
- modprobe: removed loading of appletouch (now automatic) and appleir
|
||||||
|
(obsolete)
|
||||||
|
- udev: removed macbook file installation
|
||||||
|
- scripts: added check for Apple chassis so this package can be installed
|
||||||
|
harmlessy also on non macbook computers
|
||||||
|
|
||||||
|
2007-03-08 0.3.7 Silvan Calarco <silvan.calarco@mambasoft.it>:
|
||||||
|
- modprobe macbook: fix appleir and appletouch loading before usbhid
|
||||||
|
|
||||||
|
2007-03-06 0.3.6 Silvan Calarco <silvan.calarco@mambasoft.it>:
|
||||||
|
- use xprofile.d instead of autostart desktop file
|
||||||
|
|
||||||
|
2006-10-20 0.3.5 Silvan Calarco <silvan.calarco@mambasoft.it>:
|
||||||
|
- fix xmodmap file to match new keyboard layout fixes in kernel 2.6.18.3
|
||||||
|
|
||||||
|
2006-10-12 0.3.4 Silvan Calarco <silvan.calarco@mambasoft.it>:
|
||||||
|
- fix udev rule to match KERNEL event device
|
||||||
|
- appleir: load before usbhid
|
||||||
|
|
||||||
|
2006-10-10 0.3.3 Silvan Calarco <silvan.calarco@mambasoft.it>:
|
||||||
|
- add udev rule for appleir
|
||||||
|
|
||||||
|
2006-10-08 0.3.2 Silvan Calarco <silvan.calarco@mambasoft.it>:
|
||||||
|
- add lircd support
|
||||||
|
- load uvcvideo on boot
|
||||||
|
|
||||||
|
2006-10-02 0.3 Silvan Calarco <silvan.calarco@mambasoft.it>:
|
||||||
|
- add more complete kbd support (Function keys mapping and commands)
|
||||||
|
- set keyboard configuration on X session startup
|
||||||
|
|
||||||
|
2006-10-02 0.2.2 Silvan Calarco <silvan.calarco@mambasoft.it>:
|
||||||
|
- appletouch: load before usbhid (needs usbhid compiled as a module)
|
||||||
|
|
||||||
|
2006-07-24 0.2.1 Silvan Calarco <silvan.calarco@mambasoft.it>:
|
||||||
|
- add modprobe.conf.d file for automatic firmware loading
|
||||||
|
|
||||||
|
2006-07-24 0.2 Silvan Calarco <silvan.calarco@mambasoft.it>:
|
||||||
|
- added isight firmware loader tool
|
||||||
|
- applesmc: resync from original macbook-tools 0.1.1
|
||||||
|
- macbook-lightd: added very simple daemon for keyboard backlight control
|
||||||
|
|
||||||
|
2006-07-13 0.1a Silvan Calarco <silvan.calarco@mambasoft.it>:
|
||||||
|
- backlight tool updated
|
||||||
|
- added applesmc tool for keyboard backlight control
|
||||||
|
|
||||||
|
2006-07-09 0.1:
|
||||||
|
- first official release with backlight tool by Nicolas Boichat <nicolas@boichat.ch>
|
48
Makefile
Normal file
48
Makefile
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
include VERSION
|
||||||
|
|
||||||
|
BINDIR:=/usr/bin
|
||||||
|
SBIN:=/sbin
|
||||||
|
SBINDIR:=/usr/sbin
|
||||||
|
SYSCONFDIR:=/etc
|
||||||
|
DESTDIR:=
|
||||||
|
DATADIR:=/usr/share
|
||||||
|
INITDIR:=/etc/rc.d/init.d
|
||||||
|
RPMSOURCEDIR:=/usr/src/RPM/SOURCES
|
||||||
|
KDEAUTOSTART:=/opt/kde3/share/autostart/
|
||||||
|
|
||||||
|
all: applesmc backlight
|
||||||
|
|
||||||
|
applesmc: applesmc.c Makefile
|
||||||
|
gcc -DVERSION=\"$(VERSION)\" -Wall applesmc.c -o applesmc
|
||||||
|
backlight: backlight.c Makefile
|
||||||
|
gcc -DVERSION=\"$(VERSION)\" -Wall backlight.c -o backlight -lpci -static
|
||||||
|
|
||||||
|
install: backlight applesmc
|
||||||
|
install -d $(DESTDIR)$(BINDIR) $(DESTDIR)$(INITDIR) \
|
||||||
|
$(DESTDIR)$(SBIN) $(DESTDIR)$(SBINDIR) $(DESTDIR)$(SYSCONFDIR)/modprobe.d \
|
||||||
|
$(DESTDIR)$(SBIN) $(DESTDIR)$(SBINDIR) \
|
||||||
|
$(DESTDIR)$(SYSCONFDIR)/sysconfig $(DESTDIR)$(KDEAUTOSTART)
|
||||||
|
install -s -m 4755 applesmc $(DESTDIR)$(BINDIR)
|
||||||
|
install -s -m 4755 backlight $(DESTDIR)$(BINDIR)
|
||||||
|
install -m 0755 macbook-set-input $(DESTDIR)$(BINDIR)/
|
||||||
|
install -m 0755 macbook-tools-init $(DESTDIR)$(INITDIR)/macbook-tools
|
||||||
|
install -m 644 macbook-tools-sysconfig $(DESTDIR)$(SYSCONFDIR)/sysconfig/macbook-tools
|
||||||
|
install -m 0755 macbook-lightd $(DESTDIR)$(SBINDIR)/
|
||||||
|
install -m 0644 macbook-modprobe $(DESTDIR)$(SYSCONFDIR)/modprobe.d/macbook.conf
|
||||||
|
install -m 0644 macbook_set_input.desktop $(DESTDIR)$(KDEAUTOSTART)/macbook_set_input.desktop
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f backlight
|
||||||
|
rm -f applesmc
|
||||||
|
rm -f *~
|
||||||
|
|
||||||
|
dist: clean
|
||||||
|
rm -rf macbook-tools-$(VERSION)
|
||||||
|
rm -rf macbook-tools-$(VERSION).tar.bz2
|
||||||
|
mkdir macbook-tools-$(VERSION)
|
||||||
|
find . -maxdepth 1 -exec cp {} macbook-tools-$(VERSION) \;
|
||||||
|
tar cvfj macbook-tools-$(VERSION).tar.bz2 macbook-tools-$(VERSION)
|
||||||
|
rm -rf macbook-tools-$(VERSION)
|
||||||
|
|
||||||
|
dist-rpm: dist
|
||||||
|
cp macbook-tools-$(VERSION).tar.bz2 $(RPMSOURCEDIR)
|
286
applesmc.c
Normal file
286
applesmc.c
Normal file
@ -0,0 +1,286 @@
|
|||||||
|
/*
|
||||||
|
* Apple Macbook Pro SMC control
|
||||||
|
*
|
||||||
|
* Copyright (C) 2006 Nicolas Boichat <nicolas@boichat.ch>
|
||||||
|
*
|
||||||
|
* 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., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <sys/io.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <sys/time.h>
|
||||||
|
|
||||||
|
#define LIGHT_SENSOR_LEFT_KEY "ALV0" //0x414c5630, r-o length 6
|
||||||
|
#define LIGHT_SENSOR_RIGHT_KEY "ALV1" //0x414c5631, r-o length 6
|
||||||
|
#define BACKLIGHT_KEY "LKSB" //0x4c4b5342, w-o
|
||||||
|
#define CLAMSHELL_KEY "MSLD" //0x4d534c44, r-o length 1 (unused)
|
||||||
|
#define MOTION_SENSOR_X_KEY "MO_X" //0x4d4f5f58, r-o length 2
|
||||||
|
#define MOTION_SENSOR_Y_KEY "MO_Y" //0x4d4f5f58, r-o length 2
|
||||||
|
#define MOTION_SENSOR_Z_KEY "MO_Z" //0x4d4f5f58, r-o length 2
|
||||||
|
#define MOTION_SENSOR_KEY "MOCN" //0x4d4f434e, r/w length 2
|
||||||
|
|
||||||
|
|
||||||
|
static int debug = 0;
|
||||||
|
|
||||||
|
static struct timeval lasttv;
|
||||||
|
static struct timeval newtv;
|
||||||
|
|
||||||
|
void inline ssleep(const int usec) {
|
||||||
|
gettimeofday(&lasttv, NULL);
|
||||||
|
while (1) {
|
||||||
|
gettimeofday(&newtv, NULL);
|
||||||
|
if (((newtv.tv_usec - lasttv.tv_usec) + ((newtv.tv_sec - lasttv.tv_sec)*1000000)) > usec) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned char get_status() {
|
||||||
|
return inb(0x304);
|
||||||
|
}
|
||||||
|
|
||||||
|
int waitfree(char num) {
|
||||||
|
char c, pc = -1;
|
||||||
|
int retry = 100;
|
||||||
|
while (((c = get_status())&0x0F) != num && retry) {
|
||||||
|
ssleep(10);
|
||||||
|
retry--;
|
||||||
|
if (pc != c) {
|
||||||
|
//printf("%x-%d:", c, retry);
|
||||||
|
pc = c;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (retry == 0) {
|
||||||
|
printf("Waitfree failed %x != %x.\n", c, num);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
/*else
|
||||||
|
printf("Waitfree ok %x.\n", c);*/
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int writekey(char* key, char len, unsigned char* buffer) {
|
||||||
|
int i;
|
||||||
|
|
||||||
|
outb(0x11, 0x304);
|
||||||
|
if (!waitfree(0x0c)) return 0;
|
||||||
|
|
||||||
|
for (i = 0; i < 4; i++) {
|
||||||
|
outb(key[i], 0x300);
|
||||||
|
if (!waitfree(0x04)) return 0;
|
||||||
|
}
|
||||||
|
if (debug) printf(">%s", key);
|
||||||
|
|
||||||
|
outb(len, 0x300);
|
||||||
|
if (debug) printf(">%x", len);
|
||||||
|
|
||||||
|
for (i = 0; i < len; i++) {
|
||||||
|
if (!waitfree(0x04)) return 0;
|
||||||
|
outb(buffer[i], 0x300);
|
||||||
|
if (debug) printf(">%x", buffer[i]);
|
||||||
|
}
|
||||||
|
if (debug) printf("\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int readkey(char* key, char len, unsigned char* buffer) {
|
||||||
|
int i; unsigned char c;
|
||||||
|
|
||||||
|
outb(0x10, 0x304);
|
||||||
|
if (!waitfree(0x0c)) return 0;
|
||||||
|
|
||||||
|
for (i = 0; i < 4; i++) {
|
||||||
|
outb(key[i], 0x300);
|
||||||
|
if (!waitfree(0x04)) return 0;
|
||||||
|
}
|
||||||
|
if (debug) printf("<%s", key);
|
||||||
|
|
||||||
|
outb(len, 0x300);
|
||||||
|
if (debug) printf(">%x", len);
|
||||||
|
|
||||||
|
for (i = 0; i < len; i++) {
|
||||||
|
if (!waitfree(0x05)) return 0;
|
||||||
|
c = inb(0x300);
|
||||||
|
buffer[i] = c;
|
||||||
|
if (debug) printf("<%x", c);
|
||||||
|
}
|
||||||
|
if (debug) printf("\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int read_light_sensor(int left) {
|
||||||
|
unsigned char buffer[6];
|
||||||
|
if (readkey(left ? LIGHT_SENSOR_LEFT_KEY : LIGHT_SENSOR_RIGHT_KEY, 6, buffer))
|
||||||
|
return buffer[2];
|
||||||
|
else
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int set_keyboard_backlight(char value) {
|
||||||
|
unsigned char buffer[2];
|
||||||
|
buffer[0] = value;
|
||||||
|
buffer[1] = 0x00;
|
||||||
|
return writekey(BACKLIGHT_KEY, 2, buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
int init_motion_sensor() {
|
||||||
|
unsigned char buffer[2];
|
||||||
|
int retry = 50;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
while (retry) {
|
||||||
|
ret = readkey(MOTION_SENSOR_KEY, 2, buffer);
|
||||||
|
if (ret) {
|
||||||
|
if (buffer[0] || buffer[1]) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
usleep(100000);
|
||||||
|
retry--;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
buffer[0] = 0xe0;
|
||||||
|
buffer[1] = 0;
|
||||||
|
writekey(MOTION_SENSOR_KEY, 2, buffer);
|
||||||
|
retry--;
|
||||||
|
usleep(100000);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int read_motion_sensor(int index) {
|
||||||
|
unsigned char buffer[2];
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
switch (index) {
|
||||||
|
case 0:
|
||||||
|
ret = readkey(MOTION_SENSOR_X_KEY, 2, buffer);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
ret = readkey(MOTION_SENSOR_Y_KEY, 2, buffer);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
ret = readkey(MOTION_SENSOR_Z_KEY, 2, buffer);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
//printf("%d %x %x\n", index, buffer[0], buffer[1]);
|
||||||
|
if (ret) {
|
||||||
|
return (short)(buffer[0] << 8 | buffer[1]);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return 0x0FFFFFFF;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Brute-force device probing... */
|
||||||
|
void probe() {
|
||||||
|
char key[5];
|
||||||
|
char chars[37];
|
||||||
|
unsigned char buffer[2];
|
||||||
|
int i, j, k, l;
|
||||||
|
|
||||||
|
for (i = 0; i < 26; i++) {
|
||||||
|
chars[i] = 'A'+i;
|
||||||
|
}
|
||||||
|
for (i = 0; i < 10; i++) {
|
||||||
|
chars[i+26] = '0'+i;
|
||||||
|
}
|
||||||
|
chars[36] = '_';
|
||||||
|
|
||||||
|
key[4] = 0;
|
||||||
|
for (i = 0; i < 37; i++) {
|
||||||
|
key[0] = chars[i];
|
||||||
|
for (j = 0; j < 37; j++) {
|
||||||
|
key[1] = chars[j];
|
||||||
|
for (k = 0; k < 37; k++) {
|
||||||
|
key[2] = chars[k];
|
||||||
|
for (l = 0; l < 37; l++) {
|
||||||
|
key[3] = chars[l];
|
||||||
|
printf("key=%s\n", key);
|
||||||
|
readkey(key, 2, buffer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void usage(char* argv0) {
|
||||||
|
printf("Apple Macbook (pro) SMC control " VERSION);
|
||||||
|
printf("\n");
|
||||||
|
printf("Usage:\n");
|
||||||
|
printf("%s [-d]: read light/motion sensors values\n", argv0);
|
||||||
|
printf("%s [-d] value: write keyboard backlight value [0-255]\n", argv0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char** argv) {
|
||||||
|
int argi = 1;
|
||||||
|
if (argc > 3) {
|
||||||
|
usage(argv[0]);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ioperm(0x300, 0x304, 1) < 0) {
|
||||||
|
perror("ioperm failed (you should be root).");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((argc > 1) && !strcmp(argv[1], "-d")) {
|
||||||
|
debug = 1;
|
||||||
|
argi = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (argc-argi == 1) {
|
||||||
|
char* endptr;
|
||||||
|
long value = strtol(argv[argi], &endptr, 10);
|
||||||
|
if ((value < 0) || (value > 255) || (endptr[0])) {
|
||||||
|
printf("Invalid value \"%s\" (should be an integer between 0 and 255).\n", argv[1]);
|
||||||
|
usage(argv[0]);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
set_keyboard_backlight(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
init_motion_sensor();
|
||||||
|
printf("Light: Left: %d, Right: %d\n", read_light_sensor(1), read_light_sensor(0));
|
||||||
|
printf("Motion: X: %d, Y: %d, Z: %d\n", read_motion_sensor(0), read_motion_sensor(1), read_motion_sensor(2));
|
||||||
|
/*while (1) {
|
||||||
|
printf("Motion: X: %d, Y: %d, Z: %d\n", read_motion_sensor(0), read_motion_sensor(1), read_motion_sensor(2));
|
||||||
|
sleep(1);
|
||||||
|
}
|
||||||
|
int x, y, z, ox, oy, oz;
|
||||||
|
ox = read_motion_sensor(0);
|
||||||
|
oy = read_motion_sensor(1);
|
||||||
|
oz = read_motion_sensor(2);
|
||||||
|
while (1) {
|
||||||
|
x = read_motion_sensor(0);
|
||||||
|
y = read_motion_sensor(1);
|
||||||
|
z = read_motion_sensor(2);
|
||||||
|
if ((x-ox)*(x-ox)+(y-oy)*(y-oy)+(z-oz)*(z-oz) > 50)
|
||||||
|
printf("Accel: X: %d, Y: %d, Z: %d (%d %d)\n", x-ox, y-oy, z-oz, z, oz);
|
||||||
|
usleep(1000000);
|
||||||
|
ox = x; oy = y; oz = z;
|
||||||
|
}*/
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
194
backlight.c
Normal file
194
backlight.c
Normal file
@ -0,0 +1,194 @@
|
|||||||
|
/*
|
||||||
|
* Apple Macbook Pro LCD backlight control
|
||||||
|
*
|
||||||
|
* Copyright (C) 2006 Nicolas Boichat <nicolas@boichat.ch>
|
||||||
|
*
|
||||||
|
* 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., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <sys/io.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <sys/mman.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include <pci/pci.h>
|
||||||
|
|
||||||
|
char* memory;
|
||||||
|
|
||||||
|
static inline unsigned int readl(const volatile void *addr)
|
||||||
|
{
|
||||||
|
return *(volatile unsigned int*) addr;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void writel(unsigned int b, volatile void *addr)
|
||||||
|
{
|
||||||
|
*(volatile unsigned int*) addr = b;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define INREG(addr) readl(memory+addr)
|
||||||
|
#define OUTREG(addr,val) writel(val, memory+addr)
|
||||||
|
|
||||||
|
unsigned char read_backlight() {
|
||||||
|
return INREG(0x7af8) >> 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
void write_backlight_value(unsigned char value) {
|
||||||
|
OUTREG(0x7af8, 0x00000001 | ((unsigned int)value << 8));
|
||||||
|
}
|
||||||
|
|
||||||
|
void write_backlight(unsigned char value) {
|
||||||
|
unsigned int current = read_backlight();
|
||||||
|
|
||||||
|
if (current < value) {
|
||||||
|
while (current < value) {
|
||||||
|
current += 5;
|
||||||
|
if (current > value)
|
||||||
|
current = value;
|
||||||
|
write_backlight_value((unsigned char)current);
|
||||||
|
usleep(50000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
while (current > value) {
|
||||||
|
current -= 5;
|
||||||
|
if (current < value)
|
||||||
|
current = value;
|
||||||
|
write_backlight_value((unsigned char)current);
|
||||||
|
usleep(50000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void usage(char* argv0) {
|
||||||
|
printf("Apple Macbook (pro) backlight control " VERSION);
|
||||||
|
printf("\n");
|
||||||
|
printf("Usage:\n");
|
||||||
|
printf("%s: read current value\n", argv0);
|
||||||
|
printf("%s value: write value [0-255]\n", argv0);
|
||||||
|
printf("%s +n: increase value by n\n", argv0);
|
||||||
|
printf("%s -n: decrease value by n\n", argv0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char** argv) {
|
||||||
|
if (argc > 2) {
|
||||||
|
usage(argv[0]);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
char* endptr;
|
||||||
|
int ret = 0;
|
||||||
|
long address = 0;
|
||||||
|
long length = 0;
|
||||||
|
int fd;
|
||||||
|
int state;
|
||||||
|
|
||||||
|
/* Search for the graphics card. */
|
||||||
|
/* Default values: */
|
||||||
|
/* address = 0x90300000; */
|
||||||
|
/* length = 0x20000; */
|
||||||
|
|
||||||
|
struct pci_access *pacc = pci_alloc();
|
||||||
|
pci_init(pacc);
|
||||||
|
pci_scan_bus(pacc);
|
||||||
|
struct pci_dev *dev;
|
||||||
|
for(dev=pacc->devices; dev; dev=dev->next) { /* Iterate over all devices */
|
||||||
|
pci_fill_info(dev, PCI_FILL_IDENT | PCI_FILL_BASES);
|
||||||
|
if ((dev->vendor_id == 0x1002) && (dev->device_id == 0x71c5)) { // ATI X1600
|
||||||
|
address = dev->base_addr[2];
|
||||||
|
length = dev->size[2];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pci_cleanup(pacc);
|
||||||
|
|
||||||
|
if (!address) {
|
||||||
|
printf("Failed to detect ATI X1600, aborting...\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
fd = open("/dev/mem", O_RDWR);
|
||||||
|
|
||||||
|
if (fd < 0) {
|
||||||
|
perror("cannot open /dev/mem");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
memory = mmap(NULL, length, PROT_READ|PROT_WRITE, MAP_SHARED, fd, address);
|
||||||
|
|
||||||
|
if (memory == MAP_FAILED) {
|
||||||
|
perror("mmap failed");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Is it really necessary ? */
|
||||||
|
OUTREG(0x4dc, 0x00000005);
|
||||||
|
state = INREG(0x7ae4);
|
||||||
|
OUTREG(0x7ae4, state);
|
||||||
|
|
||||||
|
if (argc == 2) {
|
||||||
|
if (argv[1][0] == '+') {
|
||||||
|
long value = strtol(&argv[1][1], &endptr, 10);
|
||||||
|
if ((value < 0) || (value > 255) || (endptr[0])) {
|
||||||
|
printf("Invalid value \"%s\" (should be an integer between 0 and 255).\n", &argv[1][1]);
|
||||||
|
usage(argv[0]);
|
||||||
|
ret = 1;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
value = read_backlight()+value;
|
||||||
|
if (value > 255)
|
||||||
|
value = 255;
|
||||||
|
write_backlight(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (argv[1][0] == '-') {
|
||||||
|
long value = strtol(&argv[1][1], &endptr, 10);
|
||||||
|
if ((value < 0) || (value > 255) || (endptr[0])) {
|
||||||
|
printf("Invalid value \"%s\" (should be an integer between 0 and 255).\n", &argv[1][1]);
|
||||||
|
usage(argv[0]);
|
||||||
|
ret = 1;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
value = read_backlight()-value;
|
||||||
|
if (value < 0)
|
||||||
|
value = 0;
|
||||||
|
write_backlight(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
long value = strtol(argv[1], &endptr, 10);
|
||||||
|
if ((value < 0) || (value > 255) || (endptr[0])) {
|
||||||
|
printf("Invalid value \"%s\" (should be an integer between 0 and 255).\n", argv[1]);
|
||||||
|
usage(argv[0]);
|
||||||
|
ret = 1;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
write_backlight(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
printf("%d\n", read_backlight());
|
||||||
|
}
|
||||||
|
|
||||||
|
munmap(memory, length);
|
||||||
|
close(fd);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
54
keyboard_brigthness
Executable file
54
keyboard_brigthness
Executable file
@ -0,0 +1,54 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# set the keyboard brigthness on a Apple MacBook computer
|
||||||
|
# Copyright (C) 2006 Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||||
|
#
|
||||||
|
# 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.,
|
||||||
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
|
||||||
|
#set -v
|
||||||
|
#set -x
|
||||||
|
BRIGHTNESS=/sys/class/leds/smc\:kbd_backlight/brightness
|
||||||
|
value=$(cat $BRIGHTNESS)
|
||||||
|
|
||||||
|
if [ -z "$1" ]; then
|
||||||
|
echo $value
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$1" = "-h" ]; then
|
||||||
|
echo "Usage: $0 [-h|arg|+arg|-arg]"
|
||||||
|
echo
|
||||||
|
echo "Change the keyboard brigthness to:"
|
||||||
|
echo " arg"
|
||||||
|
echo " or current value + arg"
|
||||||
|
echo " or current value - arg"
|
||||||
|
echo
|
||||||
|
echo "Without argument it return the current value"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $(expr match "$1" "[+-]") = "1" ]; then
|
||||||
|
value=$((value$1))
|
||||||
|
else
|
||||||
|
value=$1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $value -lt 0 ]; then
|
||||||
|
value=0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo $value > $BRIGHTNESS
|
||||||
|
cat $BRIGHTNESS
|
||||||
|
|
40
lircd.conf-apple
Normal file
40
lircd.conf-apple
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
|
||||||
|
# Please make this file available to others
|
||||||
|
# by sending it to <lirc@bartelmus.de>
|
||||||
|
#
|
||||||
|
# this config file was automatically generated
|
||||||
|
# using lirc-0.8.0(devinput) on Fri Aug 25 23:48:04 2006
|
||||||
|
#
|
||||||
|
# contributed by
|
||||||
|
#
|
||||||
|
# brand: lircd.conf
|
||||||
|
# model no. of remote control:
|
||||||
|
# devices being controlled by this remote:
|
||||||
|
#
|
||||||
|
|
||||||
|
begin remote
|
||||||
|
|
||||||
|
name apple-frontrow
|
||||||
|
bits 8
|
||||||
|
eps 30
|
||||||
|
aeps 100
|
||||||
|
|
||||||
|
one 0 0
|
||||||
|
zero 0 0
|
||||||
|
pre_data_bits 24
|
||||||
|
pre_data 0x800100
|
||||||
|
gap 135862
|
||||||
|
toggle_bit 0
|
||||||
|
|
||||||
|
|
||||||
|
begin codes
|
||||||
|
menu 0x8B
|
||||||
|
plus 0x73
|
||||||
|
minus 0x72
|
||||||
|
back 0xA5
|
||||||
|
forward 0xA3
|
||||||
|
play 0xA4
|
||||||
|
end codes
|
||||||
|
|
||||||
|
end remote
|
||||||
|
|
54
macbook-led.sh
Executable file
54
macbook-led.sh
Executable file
@ -0,0 +1,54 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
VERSION=01
|
||||||
|
|
||||||
|
if [ "$1" == "--help" ]; then
|
||||||
|
echo "
|
||||||
|
MacBook LED indicator (v$VERSION) Jason Parekh <jasonparekh@gmail.com>
|
||||||
|
Put that SPDIF-out to use! http://jasonparekh.com/linux-on-macbook
|
||||||
|
|
||||||
|
Usage: $0 <type> [dev]
|
||||||
|
|
||||||
|
type Choose between 'disk' (default) or 'net' indicator
|
||||||
|
dev Use the 'dev' device (eg: 'sda1' or even just 'sda' for all partitions)
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
$0 Monitors all block devices activity (disk and CD/DVD drives)
|
||||||
|
$0 disk sda Monitors all disk drives activity
|
||||||
|
$0 net eth0 Monitors LAN activity
|
||||||
|
$0 net Monitors all network activity (WARNING: wlan0 will pickup ANY wifi activity)
|
||||||
|
$0 net ath0 Monitors wireless activity
|
||||||
|
"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
STATS_FILE="/proc/diskstats"
|
||||||
|
|
||||||
|
if [ "$1" == "net" ]; then
|
||||||
|
STATS_FILE="/proc/net/dev"
|
||||||
|
fi
|
||||||
|
|
||||||
|
STATS_CMD="cat $STATS_FILE"
|
||||||
|
if [ "$2" != "" ]; then
|
||||||
|
STATS_CMD="grep $2 $STATS_FILE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
renice 19 -p $$ >/dev/null 2>&1
|
||||||
|
|
||||||
|
while [ 1 ]; do
|
||||||
|
CUR_STATS=`$STATS_CMD`
|
||||||
|
if [ "$CUR_STATS" != "$LAST_STATS" ]; then
|
||||||
|
if [ "$LAST_OP" != "ACTIVE" ]; then
|
||||||
|
amixer set IEC958 on >/dev/null 2>&1
|
||||||
|
fi
|
||||||
|
LAST_OP="ACTIVE"
|
||||||
|
else
|
||||||
|
if [ "$LAST_OP" != "IDLE" ]; then
|
||||||
|
amixer set IEC958 off >/dev/null 2>&1
|
||||||
|
fi
|
||||||
|
LAST_OP="IDLE"
|
||||||
|
fi
|
||||||
|
LAST_STATS="$CUR_STATS"
|
||||||
|
sleep 0.2
|
||||||
|
done
|
||||||
|
|
41
macbook-lightd
Executable file
41
macbook-lightd
Executable file
@ -0,0 +1,41 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# applesmc keyboard backlight sample test daemon
|
||||||
|
# by Silvan Calarco <silvan.calarco@mambasoft.it>
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify it
|
||||||
|
# under the terms of the GNU General Public License v2 as published by the
|
||||||
|
# Free Software Foundation.
|
||||||
|
#
|
||||||
|
SENSIBILITY=25
|
||||||
|
TIMEWAIT=2
|
||||||
|
BLINDOFF=50
|
||||||
|
BLINDON=100
|
||||||
|
SENSOR_FILE=/sys/devices/platform/applesmc.768/light
|
||||||
|
|
||||||
|
[ -e $SENSOR_FILE ] || exit 1
|
||||||
|
|
||||||
|
while [ "1" ]; do
|
||||||
|
eval `cat $SENSOR_FILE|sed "s|(\(.*\),\(.*\))|LIGHTL=\1 LIGHTR=\2|"` >/dev/null
|
||||||
|
if [ "$LIGHTR" ]; then
|
||||||
|
if [ $LIGHTL -gt $LIGHTR ]; then
|
||||||
|
LIGHTM=$LIGHTL
|
||||||
|
else
|
||||||
|
LIGHTM=$LIGHTR
|
||||||
|
fi
|
||||||
|
# LIGHTM=`expr \( $LIGHTL + $LIGHTR \) / 2`
|
||||||
|
BACKLIGHT=`expr 255 - $LIGHTM \* $SENSIBILITY`
|
||||||
|
if [ $BACKLIGHT -lt $BLINDOFF ]; then
|
||||||
|
BACKLIGHT=0
|
||||||
|
elif [ $BACKLIGHT -lt $BLINDON ]; then
|
||||||
|
BACKLIGHT=`expr $BACKLIGHT + 50`
|
||||||
|
else
|
||||||
|
[ $BACKLIGHT -gt 255 ] && BACKLIGHT=255
|
||||||
|
fi
|
||||||
|
echo "LightM=$LIGHTM Backlight=$BACKLIGHT "
|
||||||
|
applesmc $BACKLIGHT
|
||||||
|
# echo $BACKLIGHT > /sys/devices/platform/applesmc.768/keyboard_backlight
|
||||||
|
# CURRBACKLIGHT=$BACKLIGHT
|
||||||
|
sleep $TIMEWAIT
|
||||||
|
fi
|
||||||
|
done
|
1
macbook-modprobe
Normal file
1
macbook-modprobe
Normal file
@ -0,0 +1 @@
|
|||||||
|
options hid_apple fnmode=2
|
12
macbook-set-input
Executable file
12
macbook-set-input
Executable file
@ -0,0 +1,12 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# Start commands for keyboard mapping and commands inside an X session
|
||||||
|
# Copyright (c) 2007-2008 by Silvan Calarco <silvan.calarco@mambasoft.it>
|
||||||
|
# Released under the terms of the GNU GPL License version 3
|
||||||
|
#
|
||||||
|
|
||||||
|
# Check for an Apple chassis or exit
|
||||||
|
|
||||||
|
[[ `hal-get-property --udi /org/freedesktop/Hal/devices/computer --key system.chassis.manufacturer 2>/dev/null | grep Apple 2>/dev/null` ]] && {
|
||||||
|
xkbset m
|
||||||
|
}
|
84
macbook-tools-init
Executable file
84
macbook-tools-init
Executable file
@ -0,0 +1,84 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Macbook tools initscript
|
||||||
|
# Copyright (c) 2006-2009 by Silvan Calarco <silvan.calarco@mambasoft.it>
|
||||||
|
# Released under the GPL v.2 license
|
||||||
|
#
|
||||||
|
# /etc/rc.d/init.d/macbook-tools
|
||||||
|
#
|
||||||
|
# chkconfig: 345 42 58
|
||||||
|
# description: set screen backlight level and load iSight firmware on Apple MacBooks
|
||||||
|
# processname: macbook-tools
|
||||||
|
|
||||||
|
# Source function library.
|
||||||
|
. /etc/rc.d/init.d/functions
|
||||||
|
|
||||||
|
[ -e /etc/sysconfig/machine ] && . /etc/sysconfig/machine
|
||||||
|
|
||||||
|
# Check for Apple manufacturer or exit
|
||||||
|
[ "${SYSTEM_MANUFACTURER:0:5}" = "Apple" ] || {
|
||||||
|
sed -i "s|KEYMAP=it-macbook|KEYMAP=it|" /etc/vconsole.conf
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
|
||||||
|
[ -f /etc/sysconfig/macbook-tools ] && . /etc/sysconfig/macbook-tools
|
||||||
|
|
||||||
|
sed -i "s|KEYMAP=it$|KEYMAP=it-macbook|" /etc/vconsole.conf
|
||||||
|
|
||||||
|
[ "$BACKLIGHT_LEVEL" ] || BACKLIGHT_LEVEL=190
|
||||||
|
|
||||||
|
RETVAL=0
|
||||||
|
|
||||||
|
#
|
||||||
|
# See how we were called.
|
||||||
|
#
|
||||||
|
|
||||||
|
start() {
|
||||||
|
[ -e /sys/devices/platform/applesmc.768 ] || modprobe applesmc
|
||||||
|
|
||||||
|
if [ "$IR_EVENT_DEVICE" ]; then
|
||||||
|
echo -n "Starting lircd for Apple IR remote: "
|
||||||
|
lircd -H macmini /etc/lirc/apple/lircd.conf.macmini
|
||||||
|
evaluate_retval
|
||||||
|
echo
|
||||||
|
fi
|
||||||
|
|
||||||
|
#echo -n "Setting middle and right click mouse emulation: "
|
||||||
|
#echo 1 > /proc/sys/dev/mac_hid/mouse_button_emulation
|
||||||
|
#echo 125 > /proc/sys/dev/mac_hid/mouse_button2_keycode
|
||||||
|
#echo 96 > /proc/sys/dev/mac_hid/mouse_button3_keycode
|
||||||
|
#evaluate_retval
|
||||||
|
#echo
|
||||||
|
|
||||||
|
echo -n "Loading MacBook light sensor control daemon: "
|
||||||
|
macbook-lightd &>/dev/null &
|
||||||
|
evaluate_retval
|
||||||
|
echo
|
||||||
|
}
|
||||||
|
|
||||||
|
stop() {
|
||||||
|
echo -n "Stopping MacBook light sensor control daemon: "
|
||||||
|
killall -9 macbook-lightd
|
||||||
|
evaluate_retval
|
||||||
|
echo
|
||||||
|
}
|
||||||
|
|
||||||
|
restart() {
|
||||||
|
stop
|
||||||
|
start
|
||||||
|
}
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
start)
|
||||||
|
start
|
||||||
|
;;
|
||||||
|
restart)
|
||||||
|
restart
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
INITNAME=`basename $0`
|
||||||
|
echo "Usage: $INITNAME {start|restart}"
|
||||||
|
exit 1
|
||||||
|
esac
|
||||||
|
|
||||||
|
exit $RETVAL
|
2
macbook-tools-sysconfig
Normal file
2
macbook-tools-sysconfig
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
ISIGHT_FIRMWARE_FILE=/mnt/osx/System/Library/Extensions/IOUSBFamily.kext/Contents/PlugIns/AppleUSBVideoSupport.kext/Contents/MacOS/AppleUSBVideoSupport
|
||||||
|
IR_EVENT_DEVICE=/dev/appleir
|
7
macbook_set_input.desktop
Normal file
7
macbook_set_input.desktop
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Encoding=UTF-8
|
||||||
|
X-KDE-autostart-phase=1
|
||||||
|
Type=Application
|
||||||
|
Exec=macbook-set-input
|
||||||
|
OnlyShowIn=KDE;
|
||||||
|
Name=Set MacBook input devices
|
Loading…
Reference in New Issue
Block a user