Merge branches 'sh/memchunk' and 'common/mmcif' into sh-latest
This commit is contained in:
commit
89e9fd32c6
1
.mailmap
1
.mailmap
|
@ -105,3 +105,4 @@ Uwe Kleine-König <ukleinek@informatik.uni-freiburg.de>
|
|||
Uwe Kleine-König <ukl@pengutronix.de>
|
||||
Uwe Kleine-König <Uwe.Kleine-Koenig@digi.com>
|
||||
Valdis Kletnieks <Valdis.Kletnieks@vt.edu>
|
||||
Takashi YOSHII <takashi.yoshii.zj@renesas.com>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/actual_dpi
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/kone/roccatkone<minor>/actual_dpi
|
||||
Date: March 2010
|
||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||
Description: It is possible to switch the dpi setting of the mouse with the
|
||||
|
@ -17,13 +17,13 @@ Description: It is possible to switch the dpi setting of the mouse with the
|
|||
|
||||
This file is readonly.
|
||||
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/actual_profile
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/kone/roccatkone<minor>/actual_profile
|
||||
Date: March 2010
|
||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||
Description: When read, this file returns the number of the actual profile.
|
||||
This file is readonly.
|
||||
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/firmware_version
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/kone/roccatkone<minor>/firmware_version
|
||||
Date: March 2010
|
||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||
Description: When read, this file returns the raw integer version number of the
|
||||
|
@ -33,7 +33,7 @@ Description: When read, this file returns the raw integer version number of the
|
|||
left. E.g. a returned value of 138 means 1.38
|
||||
This file is readonly.
|
||||
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/profile[1-5]
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/kone/roccatkone<minor>/profile[1-5]
|
||||
Date: March 2010
|
||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||
Description: The mouse can store 5 profiles which can be switched by the
|
||||
|
@ -48,7 +48,7 @@ Description: The mouse can store 5 profiles which can be switched by the
|
|||
stored in the profile doesn't need to fit the number of the
|
||||
store.
|
||||
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/settings
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/kone/roccatkone<minor>/settings
|
||||
Date: March 2010
|
||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||
Description: When read, this file returns the settings stored in the mouse.
|
||||
|
@ -58,7 +58,7 @@ Description: When read, this file returns the settings stored in the mouse.
|
|||
The data has to be 36 bytes long. The mouse will reject invalid
|
||||
data.
|
||||
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/startup_profile
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/kone/roccatkone<minor>/startup_profile
|
||||
Date: March 2010
|
||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||
Description: The integer value of this attribute ranges from 1 to 5.
|
||||
|
@ -67,7 +67,7 @@ Description: The integer value of this attribute ranges from 1 to 5.
|
|||
When written, this file sets the number of the startup profile
|
||||
and the mouse activates this profile immediately.
|
||||
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/tcu
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/kone/roccatkone<minor>/tcu
|
||||
Date: March 2010
|
||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||
Description: The mouse has a "Tracking Control Unit" which lets the user
|
||||
|
@ -78,7 +78,7 @@ Description: The mouse has a "Tracking Control Unit" which lets the user
|
|||
Writing 1 in this file will start the calibration which takes
|
||||
around 6 seconds to complete and activates the TCU.
|
||||
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/weight
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/kone/roccatkone<minor>/weight
|
||||
Date: March 2010
|
||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||
Description: The mouse can be equipped with one of four supplied weights
|
||||
|
|
|
@ -0,0 +1,108 @@
|
|||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/actual_profile
|
||||
Date: October 2010
|
||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||
Description: When read, this file returns the number of the actual profile in
|
||||
range 0-4.
|
||||
This file is readonly.
|
||||
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/firmware_version
|
||||
Date: October 2010
|
||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||
Description: When read, this file returns the raw integer version number of the
|
||||
firmware reported by the mouse. Using the integer value eases
|
||||
further usage in other programs. To receive the real version
|
||||
number the decimal point has to be shifted 2 positions to the
|
||||
left. E.g. a returned value of 121 means 1.21
|
||||
This file is readonly.
|
||||
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/macro
|
||||
Date: October 2010
|
||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||
Description: The mouse can store a macro with max 500 key/button strokes
|
||||
internally.
|
||||
When written, this file lets one set the sequence for a specific
|
||||
button for a specific profile. Button and profile numbers are
|
||||
included in written data. The data has to be 2082 bytes long.
|
||||
This file is writeonly.
|
||||
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/profile_buttons
|
||||
Date: August 2010
|
||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||
Description: The mouse can store 5 profiles which can be switched by the
|
||||
press of a button. A profile is split in settings and buttons.
|
||||
profile_buttons holds informations about button layout.
|
||||
When written, this file lets one write the respective profile
|
||||
buttons back to the mouse. The data has to be 77 bytes long.
|
||||
The mouse will reject invalid data.
|
||||
Which profile to write is determined by the profile number
|
||||
contained in the data.
|
||||
This file is writeonly.
|
||||
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/profile[1-5]_buttons
|
||||
Date: August 2010
|
||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||
Description: The mouse can store 5 profiles which can be switched by the
|
||||
press of a button. A profile is split in settings and buttons.
|
||||
profile_buttons holds informations about button layout.
|
||||
When read, these files return the respective profile buttons.
|
||||
The returned data is 77 bytes in size.
|
||||
This file is readonly.
|
||||
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/profile_settings
|
||||
Date: October 2010
|
||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||
Description: The mouse can store 5 profiles which can be switched by the
|
||||
press of a button. A profile is split in settings and buttons.
|
||||
profile_settings holds informations like resolution, sensitivity
|
||||
and light effects.
|
||||
When written, this file lets one write the respective profile
|
||||
settings back to the mouse. The data has to be 43 bytes long.
|
||||
The mouse will reject invalid data.
|
||||
Which profile to write is determined by the profile number
|
||||
contained in the data.
|
||||
This file is writeonly.
|
||||
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/profile[1-5]_settings
|
||||
Date: August 2010
|
||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||
Description: The mouse can store 5 profiles which can be switched by the
|
||||
press of a button. A profile is split in settings and buttons.
|
||||
profile_settings holds informations like resolution, sensitivity
|
||||
and light effects.
|
||||
When read, these files return the respective profile settings.
|
||||
The returned data is 43 bytes in size.
|
||||
This file is readonly.
|
||||
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/sensor
|
||||
Date: October 2010
|
||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||
Description: The mouse has a tracking- and a distance-control-unit. These
|
||||
can be activated/deactivated and the lift-off distance can be
|
||||
set. The data has to be 6 bytes long.
|
||||
This file is writeonly.
|
||||
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/startup_profile
|
||||
Date: October 2010
|
||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||
Description: The integer value of this attribute ranges from 0-4.
|
||||
When read, this attribute returns the number of the profile
|
||||
that's active when the mouse is powered on.
|
||||
When written, this file sets the number of the startup profile
|
||||
and the mouse activates this profile immediately.
|
||||
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/tcu
|
||||
Date: October 2010
|
||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||
Description: When written a calibration process for the tracking control unit
|
||||
can be initiated/cancelled.
|
||||
The data has to be 3 bytes long.
|
||||
This file is writeonly.
|
||||
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/tcu_image
|
||||
Date: October 2010
|
||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||
Description: When read the mouse returns a 30x30 pixel image of the
|
||||
sampled underground. This works only in the course of a
|
||||
calibration process initiated with tcu.
|
||||
The returned data is 1028 bytes in size.
|
||||
This file is readonly.
|
|
@ -1,4 +1,4 @@
|
|||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/actual_cpi
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/pyra/roccatpyra<minor>/actual_cpi
|
||||
Date: August 2010
|
||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||
Description: It is possible to switch the cpi setting of the mouse with the
|
||||
|
@ -14,14 +14,14 @@ Description: It is possible to switch the cpi setting of the mouse with the
|
|||
|
||||
This file is readonly.
|
||||
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/actual_profile
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/pyra/roccatpyra<minor>/actual_profile
|
||||
Date: August 2010
|
||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||
Description: When read, this file returns the number of the actual profile in
|
||||
range 0-4.
|
||||
This file is readonly.
|
||||
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/firmware_version
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/pyra/roccatpyra<minor>/firmware_version
|
||||
Date: August 2010
|
||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||
Description: When read, this file returns the raw integer version number of the
|
||||
|
@ -31,7 +31,7 @@ Description: When read, this file returns the raw integer version number of the
|
|||
left. E.g. a returned value of 138 means 1.38
|
||||
This file is readonly.
|
||||
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/profile_settings
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/pyra/roccatpyra<minor>/profile_settings
|
||||
Date: August 2010
|
||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||
Description: The mouse can store 5 profiles which can be switched by the
|
||||
|
@ -45,7 +45,7 @@ Description: The mouse can store 5 profiles which can be switched by the
|
|||
contained in the data.
|
||||
This file is writeonly.
|
||||
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/profile[1-5]_settings
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/pyra/roccatpyra<minor>/profile[1-5]_settings
|
||||
Date: August 2010
|
||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||
Description: The mouse can store 5 profiles which can be switched by the
|
||||
|
@ -56,7 +56,7 @@ Description: The mouse can store 5 profiles which can be switched by the
|
|||
The returned data is 13 bytes in size.
|
||||
This file is readonly.
|
||||
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/profile_buttons
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/pyra/roccatpyra<minor>/profile_buttons
|
||||
Date: August 2010
|
||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||
Description: The mouse can store 5 profiles which can be switched by the
|
||||
|
@ -69,7 +69,7 @@ Description: The mouse can store 5 profiles which can be switched by the
|
|||
contained in the data.
|
||||
This file is writeonly.
|
||||
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/profile[1-5]_buttons
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/pyra/roccatpyra<minor>/profile[1-5]_buttons
|
||||
Date: August 2010
|
||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||
Description: The mouse can store 5 profiles which can be switched by the
|
||||
|
@ -79,7 +79,7 @@ Description: The mouse can store 5 profiles which can be switched by the
|
|||
The returned data is 19 bytes in size.
|
||||
This file is readonly.
|
||||
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/startup_profile
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/pyra/roccatpyra<minor>/startup_profile
|
||||
Date: August 2010
|
||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||
Description: The integer value of this attribute ranges from 0-4.
|
||||
|
@ -87,7 +87,7 @@ Description: The integer value of this attribute ranges from 0-4.
|
|||
that's active when the mouse is powered on.
|
||||
This file is readonly.
|
||||
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/settings
|
||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/pyra/roccatpyra<minor>/settings
|
||||
Date: August 2010
|
||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||
Description: When read, this file returns the settings stored in the mouse.
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
What: /sys/devices/platform/ideapad/camera_power
|
||||
Date: Dec 2010
|
||||
KernelVersion: 2.6.37
|
||||
Contact: "Ike Panhc <ike.pan@canonical.com>"
|
||||
Description:
|
||||
Control the power of camera module. 1 means on, 0 means off.
|
|
@ -0,0 +1,19 @@
|
|||
What: /sys/class/tty/console/active
|
||||
Date: Nov 2010
|
||||
Contact: Kay Sievers <kay.sievers@vrfy.org>
|
||||
Description:
|
||||
Shows the list of currently configured
|
||||
console devices, like 'tty1 ttyS0'.
|
||||
The last entry in the file is the active
|
||||
device connected to /dev/console.
|
||||
The file supports poll() to detect virtual
|
||||
console switches.
|
||||
|
||||
What: /sys/class/tty/tty0/active
|
||||
Date: Nov 2010
|
||||
Contact: Kay Sievers <kay.sievers@vrfy.org>
|
||||
Description:
|
||||
Shows the currently active virtual console
|
||||
device, like 'tty1'.
|
||||
The file supports poll() to detect virtual
|
||||
console switches.
|
|
@ -303,6 +303,10 @@ X!Idrivers/video/console/fonts.c
|
|||
!Edrivers/input/input.c
|
||||
!Edrivers/input/ff-core.c
|
||||
!Edrivers/input/ff-memless.c
|
||||
</sect1>
|
||||
<sect1><title>Multitouch Library</title>
|
||||
!Iinclude/linux/input/mt.h
|
||||
!Edrivers/input/input-mt.c
|
||||
</sect1>
|
||||
<sect1><title>Polled input devices</title>
|
||||
!Iinclude/linux/input-polldev.h
|
||||
|
|
|
@ -34,8 +34,7 @@
|
|||
<varlistentry>
|
||||
<term><parameter>request</parameter></term>
|
||||
<listitem>
|
||||
<para>V4L2 ioctl request code as defined in the <link
|
||||
linkend="videodev">videodev.h</link> header file, for example
|
||||
<para>V4L2 ioctl request code as defined in the <filename>videodev2.h</filename> header file, for example
|
||||
VIDIOC_QUERYCAP.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
@ -57,7 +56,7 @@ file descriptor. An ioctl <parameter>request</parameter> has encoded
|
|||
in it whether the argument is an input, output or read/write
|
||||
parameter, and the size of the argument <parameter>argp</parameter> in
|
||||
bytes. Macros and defines specifying V4L2 ioctl requests are located
|
||||
in the <link linkend="videodev">videodev.h</link> header file.
|
||||
in the <filename>videodev2.h</filename> header file.
|
||||
Applications should use their own copy, not include the version in the
|
||||
kernel sources on the system they compile on. All V4L2 ioctl requests,
|
||||
their respective function and parameters are specified in <xref
|
||||
|
|
|
@ -142,8 +142,8 @@ leftmost pixel of the second row from the top, and so on. The last row
|
|||
has just as many pad bytes after it as the other rows.</para>
|
||||
|
||||
<para>In V4L2 each format has an identifier which looks like
|
||||
<constant>PIX_FMT_XXX</constant>, defined in the <link
|
||||
linkend="videodev">videodev.h</link> header file. These identifiers
|
||||
<constant>PIX_FMT_XXX</constant>, defined in the <filename>videodev2.h</filename>
|
||||
header file. These identifiers
|
||||
represent <link linkend="v4l2-fourcc">four character codes</link>
|
||||
which are also listed below, however they are not the same as those
|
||||
used in the Windows world.</para>
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
obj-m := DocBook/ accounting/ auxdisplay/ connector/ \
|
||||
filesystems/ filesystems/configfs/ ia64/ laptops/ networking/ \
|
||||
pcmcia/ spi/ timers/ video4linux/ vm/ watchdog/src/
|
||||
pcmcia/ spi/ timers/ vm/ watchdog/src/
|
||||
|
|
|
@ -127,3 +127,28 @@ implementation needs:
|
|||
10. (*pdata->cpu_set_freq)(unsigned long f)
|
||||
|
||||
11. (*pdata->cpu_get_freq)(void)
|
||||
|
||||
Customizing OPP for platform
|
||||
============================
|
||||
Defining CONFIG_PM should enable OPP layer for the silicon
|
||||
and the registration of OPP table should take place automatically.
|
||||
However, in special cases, the default OPP table may need to be
|
||||
tweaked, for e.g.:
|
||||
* enable default OPPs which are disabled by default, but which
|
||||
could be enabled on a platform
|
||||
* Disable an unsupported OPP on the platform
|
||||
* Define and add a custom opp table entry
|
||||
in these cases, the board file needs to do additional steps as follows:
|
||||
arch/arm/mach-omapx/board-xyz.c
|
||||
#include "pm.h"
|
||||
....
|
||||
static void __init omap_xyz_init_irq(void)
|
||||
{
|
||||
....
|
||||
/* Initialize the default table */
|
||||
omapx_opp_init();
|
||||
/* Do customization to the defaults */
|
||||
....
|
||||
}
|
||||
NOTE: omapx_opp_init will be omap3_opp_init or as required
|
||||
based on the omap family.
|
||||
|
|
|
@ -36,6 +36,10 @@ as a regular user, and install it with
|
|||
|
||||
sudo make install
|
||||
|
||||
The semantic patches in the kernel will work best with Coccinelle version
|
||||
0.2.4 or later. Using earlier versions may incur some parse errors in the
|
||||
semantic patch code, but any results that are obtained should still be
|
||||
correct.
|
||||
|
||||
Using Coccinelle on the Linux kernel
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
|
|
@ -46,7 +46,7 @@ and run
|
|||
Other LG firmware can be extracted manually from US280D.sys
|
||||
only found in windows/system32/driver.
|
||||
|
||||
dd if=US280D.sys ibs=1 skip=42616 count=3668 of=dvb-usb-lme2510-lg.fw
|
||||
dd if=US280D.sys ibs=1 skip=42360 count=3924 of=dvb-usb-lme2510-lg.fw
|
||||
|
||||
for DM04 LME2510C (LG Tuner)
|
||||
---------------------------
|
||||
|
|
|
@ -97,36 +97,38 @@ Who: Pavel Machek <pavel@ucw.cz>
|
|||
|
||||
---------------------------
|
||||
|
||||
What: Video4Linux API 1 ioctls and from Video devices.
|
||||
When: kernel 2.6.38
|
||||
Files: include/linux/videodev.h
|
||||
Check: include/linux/videodev.h
|
||||
Why: V4L1 AP1 was replaced by V4L2 API during migration from 2.4 to 2.6
|
||||
series. The old API have lots of drawbacks and don't provide enough
|
||||
means to work with all video and audio standards. The newer API is
|
||||
already available on the main drivers and should be used instead.
|
||||
Newer drivers should use v4l_compat_translate_ioctl function to handle
|
||||
old calls, replacing to newer ones.
|
||||
Decoder iocts are using internally to allow video drivers to
|
||||
communicate with video decoders. This should also be improved to allow
|
||||
V4L2 calls being translated into compatible internal ioctls.
|
||||
Compatibility ioctls will be provided, for a while, via
|
||||
v4l1-compat module.
|
||||
Who: Mauro Carvalho Chehab <mchehab@infradead.org>
|
||||
|
||||
---------------------------
|
||||
|
||||
What: Video4Linux obsolete drivers using V4L1 API
|
||||
When: kernel 2.6.38
|
||||
Files: drivers/staging/cpia/* drivers/staging/stradis/*
|
||||
Check: drivers/staging/cpia/cpia.c drivers/staging/stradis/stradis.c
|
||||
When: kernel 2.6.39
|
||||
Files: drivers/staging/se401/* drivers/staging/usbvideo/*
|
||||
Check: drivers/staging/se401/se401.c drivers/staging/usbvideo/usbvideo.c
|
||||
Why: There are some drivers still using V4L1 API, despite all efforts we've done
|
||||
to migrate. Those drivers are for obsolete hardware that the old maintainer
|
||||
didn't care (or not have the hardware anymore), and that no other developer
|
||||
could find any hardware to buy. They probably have no practical usage today,
|
||||
and people with such old hardware could probably keep using an older version
|
||||
of the kernel. Those drivers will be moved to staging on 2.6.37 and, if nobody
|
||||
care enough to port and test them with V4L2 API, they'll be removed on 2.6.38.
|
||||
of the kernel. Those drivers will be moved to staging on 2.6.38 and, if nobody
|
||||
cares enough to port and test them with V4L2 API, they'll be removed on 2.6.39.
|
||||
Who: Mauro Carvalho Chehab <mchehab@infradead.org>
|
||||
|
||||
---------------------------
|
||||
|
||||
What: Video4Linux: Remove obsolete ioctl's
|
||||
When: kernel 2.6.39
|
||||
Files: include/media/videodev2.h
|
||||
Why: Some ioctl's were defined wrong on 2.6.2 and 2.6.6, using the wrong
|
||||
type of R/W arguments. They were fixed, but the old ioctl names are
|
||||
still there, maintained to avoid breaking binary compatibility:
|
||||
#define VIDIOC_OVERLAY_OLD _IOWR('V', 14, int)
|
||||
#define VIDIOC_S_PARM_OLD _IOW('V', 22, struct v4l2_streamparm)
|
||||
#define VIDIOC_S_CTRL_OLD _IOW('V', 28, struct v4l2_control)
|
||||
#define VIDIOC_G_AUDIO_OLD _IOWR('V', 33, struct v4l2_audio)
|
||||
#define VIDIOC_G_AUDOUT_OLD _IOWR('V', 49, struct v4l2_audioout)
|
||||
#define VIDIOC_CROPCAP_OLD _IOR('V', 58, struct v4l2_cropcap)
|
||||
There's no sense on preserving those forever, as it is very doubtful
|
||||
that someone would try to use a such old binary with a modern kernel.
|
||||
Removing them will allow us to remove some magic done at the V4L ioctl
|
||||
handler.
|
||||
|
||||
Who: Mauro Carvalho Chehab <mchehab@infradead.org>
|
||||
|
||||
---------------------------
|
||||
|
@ -564,3 +566,13 @@ Why: This field is deprecated. I2C device drivers shouldn't change their
|
|||
Who: Jean Delvare <khali@linux-fr.org>
|
||||
|
||||
----------------------------
|
||||
|
||||
What: cancel_rearming_delayed_work[queue]()
|
||||
When: 2.6.39
|
||||
|
||||
Why: The functions have been superceded by cancel_delayed_work_sync()
|
||||
quite some time ago. The conversion is trivial and there is no
|
||||
in-kernel user left.
|
||||
Who: Tejun Heo <tj@kernel.org>
|
||||
|
||||
----------------------------
|
||||
|
|
|
@ -9,22 +9,25 @@ be able to use diff(1).
|
|||
|
||||
--------------------------- dentry_operations --------------------------
|
||||
prototypes:
|
||||
int (*d_revalidate)(struct dentry *, int);
|
||||
int (*d_hash) (struct dentry *, struct qstr *);
|
||||
int (*d_compare) (struct dentry *, struct qstr *, struct qstr *);
|
||||
int (*d_revalidate)(struct dentry *, struct nameidata *);
|
||||
int (*d_hash)(const struct dentry *, const struct inode *,
|
||||
struct qstr *);
|
||||
int (*d_compare)(const struct dentry *, const struct inode *,
|
||||
const struct dentry *, const struct inode *,
|
||||
unsigned int, const char *, const struct qstr *);
|
||||
int (*d_delete)(struct dentry *);
|
||||
void (*d_release)(struct dentry *);
|
||||
void (*d_iput)(struct dentry *, struct inode *);
|
||||
char *(*d_dname)((struct dentry *dentry, char *buffer, int buflen);
|
||||
|
||||
locking rules:
|
||||
dcache_lock rename_lock ->d_lock may block
|
||||
d_revalidate: no no no yes
|
||||
d_hash no no no yes
|
||||
d_compare: no yes no no
|
||||
d_delete: yes no yes no
|
||||
d_release: no no no yes
|
||||
d_iput: no no no yes
|
||||
rename_lock ->d_lock may block rcu-walk
|
||||
d_revalidate: no no yes (ref-walk) maybe
|
||||
d_hash no no no maybe
|
||||
d_compare: yes no no maybe
|
||||
d_delete: no yes no no
|
||||
d_release: no no yes no
|
||||
d_iput: no no yes no
|
||||
d_dname: no no no no
|
||||
|
||||
--------------------------- inode_operations ---------------------------
|
||||
|
@ -44,8 +47,8 @@ ata *);
|
|||
void * (*follow_link) (struct dentry *, struct nameidata *);
|
||||
void (*put_link) (struct dentry *, struct nameidata *, void *);
|
||||
void (*truncate) (struct inode *);
|
||||
int (*permission) (struct inode *, int, struct nameidata *);
|
||||
int (*check_acl)(struct inode *, int);
|
||||
int (*permission) (struct inode *, int, unsigned int);
|
||||
int (*check_acl)(struct inode *, int, unsigned int);
|
||||
int (*setattr) (struct dentry *, struct iattr *);
|
||||
int (*getattr) (struct vfsmount *, struct dentry *, struct kstat *);
|
||||
int (*setxattr) (struct dentry *, const char *,const void *,size_t,int);
|
||||
|
@ -73,7 +76,7 @@ follow_link: no
|
|||
put_link: no
|
||||
truncate: yes (see below)
|
||||
setattr: yes
|
||||
permission: no
|
||||
permission: no (may not block if called in rcu-walk mode)
|
||||
check_acl: no
|
||||
getattr: no
|
||||
setxattr: yes
|
||||
|
|
|
@ -1,174 +0,0 @@
|
|||
RCU-based dcache locking model
|
||||
==============================
|
||||
|
||||
On many workloads, the most common operation on dcache is to look up a
|
||||
dentry, given a parent dentry and the name of the child. Typically,
|
||||
for every open(), stat() etc., the dentry corresponding to the
|
||||
pathname will be looked up by walking the tree starting with the first
|
||||
component of the pathname and using that dentry along with the next
|
||||
component to look up the next level and so on. Since it is a frequent
|
||||
operation for workloads like multiuser environments and web servers,
|
||||
it is important to optimize this path.
|
||||
|
||||
Prior to 2.5.10, dcache_lock was acquired in d_lookup and thus in
|
||||
every component during path look-up. Since 2.5.10 onwards, fast-walk
|
||||
algorithm changed this by holding the dcache_lock at the beginning and
|
||||
walking as many cached path component dentries as possible. This
|
||||
significantly decreases the number of acquisition of
|
||||
dcache_lock. However it also increases the lock hold time
|
||||
significantly and affects performance in large SMP machines. Since
|
||||
2.5.62 kernel, dcache has been using a new locking model that uses RCU
|
||||
to make dcache look-up lock-free.
|
||||
|
||||
The current dcache locking model is not very different from the
|
||||
existing dcache locking model. Prior to 2.5.62 kernel, dcache_lock
|
||||
protected the hash chain, d_child, d_alias, d_lru lists as well as
|
||||
d_inode and several other things like mount look-up. RCU-based changes
|
||||
affect only the way the hash chain is protected. For everything else
|
||||
the dcache_lock must be taken for both traversing as well as
|
||||
updating. The hash chain updates too take the dcache_lock. The
|
||||
significant change is the way d_lookup traverses the hash chain, it
|
||||
doesn't acquire the dcache_lock for this and rely on RCU to ensure
|
||||
that the dentry has not been *freed*.
|
||||
|
||||
|
||||
Dcache locking details
|
||||
======================
|
||||
|
||||
For many multi-user workloads, open() and stat() on files are very
|
||||
frequently occurring operations. Both involve walking of path names to
|
||||
find the dentry corresponding to the concerned file. In 2.4 kernel,
|
||||
dcache_lock was held during look-up of each path component. Contention
|
||||
and cache-line bouncing of this global lock caused significant
|
||||
scalability problems. With the introduction of RCU in Linux kernel,
|
||||
this was worked around by making the look-up of path components during
|
||||
path walking lock-free.
|
||||
|
||||
|
||||
Safe lock-free look-up of dcache hash table
|
||||
===========================================
|
||||
|
||||
Dcache is a complex data structure with the hash table entries also
|
||||
linked together in other lists. In 2.4 kernel, dcache_lock protected
|
||||
all the lists. We applied RCU only on hash chain walking. The rest of
|
||||
the lists are still protected by dcache_lock. Some of the important
|
||||
changes are :
|
||||
|
||||
1. The deletion from hash chain is done using hlist_del_rcu() macro
|
||||
which doesn't initialize next pointer of the deleted dentry and
|
||||
this allows us to walk safely lock-free while a deletion is
|
||||
happening.
|
||||
|
||||
2. Insertion of a dentry into the hash table is done using
|
||||
hlist_add_head_rcu() which take care of ordering the writes - the
|
||||
writes to the dentry must be visible before the dentry is
|
||||
inserted. This works in conjunction with hlist_for_each_rcu(),
|
||||
which has since been replaced by hlist_for_each_entry_rcu(), while
|
||||
walking the hash chain. The only requirement is that all
|
||||
initialization to the dentry must be done before
|
||||
hlist_add_head_rcu() since we don't have dcache_lock protection
|
||||
while traversing the hash chain. This isn't different from the
|
||||
existing code.
|
||||
|
||||
3. The dentry looked up without holding dcache_lock by cannot be
|
||||
returned for walking if it is unhashed. It then may have a NULL
|
||||
d_inode or other bogosity since RCU doesn't protect the other
|
||||
fields in the dentry. We therefore use a flag DCACHE_UNHASHED to
|
||||
indicate unhashed dentries and use this in conjunction with a
|
||||
per-dentry lock (d_lock). Once looked up without the dcache_lock,
|
||||
we acquire the per-dentry lock (d_lock) and check if the dentry is
|
||||
unhashed. If so, the look-up is failed. If not, the reference count
|
||||
of the dentry is increased and the dentry is returned.
|
||||
|
||||
4. Once a dentry is looked up, it must be ensured during the path walk
|
||||
for that component it doesn't go away. In pre-2.5.10 code, this was
|
||||
done holding a reference to the dentry. dcache_rcu does the same.
|
||||
In some sense, dcache_rcu path walking looks like the pre-2.5.10
|
||||
version.
|
||||
|
||||
5. All dentry hash chain updates must take the dcache_lock as well as
|
||||
the per-dentry lock in that order. dput() does this to ensure that
|
||||
a dentry that has just been looked up in another CPU doesn't get
|
||||
deleted before dget() can be done on it.
|
||||
|
||||
6. There are several ways to do reference counting of RCU protected
|
||||
objects. One such example is in ipv4 route cache where deferred
|
||||
freeing (using call_rcu()) is done as soon as the reference count
|
||||
goes to zero. This cannot be done in the case of dentries because
|
||||
tearing down of dentries require blocking (dentry_iput()) which
|
||||
isn't supported from RCU callbacks. Instead, tearing down of
|
||||
dentries happen synchronously in dput(), but actual freeing happens
|
||||
later when RCU grace period is over. This allows safe lock-free
|
||||
walking of the hash chains, but a matched dentry may have been
|
||||
partially torn down. The checking of DCACHE_UNHASHED flag with
|
||||
d_lock held detects such dentries and prevents them from being
|
||||
returned from look-up.
|
||||
|
||||
|
||||
Maintaining POSIX rename semantics
|
||||
==================================
|
||||
|
||||
Since look-up of dentries is lock-free, it can race against a
|
||||
concurrent rename operation. For example, during rename of file A to
|
||||
B, look-up of either A or B must succeed. So, if look-up of B happens
|
||||
after A has been removed from the hash chain but not added to the new
|
||||
hash chain, it may fail. Also, a comparison while the name is being
|
||||
written concurrently by a rename may result in false positive matches
|
||||
violating rename semantics. Issues related to race with rename are
|
||||
handled as described below :
|
||||
|
||||
1. Look-up can be done in two ways - d_lookup() which is safe from
|
||||
simultaneous renames and __d_lookup() which is not. If
|
||||
__d_lookup() fails, it must be followed up by a d_lookup() to
|
||||
correctly determine whether a dentry is in the hash table or
|
||||
not. d_lookup() protects look-ups using a sequence lock
|
||||
(rename_lock).
|
||||
|
||||
2. The name associated with a dentry (d_name) may be changed if a
|
||||
rename is allowed to happen simultaneously. To avoid memcmp() in
|
||||
__d_lookup() go out of bounds due to a rename and false positive
|
||||
comparison, the name comparison is done while holding the
|
||||
per-dentry lock. This prevents concurrent renames during this
|
||||
operation.
|
||||
|
||||
3. Hash table walking during look-up may move to a different bucket as
|
||||
the current dentry is moved to a different bucket due to rename.
|
||||
But we use hlists in dcache hash table and they are
|
||||
null-terminated. So, even if a dentry moves to a different bucket,
|
||||
hash chain walk will terminate. [with a list_head list, it may not
|
||||
since termination is when the list_head in the original bucket is
|
||||
reached]. Since we redo the d_parent check and compare name while
|
||||
holding d_lock, lock-free look-up will not race against d_move().
|
||||
|
||||
4. There can be a theoretical race when a dentry keeps coming back to
|
||||
original bucket due to double moves. Due to this look-up may
|
||||
consider that it has never moved and can end up in a infinite loop.
|
||||
But this is not any worse that theoretical livelocks we already
|
||||
have in the kernel.
|
||||
|
||||
|
||||
Important guidelines for filesystem developers related to dcache_rcu
|
||||
====================================================================
|
||||
|
||||
1. Existing dcache interfaces (pre-2.5.62) exported to filesystem
|
||||
don't change. Only dcache internal implementation changes. However
|
||||
filesystems *must not* delete from the dentry hash chains directly
|
||||
using the list macros like allowed earlier. They must use dcache
|
||||
APIs like d_drop() or __d_drop() depending on the situation.
|
||||
|
||||
2. d_flags is now protected by a per-dentry lock (d_lock). All access
|
||||
to d_flags must be protected by it.
|
||||
|
||||
3. For a hashed dentry, checking of d_count needs to be protected by
|
||||
d_lock.
|
||||
|
||||
|
||||
Papers and other documentation on dcache locking
|
||||
================================================
|
||||
|
||||
1. Scaling dcache with RCU (http://linuxjournal.com/article.php?sid=7124).
|
||||
|
||||
2. http://lse.sourceforge.net/locking/dcache/dcache.html
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,382 @@
|
|||
Path walking and name lookup locking
|
||||
====================================
|
||||
|
||||
Path resolution is the finding a dentry corresponding to a path name string, by
|
||||
performing a path walk. Typically, for every open(), stat() etc., the path name
|
||||
will be resolved. Paths are resolved by walking the namespace tree, starting
|
||||
with the first component of the pathname (eg. root or cwd) with a known dentry,
|
||||
then finding the child of that dentry, which is named the next component in the
|
||||
path string. Then repeating the lookup from the child dentry and finding its
|
||||
child with the next element, and so on.
|
||||
|
||||
Since it is a frequent operation for workloads like multiuser environments and
|
||||
web servers, it is important to optimize this code.
|
||||
|
||||
Path walking synchronisation history:
|
||||
Prior to 2.5.10, dcache_lock was acquired in d_lookup (dcache hash lookup) and
|
||||
thus in every component during path look-up. Since 2.5.10 onwards, fast-walk
|
||||
algorithm changed this by holding the dcache_lock at the beginning and walking
|
||||
as many cached path component dentries as possible. This significantly
|
||||
decreases the number of acquisition of dcache_lock. However it also increases
|
||||
the lock hold time significantly and affects performance in large SMP machines.
|
||||
Since 2.5.62 kernel, dcache has been using a new locking model that uses RCU to
|
||||
make dcache look-up lock-free.
|
||||
|
||||
All the above algorithms required taking a lock and reference count on the
|
||||
dentry that was looked up, so that may be used as the basis for walking the
|
||||
next path element. This is inefficient and unscalable. It is inefficient
|
||||
because of the locks and atomic operations required for every dentry element
|
||||
slows things down. It is not scalable because many parallel applications that
|
||||
are path-walk intensive tend to do path lookups starting from a common dentry
|
||||
(usually, the root "/" or current working directory). So contention on these
|
||||
common path elements causes lock and cacheline queueing.
|
||||
|
||||
Since 2.6.38, RCU is used to make a significant part of the entire path walk
|
||||
(including dcache look-up) completely "store-free" (so, no locks, atomics, or
|
||||
even stores into cachelines of common dentries). This is known as "rcu-walk"
|
||||
path walking.
|
||||
|
||||
Path walking overview
|
||||
=====================
|
||||
|
||||
A name string specifies a start (root directory, cwd, fd-relative) and a
|
||||
sequence of elements (directory entry names), which together refer to a path in
|
||||
the namespace. A path is represented as a (dentry, vfsmount) tuple. The name
|
||||
elements are sub-strings, seperated by '/'.
|
||||
|
||||
Name lookups will want to find a particular path that a name string refers to
|
||||
(usually the final element, or parent of final element). This is done by taking
|
||||
the path given by the name's starting point (which we know in advance -- eg.
|
||||
current->fs->cwd or current->fs->root) as the first parent of the lookup. Then
|
||||
iteratively for each subsequent name element, look up the child of the current
|
||||
parent with the given name and if it is not the desired entry, make it the
|
||||
parent for the next lookup.
|
||||
|
||||
A parent, of course, must be a directory, and we must have appropriate
|
||||
permissions on the parent inode to be able to walk into it.
|
||||
|
||||
Turning the child into a parent for the next lookup requires more checks and
|
||||
procedures. Symlinks essentially substitute the symlink name for the target
|
||||
name in the name string, and require some recursive path walking. Mount points
|
||||
must be followed into (thus changing the vfsmount that subsequent path elements
|
||||
refer to), switching from the mount point path to the root of the particular
|
||||
mounted vfsmount. These behaviours are variously modified depending on the
|
||||
exact path walking flags.
|
||||
|
||||
Path walking then must, broadly, do several particular things:
|
||||
- find the start point of the walk;
|
||||
- perform permissions and validity checks on inodes;
|
||||
- perform dcache hash name lookups on (parent, name element) tuples;
|
||||
- traverse mount points;
|
||||
- traverse symlinks;
|
||||
- lookup and create missing parts of the path on demand.
|
||||
|
||||
Safe store-free look-up of dcache hash table
|
||||
============================================
|
||||
|
||||
Dcache name lookup
|
||||
------------------
|
||||
In order to lookup a dcache (parent, name) tuple, we take a hash on the tuple
|
||||
and use that to select a bucket in the dcache-hash table. The list of entries
|
||||
in that bucket is then walked, and we do a full comparison of each entry
|
||||
against our (parent, name) tuple.
|
||||
|
||||
The hash lists are RCU protected, so list walking is not serialised with
|
||||
concurrent updates (insertion, deletion from the hash). This is a standard RCU
|
||||
list application with the exception of renames, which will be covered below.
|
||||
|
||||
Parent and name members of a dentry, as well as its membership in the dcache
|
||||
hash, and its inode are protected by the per-dentry d_lock spinlock. A
|
||||
reference is taken on the dentry (while the fields are verified under d_lock),
|
||||
and this stabilises its d_inode pointer and actual inode. This gives a stable
|
||||
point to perform the next step of our path walk against.
|
||||
|
||||
These members are also protected by d_seq seqlock, although this offers
|
||||
read-only protection and no durability of results, so care must be taken when
|
||||
using d_seq for synchronisation (see seqcount based lookups, below).
|
||||
|
||||
Renames
|
||||
-------
|
||||
Back to the rename case. In usual RCU protected lists, the only operations that
|
||||
will happen to an object is insertion, and then eventually removal from the
|
||||
list. The object will not be reused until an RCU grace period is complete.
|
||||
This ensures the RCU list traversal primitives can run over the object without
|
||||
problems (see RCU documentation for how this works).
|
||||
|
||||
However when a dentry is renamed, its hash value can change, requiring it to be
|
||||
moved to a new hash list. Allocating and inserting a new alias would be
|
||||
expensive and also problematic for directory dentries. Latency would be far to
|
||||
high to wait for a grace period after removing the dentry and before inserting
|
||||
it in the new hash bucket. So what is done is to insert the dentry into the
|
||||
new list immediately.
|
||||
|
||||
However, when the dentry's list pointers are updated to point to objects in the
|
||||
new list before waiting for a grace period, this can result in a concurrent RCU
|
||||
lookup of the old list veering off into the new (incorrect) list and missing
|
||||
the remaining dentries on the list.
|
||||
|
||||
There is no fundamental problem with walking down the wrong list, because the
|
||||
dentry comparisons will never match. However it is fatal to miss a matching
|
||||
dentry. So a seqlock is used to detect when a rename has occurred, and so the
|
||||
lookup can be retried.
|
||||
|
||||
1 2 3
|
||||
+---+ +---+ +---+
|
||||
hlist-->| N-+->| N-+->| N-+->
|
||||
head <--+-P |<-+-P |<-+-P |
|
||||
+---+ +---+ +---+
|
||||
|
||||
Rename of dentry 2 may require it deleted from the above list, and inserted
|
||||
into a new list. Deleting 2 gives the following list.
|
||||
|
||||
1 3
|
||||
+---+ +---+ (don't worry, the longer pointers do not
|
||||
hlist-->| N-+-------->| N-+-> impose a measurable performance overhead
|
||||
head <--+-P |<--------+-P | on modern CPUs)
|
||||
+---+ +---+
|
||||
^ 2 ^
|
||||
| +---+ |
|
||||
| | N-+----+
|
||||
+----+-P |
|
||||
+---+
|
||||
|
||||
This is a standard RCU-list deletion, which leaves the deleted object's
|
||||
pointers intact, so a concurrent list walker that is currently looking at
|
||||
object 2 will correctly continue to object 3 when it is time to traverse the
|
||||
next object.
|
||||
|
||||
However, when inserting object 2 onto a new list, we end up with this:
|
||||
|
||||
1 3
|
||||
+---+ +---+
|
||||
hlist-->| N-+-------->| N-+->
|
||||
head <--+-P |<--------+-P |
|
||||
+---+ +---+
|
||||
2
|
||||
+---+
|
||||
| N-+---->
|
||||
<----+-P |
|
||||
+---+
|
||||
|
||||
Because we didn't wait for a grace period, there may be a concurrent lookup
|
||||
still at 2. Now when it follows 2's 'next' pointer, it will walk off into
|
||||
another list without ever having checked object 3.
|
||||
|
||||
A related, but distinctly different, issue is that of rename atomicity versus
|
||||
lookup operations. If a file is renamed from 'A' to 'B', a lookup must only
|
||||
find either 'A' or 'B'. So if a lookup of 'A' returns NULL, a subsequent lookup
|
||||
of 'B' must succeed (note the reverse is not true).
|
||||
|
||||
Between deleting the dentry from the old hash list, and inserting it on the new
|
||||
hash list, a lookup may find neither 'A' nor 'B' matching the dentry. The same
|
||||
rename seqlock is also used to cover this race in much the same way, by
|
||||
retrying a negative lookup result if a rename was in progress.
|
||||
|
||||
Seqcount based lookups
|
||||
----------------------
|
||||
In refcount based dcache lookups, d_lock is used to serialise access to
|
||||
the dentry, stabilising it while comparing its name and parent and then
|
||||
taking a reference count (the reference count then gives a stable place to
|
||||
start the next part of the path walk from).
|
||||
|
||||
As explained above, we would like to do path walking without taking locks or
|
||||
reference counts on intermediate dentries along the path. To do this, a per
|
||||
dentry seqlock (d_seq) is used to take a "coherent snapshot" of what the dentry
|
||||
looks like (its name, parent, and inode). That snapshot is then used to start
|
||||
the next part of the path walk. When loading the coherent snapshot under d_seq,
|
||||
care must be taken to load the members up-front, and use those pointers rather
|
||||
than reloading from the dentry later on (otherwise we'd have interesting things
|
||||
like d_inode going NULL underneath us, if the name was unlinked).
|
||||
|
||||
Also important is to avoid performing any destructive operations (pretty much:
|
||||
no non-atomic stores to shared data), and to recheck the seqcount when we are
|
||||
"done" with the operation. Retry or abort if the seqcount does not match.
|
||||
Avoiding destructive or changing operations means we can easily unwind from
|
||||
failure.
|
||||
|
||||
What this means is that a caller, provided they are holding RCU lock to
|
||||
protect the dentry object from disappearing, can perform a seqcount based
|
||||
lookup which does not increment the refcount on the dentry or write to
|
||||
it in any way. This returned dentry can be used for subsequent operations,
|
||||
provided that d_seq is rechecked after that operation is complete.
|
||||
|
||||
Inodes are also rcu freed, so the seqcount lookup dentry's inode may also be
|
||||
queried for permissions.
|
||||
|
||||
With this two parts of the puzzle, we can do path lookups without taking
|
||||
locks or refcounts on dentry elements.
|
||||
|
||||
RCU-walk path walking design
|
||||
============================
|
||||
|
||||
Path walking code now has two distinct modes, ref-walk and rcu-walk. ref-walk
|
||||
is the traditional[*] way of performing dcache lookups using d_lock to
|
||||
serialise concurrent modifications to the dentry and take a reference count on
|
||||
it. ref-walk is simple and obvious, and may sleep, take locks, etc while path
|
||||
walking is operating on each dentry. rcu-walk uses seqcount based dentry
|
||||
lookups, and can perform lookup of intermediate elements without any stores to
|
||||
shared data in the dentry or inode. rcu-walk can not be applied to all cases,
|
||||
eg. if the filesystem must sleep or perform non trivial operations, rcu-walk
|
||||
must be switched to ref-walk mode.
|
||||
|
||||
[*] RCU is still used for the dentry hash lookup in ref-walk, but not the full
|
||||
path walk.
|
||||
|
||||
Where ref-walk uses a stable, refcounted ``parent'' to walk the remaining
|
||||
path string, rcu-walk uses a d_seq protected snapshot. When looking up a
|
||||
child of this parent snapshot, we open d_seq critical section on the child
|
||||
before closing d_seq critical section on the parent. This gives an interlocking
|
||||
ladder of snapshots to walk down.
|
||||
|
||||
|
||||
proc 101
|
||||
/----------------\
|
||||
/ comm: "vi" \
|
||||
/ fs.root: dentry0 \
|
||||
\ fs.cwd: dentry2 /
|
||||
\ /
|
||||
\----------------/
|
||||
|
||||
So when vi wants to open("/home/npiggin/test.c", O_RDWR), then it will
|
||||
start from current->fs->root, which is a pinned dentry. Alternatively,
|
||||
"./test.c" would start from cwd; both names refer to the same path in
|
||||
the context of proc101.
|
||||
|
||||
dentry 0
|
||||
+---------------------+ rcu-walk begins here, we note d_seq, check the
|
||||
| name: "/" | inode's permission, and then look up the next
|
||||
| inode: 10 | path element which is "home"...
|
||||
| children:"home", ...|
|
||||
+---------------------+
|
||||
|
|
||||
dentry 1 V
|
||||
+---------------------+ ... which brings us here. We find dentry1 via
|
||||
| name: "home" | hash lookup, then note d_seq and compare name
|
||||
| inode: 678 | string and parent pointer. When we have a match,
|
||||
| children:"npiggin" | we now recheck the d_seq of dentry0. Then we
|
||||
+---------------------+ check inode and look up the next element.
|
||||
|
|
||||
dentry2 V
|
||||
+---------------------+ Note: if dentry0 is now modified, lookup is
|
||||
| name: "npiggin" | not necessarily invalid, so we need only keep a
|
||||
| inode: 543 | parent for d_seq verification, and grandparents
|
||||
| children:"a.c", ... | can be forgotten.
|
||||
+---------------------+
|
||||
|
|
||||
dentry3 V
|
||||
+---------------------+ At this point we have our destination dentry.
|
||||
| name: "a.c" | We now take its d_lock, verify d_seq of this
|
||||
| inode: 14221 | dentry. If that checks out, we can increment
|
||||
| children:NULL | its refcount because we're holding d_lock.
|
||||
+---------------------+
|
||||
|
||||
Taking a refcount on a dentry from rcu-walk mode, by taking its d_lock,
|
||||
re-checking its d_seq, and then incrementing its refcount is called
|
||||
"dropping rcu" or dropping from rcu-walk into ref-walk mode.
|
||||
|
||||
It is, in some sense, a bit of a house of cards. If the seqcount check of the
|
||||
parent snapshot fails, the house comes down, because we had closed the d_seq
|
||||
section on the grandparent, so we have nothing left to stand on. In that case,
|
||||
the path walk must be fully restarted (which we do in ref-walk mode, to avoid
|
||||
live locks). It is costly to have a full restart, but fortunately they are
|
||||
quite rare.
|
||||
|
||||
When we reach a point where sleeping is required, or a filesystem callout
|
||||
requires ref-walk, then instead of restarting the walk, we attempt to drop rcu
|
||||
at the last known good dentry we have. Avoiding a full restart in ref-walk in
|
||||
these cases is fundamental for performance and scalability because blocking
|
||||
operations such as creates and unlinks are not uncommon.
|
||||
|
||||
The detailed design for rcu-walk is like this:
|
||||
* LOOKUP_RCU is set in nd->flags, which distinguishes rcu-walk from ref-walk.
|
||||
* Take the RCU lock for the entire path walk, starting with the acquiring
|
||||
of the starting path (eg. root/cwd/fd-path). So now dentry refcounts are
|
||||
not required for dentry persistence.
|
||||
* synchronize_rcu is called when unregistering a filesystem, so we can
|
||||
access d_ops and i_ops during rcu-walk.
|
||||
* Similarly take the vfsmount lock for the entire path walk. So now mnt
|
||||
refcounts are not required for persistence. Also we are free to perform mount
|
||||
lookups, and to assume dentry mount points and mount roots are stable up and
|
||||
down the path.
|
||||
* Have a per-dentry seqlock to protect the dentry name, parent, and inode,
|
||||
so we can load this tuple atomically, and also check whether any of its
|
||||
members have changed.
|
||||
* Dentry lookups (based on parent, candidate string tuple) recheck the parent
|
||||
sequence after the child is found in case anything changed in the parent
|
||||
during the path walk.
|
||||
* inode is also RCU protected so we can load d_inode and use the inode for
|
||||
limited things.
|
||||
* i_mode, i_uid, i_gid can be tested for exec permissions during path walk.
|
||||
* i_op can be loaded.
|
||||
* When the destination dentry is reached, drop rcu there (ie. take d_lock,
|
||||
verify d_seq, increment refcount).
|
||||
* If seqlock verification fails anywhere along the path, do a full restart
|
||||
of the path lookup in ref-walk mode. -ECHILD tends to be used (for want of
|
||||
a better errno) to signal an rcu-walk failure.
|
||||
|
||||
The cases where rcu-walk cannot continue are:
|
||||
* NULL dentry (ie. any uncached path element)
|
||||
* Following links
|
||||
|
||||
It may be possible eventually to make following links rcu-walk aware.
|
||||
|
||||
Uncached path elements will always require dropping to ref-walk mode, at the
|
||||
very least because i_mutex needs to be grabbed, and objects allocated.
|
||||
|
||||
Final note:
|
||||
"store-free" path walking is not strictly store free. We take vfsmount lock
|
||||
and refcounts (both of which can be made per-cpu), and we also store to the
|
||||
stack (which is essentially CPU-local), and we also have to take locks and
|
||||
refcount on final dentry.
|
||||
|
||||
The point is that shared data, where practically possible, is not locked
|
||||
or stored into. The result is massive improvements in performance and
|
||||
scalability of path resolution.
|
||||
|
||||
|
||||
Interesting statistics
|
||||
======================
|
||||
|
||||
The following table gives rcu lookup statistics for a few simple workloads
|
||||
(2s12c24t Westmere, debian non-graphical system). Ungraceful are attempts to
|
||||
drop rcu that fail due to d_seq failure and requiring the entire path lookup
|
||||
again. Other cases are successful rcu-drops that are required before the final
|
||||
element, nodentry for missing dentry, revalidate for filesystem revalidate
|
||||
routine requiring rcu drop, permission for permission check requiring drop,
|
||||
and link for symlink traversal requiring drop.
|
||||
|
||||
rcu-lookups restart nodentry link revalidate permission
|
||||
bootup 47121 0 4624 1010 10283 7852
|
||||
dbench 25386793 0 6778659(26.7%) 55 549 1156
|
||||
kbuild 2696672 10 64442(2.3%) 108764(4.0%) 1 1590
|
||||
git diff 39605 0 28 2 0 106
|
||||
vfstest 24185492 4945 708725(2.9%) 1076136(4.4%) 0 2651
|
||||
|
||||
What this shows is that failed rcu-walk lookups, ie. ones that are restarted
|
||||
entirely with ref-walk, are quite rare. Even the "vfstest" case which
|
||||
specifically has concurrent renames/mkdir/rmdir/ creat/unlink/etc to excercise
|
||||
such races is not showing a huge amount of restarts.
|
||||
|
||||
Dropping from rcu-walk to ref-walk mean that we have encountered a dentry where
|
||||
the reference count needs to be taken for some reason. This is either because
|
||||
we have reached the target of the path walk, or because we have encountered a
|
||||
condition that can't be resolved in rcu-walk mode. Ideally, we drop rcu-walk
|
||||
only when we have reached the target dentry, so the other statistics show where
|
||||
this does not happen.
|
||||
|
||||
Note that a graceful drop from rcu-walk mode due to something such as the
|
||||
dentry not existing (which can be common) is not necessarily a failure of
|
||||
rcu-walk scheme, because some elements of the path may have been walked in
|
||||
rcu-walk mode. The further we get from common path elements (such as cwd or
|
||||
root), the less contended the dentry is likely to be. The closer we are to
|
||||
common path elements, the more likely they will exist in dentry cache.
|
||||
|
||||
|
||||
Papers and other documentation on dcache locking
|
||||
================================================
|
||||
|
||||
1. Scaling dcache with RCU (http://linuxjournal.com/article.php?sid=7124).
|
||||
|
||||
2. http://lse.sourceforge.net/locking/dcache/dcache.html
|
||||
|
||||
|
|
@ -216,7 +216,6 @@ had ->revalidate()) add calls in ->follow_link()/->readlink().
|
|||
->d_parent changes are not protected by BKL anymore. Read access is safe
|
||||
if at least one of the following is true:
|
||||
* filesystem has no cross-directory rename()
|
||||
* dcache_lock is held
|
||||
* we know that parent had been locked (e.g. we are looking at
|
||||
->d_parent of ->lookup() argument).
|
||||
* we are called from ->rename().
|
||||
|
@ -318,3 +317,71 @@ if it's zero is not *and* *never* *had* *been* enough. Final unlink() and iput(
|
|||
may happen while the inode is in the middle of ->write_inode(); e.g. if you blindly
|
||||
free the on-disk inode, you may end up doing that while ->write_inode() is writing
|
||||
to it.
|
||||
|
||||
---
|
||||
[mandatory]
|
||||
|
||||
.d_delete() now only advises the dcache as to whether or not to cache
|
||||
unreferenced dentries, and is now only called when the dentry refcount goes to
|
||||
0. Even on 0 refcount transition, it must be able to tolerate being called 0,
|
||||
1, or more times (eg. constant, idempotent).
|
||||
|
||||
---
|
||||
[mandatory]
|
||||
|
||||
.d_compare() calling convention and locking rules are significantly
|
||||
changed. Read updated documentation in Documentation/filesystems/vfs.txt (and
|
||||
look at examples of other filesystems) for guidance.
|
||||
|
||||
---
|
||||
[mandatory]
|
||||
|
||||
.d_hash() calling convention and locking rules are significantly
|
||||
changed. Read updated documentation in Documentation/filesystems/vfs.txt (and
|
||||
look at examples of other filesystems) for guidance.
|
||||
|
||||
---
|
||||
[mandatory]
|
||||
dcache_lock is gone, replaced by fine grained locks. See fs/dcache.c
|
||||
for details of what locks to replace dcache_lock with in order to protect
|
||||
particular things. Most of the time, a filesystem only needs ->d_lock, which
|
||||
protects *all* the dcache state of a given dentry.
|
||||
|
||||
--
|
||||
[mandatory]
|
||||
|
||||
Filesystems must RCU-free their inodes, if they can have been accessed
|
||||
via rcu-walk path walk (basically, if the file can have had a path name in the
|
||||
vfs namespace).
|
||||
|
||||
i_dentry and i_rcu share storage in a union, and the vfs expects
|
||||
i_dentry to be reinitialized before it is freed, so an:
|
||||
|
||||
INIT_LIST_HEAD(&inode->i_dentry);
|
||||
|
||||
must be done in the RCU callback.
|
||||
|
||||
--
|
||||
[recommended]
|
||||
vfs now tries to do path walking in "rcu-walk mode", which avoids
|
||||
atomic operations and scalability hazards on dentries and inodes (see
|
||||
Documentation/filesystems/path-walk.txt). d_hash and d_compare changes (above)
|
||||
are examples of the changes required to support this. For more complex
|
||||
filesystem callbacks, the vfs drops out of rcu-walk mode before the fs call, so
|
||||
no changes are required to the filesystem. However, this is costly and loses
|
||||
the benefits of rcu-walk mode. We will begin to add filesystem callbacks that
|
||||
are rcu-walk aware, shown below. Filesystems should take advantage of this
|
||||
where possible.
|
||||
|
||||
--
|
||||
[mandatory]
|
||||
d_revalidate is a callback that is made on every path element (if
|
||||
the filesystem provides it), which requires dropping out of rcu-walk mode. This
|
||||
may now be called in rcu-walk mode (nd->flags & LOOKUP_RCU). -ECHILD should be
|
||||
returned if the filesystem cannot handle rcu-walk. See
|
||||
Documentation/filesystems/vfs.txt for more details.
|
||||
|
||||
permission and check_acl are inode permission checks that are called
|
||||
on many or all directory inodes on the way down a path walk (to check for
|
||||
exec permission). These must now be rcu-walk aware (flags & IPERM_RCU). See
|
||||
Documentation/filesystems/vfs.txt for more details.
|
||||
|
|
|
@ -1181,6 +1181,30 @@ Table 1-12: Files in /proc/fs/ext4/<devname>
|
|||
mb_groups details of multiblock allocator buddy cache of free blocks
|
||||
..............................................................................
|
||||
|
||||
2.0 /proc/consoles
|
||||
------------------
|
||||
Shows registered system console lines.
|
||||
|
||||
To see which character device lines are currently used for the system console
|
||||
/dev/console, you may simply look into the file /proc/consoles:
|
||||
|
||||
> cat /proc/consoles
|
||||
tty0 -WU (ECp) 4:7
|
||||
ttyS0 -W- (Ep) 4:64
|
||||
|
||||
The columns are:
|
||||
|
||||
device name of the device
|
||||
operations R = can do read operations
|
||||
W = can do write operations
|
||||
U = can do unblank
|
||||
flags E = it is enabled
|
||||
C = it is prefered console
|
||||
B = it is primary boot console
|
||||
p = it is used for printk buffer
|
||||
b = it is not a TTY but a Braille device
|
||||
a = it is safe to use when cpu is offline
|
||||
major:minor major and minor number of the device separated by a colon
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
Summary
|
||||
|
|
|
@ -325,7 +325,8 @@ struct inode_operations {
|
|||
void * (*follow_link) (struct dentry *, struct nameidata *);
|
||||
void (*put_link) (struct dentry *, struct nameidata *, void *);
|
||||
void (*truncate) (struct inode *);
|
||||
int (*permission) (struct inode *, int, struct nameidata *);
|
||||
int (*permission) (struct inode *, int, unsigned int);
|
||||
int (*check_acl)(struct inode *, int, unsigned int);
|
||||
int (*setattr) (struct dentry *, struct iattr *);
|
||||
int (*getattr) (struct vfsmount *mnt, struct dentry *, struct kstat *);
|
||||
int (*setxattr) (struct dentry *, const char *,const void *,size_t,int);
|
||||
|
@ -414,6 +415,13 @@ otherwise noted.
|
|||
permission: called by the VFS to check for access rights on a POSIX-like
|
||||
filesystem.
|
||||
|
||||
May be called in rcu-walk mode (flags & IPERM_RCU). If in rcu-walk
|
||||
mode, the filesystem must check the permission without blocking or
|
||||
storing to the inode.
|
||||
|
||||
If a situation is encountered that rcu-walk cannot handle, return
|
||||
-ECHILD and it will be called again in ref-walk mode.
|
||||
|
||||
setattr: called by the VFS to set attributes for a file. This method
|
||||
is called by chmod(2) and related system calls.
|
||||
|
||||
|
@ -847,9 +855,12 @@ defined:
|
|||
|
||||
struct dentry_operations {
|
||||
int (*d_revalidate)(struct dentry *, struct nameidata *);
|
||||
int (*d_hash) (struct dentry *, struct qstr *);
|
||||
int (*d_compare) (struct dentry *, struct qstr *, struct qstr *);
|
||||
int (*d_delete)(struct dentry *);
|
||||
int (*d_hash)(const struct dentry *, const struct inode *,
|
||||
struct qstr *);
|
||||
int (*d_compare)(const struct dentry *, const struct inode *,
|
||||
const struct dentry *, const struct inode *,
|
||||
unsigned int, const char *, const struct qstr *);
|
||||
int (*d_delete)(const struct dentry *);
|
||||
void (*d_release)(struct dentry *);
|
||||
void (*d_iput)(struct dentry *, struct inode *);
|
||||
char *(*d_dname)(struct dentry *, char *, int);
|
||||
|
@ -860,13 +871,45 @@ struct dentry_operations {
|
|||
dcache. Most filesystems leave this as NULL, because all their
|
||||
dentries in the dcache are valid
|
||||
|
||||
d_hash: called when the VFS adds a dentry to the hash table
|
||||
d_revalidate may be called in rcu-walk mode (nd->flags & LOOKUP_RCU).
|
||||
If in rcu-walk mode, the filesystem must revalidate the dentry without
|
||||
blocking or storing to the dentry, d_parent and d_inode should not be
|
||||
used without care (because they can go NULL), instead nd->inode should
|
||||
be used.
|
||||
|
||||
d_compare: called when a dentry should be compared with another
|
||||
If a situation is encountered that rcu-walk cannot handle, return
|
||||
-ECHILD and it will be called again in ref-walk mode.
|
||||
|
||||
d_delete: called when the last reference to a dentry is
|
||||
deleted. This means no-one is using the dentry, however it is
|
||||
still valid and in the dcache
|
||||
d_hash: called when the VFS adds a dentry to the hash table. The first
|
||||
dentry passed to d_hash is the parent directory that the name is
|
||||
to be hashed into. The inode is the dentry's inode.
|
||||
|
||||
Same locking and synchronisation rules as d_compare regarding
|
||||
what is safe to dereference etc.
|
||||
|
||||
d_compare: called to compare a dentry name with a given name. The first
|
||||
dentry is the parent of the dentry to be compared, the second is
|
||||
the parent's inode, then the dentry and inode (may be NULL) of the
|
||||
child dentry. len and name string are properties of the dentry to be
|
||||
compared. qstr is the name to compare it with.
|
||||
|
||||
Must be constant and idempotent, and should not take locks if
|
||||
possible, and should not or store into the dentry or inodes.
|
||||
Should not dereference pointers outside the dentry or inodes without
|
||||
lots of care (eg. d_parent, d_inode, d_name should not be used).
|
||||
|
||||
However, our vfsmount is pinned, and RCU held, so the dentries and
|
||||
inodes won't disappear, neither will our sb or filesystem module.
|
||||
->i_sb and ->d_sb may be used.
|
||||
|
||||
It is a tricky calling convention because it needs to be called under
|
||||
"rcu-walk", ie. without any locks or references on things.
|
||||
|
||||
d_delete: called when the last reference to a dentry is dropped and the
|
||||
dcache is deciding whether or not to cache it. Return 1 to delete
|
||||
immediately, or 0 to cache the dentry. Default is NULL which means to
|
||||
always cache a reachable dentry. d_delete must be constant and
|
||||
idempotent.
|
||||
|
||||
d_release: called when a dentry is really deallocated
|
||||
|
||||
|
@ -910,14 +953,11 @@ manipulate dentries:
|
|||
the usage count)
|
||||
|
||||
dput: close a handle for a dentry (decrements the usage count). If
|
||||
the usage count drops to 0, the "d_delete" method is called
|
||||
and the dentry is placed on the unused list if the dentry is
|
||||
still in its parents hash list. Putting the dentry on the
|
||||
unused list just means that if the system needs some RAM, it
|
||||
goes through the unused list of dentries and deallocates them.
|
||||
If the dentry has already been unhashed and the usage count
|
||||
drops to 0, in this case the dentry is deallocated after the
|
||||
"d_delete" method is called
|
||||
the usage count drops to 0, and the dentry is still in its
|
||||
parent's hash, the "d_delete" method is called to check whether
|
||||
it should be cached. If it should not be cached, or if the dentry
|
||||
is not hashed, it is deleted. Otherwise cached dentries are put
|
||||
into an LRU list to be reclaimed on memory shortage.
|
||||
|
||||
d_drop: this unhashes a dentry from its parents hash list. A
|
||||
subsequent call to dput() will deallocate the dentry if its
|
||||
|
|
|
@ -0,0 +1,34 @@
|
|||
Kernel driver ds620
|
||||
===================
|
||||
|
||||
Supported chips:
|
||||
* Dallas Semiconductor DS620
|
||||
Prefix: 'ds620'
|
||||
Datasheet: Publicly available at the Dallas Semiconductor website
|
||||
http://www.dalsemi.com/
|
||||
|
||||
Authors:
|
||||
Roland Stigge <stigge@antcom.de>
|
||||
based on ds1621.c by
|
||||
Christian W. Zuckschwerdt <zany@triq.net>
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
The DS620 is a (one instance) digital thermometer and thermostat. It has both
|
||||
high and low temperature limits which can be user defined (i.e. programmed
|
||||
into non-volatile on-chip registers). Temperature range is -55 degree Celsius
|
||||
to +125. Between 0 and 70 degree Celsius, accuracy is 0.5 Kelvin. The value
|
||||
returned via sysfs displays post decimal positions.
|
||||
|
||||
The thermostat function works as follows: When configured via platform_data
|
||||
(struct ds620_platform_data) .pomode == 0 (default), the thermostat output pin
|
||||
PO is always low. If .pomode == 1, the thermostat is in PO_LOW mode. I.e., the
|
||||
output pin PO becomes active when the temperature falls below temp1_min and
|
||||
stays active until the temperature goes above temp1_max.
|
||||
|
||||
Likewise, with .pomode == 2, the thermostat is in PO_HIGH mode. I.e., the PO
|
||||
output pin becomes active when the temperature goes above temp1_max and stays
|
||||
active until the temperature falls below temp1_min.
|
||||
|
||||
The PO output pin of the DS620 operates active-low.
|
|
@ -0,0 +1,49 @@
|
|||
Kernel driver sht21
|
||||
===================
|
||||
|
||||
Supported chips:
|
||||
* Sensirion SHT21
|
||||
Prefix: 'sht21'
|
||||
Addresses scanned: none
|
||||
Datasheet: Publicly available at the Sensirion website
|
||||
http://www.sensirion.com/en/pdf/product_information/Datasheet-humidity-sensor-SHT21.pdf
|
||||
|
||||
* Sensirion SHT25
|
||||
Prefix: 'sht21'
|
||||
Addresses scanned: none
|
||||
Datasheet: Publicly available at the Sensirion website
|
||||
http://www.sensirion.com/en/pdf/product_information/Datasheet-humidity-sensor-SHT25.pdf
|
||||
|
||||
Author:
|
||||
Urs Fleisch <urs.fleisch@sensirion.com>
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
The SHT21 and SHT25 are humidity and temperature sensors in a DFN package of
|
||||
only 3 x 3 mm footprint and 1.1 mm height. The difference between the two
|
||||
devices is the higher level of precision of the SHT25 (1.8% relative humidity,
|
||||
0.2 degree Celsius) compared with the SHT21 (2.0% relative humidity,
|
||||
0.3 degree Celsius).
|
||||
|
||||
The devices communicate with the I2C protocol. All sensors are set to the same
|
||||
I2C address 0x40, so an entry with I2C_BOARD_INFO("sht21", 0x40) can be used
|
||||
in the board setup code.
|
||||
|
||||
sysfs-Interface
|
||||
---------------
|
||||
|
||||
temp1_input - temperature input
|
||||
humidity1_input - humidity input
|
||||
|
||||
Notes
|
||||
-----
|
||||
|
||||
The driver uses the default resolution settings of 12 bit for humidity and 14
|
||||
bit for temperature, which results in typical measurement times of 22 ms for
|
||||
humidity and 66 ms for temperature. To keep self heating below 0.1 degree
|
||||
Celsius, the device should not be active for more than 10% of the time,
|
||||
e.g. maximum two measurements per second at the given resolution.
|
||||
|
||||
Different resolutions, the on-chip heater, using the CRC checksum and reading
|
||||
the serial number are not supported yet.
|
|
@ -384,10 +384,20 @@ curr[1-*]_min Current min value.
|
|||
Unit: milliampere
|
||||
RW
|
||||
|
||||
curr[1-*]_lcrit Current critical low value
|
||||
Unit: milliampere
|
||||
RW
|
||||
|
||||
curr[1-*]_crit Current critical high value.
|
||||
Unit: milliampere
|
||||
RW
|
||||
|
||||
curr[1-*]_input Current input value
|
||||
Unit: milliampere
|
||||
RO
|
||||
|
||||
Also see the Alarms section for status flags associated with currents.
|
||||
|
||||
*********
|
||||
* Power *
|
||||
*********
|
||||
|
@ -450,13 +460,6 @@ power[1-*]_accuracy Accuracy of the power meter.
|
|||
Unit: Percent
|
||||
RO
|
||||
|
||||
power[1-*]_alarm 1 if the system is drawing more power than the
|
||||
cap allows; 0 otherwise. A poll notification is
|
||||
sent to this file when the power use exceeds the
|
||||
cap. This file only appears if the cap is known
|
||||
to be enforced by hardware.
|
||||
RO
|
||||
|
||||
power[1-*]_cap If power use rises above this limit, the
|
||||
system should take action to reduce power use.
|
||||
A poll notification is sent to this file if the
|
||||
|
@ -479,6 +482,20 @@ power[1-*]_cap_min Minimum cap that can be set.
|
|||
Unit: microWatt
|
||||
RO
|
||||
|
||||
power[1-*]_max Maximum power.
|
||||
Unit: microWatt
|
||||
RW
|
||||
|
||||
power[1-*]_crit Critical maximum power.
|
||||
If power rises to or above this limit, the
|
||||
system is expected take drastic action to reduce
|
||||
power consumption, such as a system shutdown or
|
||||
a forced powerdown of some devices.
|
||||
Unit: microWatt
|
||||
RW
|
||||
|
||||
Also see the Alarms section for status flags associated with power readings.
|
||||
|
||||
**********
|
||||
* Energy *
|
||||
**********
|
||||
|
@ -488,6 +505,15 @@ energy[1-*]_input Cumulative energy use
|
|||
RO
|
||||
|
||||
|
||||
************
|
||||
* Humidity *
|
||||
************
|
||||
|
||||
humidity[1-*]_input Humidity
|
||||
Unit: milli-percent (per cent mille, pcm)
|
||||
RO
|
||||
|
||||
|
||||
**********
|
||||
* Alarms *
|
||||
**********
|
||||
|
@ -501,6 +527,7 @@ implementation.
|
|||
|
||||
in[0-*]_alarm
|
||||
curr[1-*]_alarm
|
||||
power[1-*]_alarm
|
||||
fan[1-*]_alarm
|
||||
temp[1-*]_alarm
|
||||
Channel alarm
|
||||
|
@ -512,12 +539,20 @@ OR
|
|||
|
||||
in[0-*]_min_alarm
|
||||
in[0-*]_max_alarm
|
||||
in[0-*]_lcrit_alarm
|
||||
in[0-*]_crit_alarm
|
||||
curr[1-*]_min_alarm
|
||||
curr[1-*]_max_alarm
|
||||
curr[1-*]_lcrit_alarm
|
||||
curr[1-*]_crit_alarm
|
||||
power[1-*]_cap_alarm
|
||||
power[1-*]_max_alarm
|
||||
power[1-*]_crit_alarm
|
||||
fan[1-*]_min_alarm
|
||||
fan[1-*]_max_alarm
|
||||
temp[1-*]_min_alarm
|
||||
temp[1-*]_max_alarm
|
||||
temp[1-*]_lcrit_alarm
|
||||
temp[1-*]_crit_alarm
|
||||
temp[1-*]_emergency_alarm
|
||||
Limit alarm
|
||||
|
|
|
@ -0,0 +1,115 @@
|
|||
Kernel driver for CMA3000-D0x
|
||||
============================
|
||||
|
||||
Supported chips:
|
||||
* VTI CMA3000-D0x
|
||||
Datasheet:
|
||||
CMA3000-D0X Product Family Specification 8281000A.02.pdf
|
||||
<http://www.vti.fi/en/>
|
||||
|
||||
Author: Hemanth V <hemanthv@ti.com>
|
||||
|
||||
|
||||
Description
|
||||
-----------
|
||||
CMA3000 Tri-axis accelerometer supports Motion detect, Measurement and
|
||||
Free fall modes.
|
||||
|
||||
Motion Detect Mode: Its the low power mode where interrupts are generated only
|
||||
when motion exceeds the defined thresholds.
|
||||
|
||||
Measurement Mode: This mode is used to read the acceleration data on X,Y,Z
|
||||
axis and supports 400, 100, 40 Hz sample frequency.
|
||||
|
||||
Free fall Mode: This mode is intended to save system resources.
|
||||
|
||||
Threshold values: Chip supports defining threshold values for above modes
|
||||
which includes time and g value. Refer product specifications for more details.
|
||||
|
||||
CMA3000 chip supports mutually exclusive I2C and SPI interfaces for
|
||||
communication, currently the driver supports I2C based communication only.
|
||||
Initial configuration for bus mode is set in non volatile memory and can later
|
||||
be modified through bus interface command.
|
||||
|
||||
Driver reports acceleration data through input subsystem. It generates ABS_MISC
|
||||
event with value 1 when free fall is detected.
|
||||
|
||||
Platform data need to be configured for initial default values.
|
||||
|
||||
Platform Data
|
||||
-------------
|
||||
fuzz_x: Noise on X Axis
|
||||
|
||||
fuzz_y: Noise on Y Axis
|
||||
|
||||
fuzz_z: Noise on Z Axis
|
||||
|
||||
g_range: G range in milli g i.e 2000 or 8000
|
||||
|
||||
mode: Default Operating mode
|
||||
|
||||
mdthr: Motion detect g range threshold value
|
||||
|
||||
mdfftmr: Motion detect and free fall time threshold value
|
||||
|
||||
ffthr: Free fall g range threshold value
|
||||
|
||||
Input Interface
|
||||
--------------
|
||||
Input driver version is 1.0.0
|
||||
Input device ID: bus 0x18 vendor 0x0 product 0x0 version 0x0
|
||||
Input device name: "cma3000-accelerometer"
|
||||
Supported events:
|
||||
Event type 0 (Sync)
|
||||
Event type 3 (Absolute)
|
||||
Event code 0 (X)
|
||||
Value 47
|
||||
Min -8000
|
||||
Max 8000
|
||||
Fuzz 200
|
||||
Event code 1 (Y)
|
||||
Value -28
|
||||
Min -8000
|
||||
Max 8000
|
||||
Fuzz 200
|
||||
Event code 2 (Z)
|
||||
Value 905
|
||||
Min -8000
|
||||
Max 8000
|
||||
Fuzz 200
|
||||
Event code 40 (Misc)
|
||||
Value 0
|
||||
Min 0
|
||||
Max 1
|
||||
Event type 4 (Misc)
|
||||
|
||||
|
||||
Register/Platform parameters Description
|
||||
----------------------------------------
|
||||
|
||||
mode:
|
||||
0: power down mode
|
||||
1: 100 Hz Measurement mode
|
||||
2: 400 Hz Measurement mode
|
||||
3: 40 Hz Measurement mode
|
||||
4: Motion Detect mode (default)
|
||||
5: 100 Hz Free fall mode
|
||||
6: 40 Hz Free fall mode
|
||||
7: Power off mode
|
||||
|
||||
grange:
|
||||
2000: 2000 mg or 2G Range
|
||||
8000: 8000 mg or 8G Range
|
||||
|
||||
mdthr:
|
||||
X: X * 71mg (8G Range)
|
||||
X: X * 18mg (2G Range)
|
||||
|
||||
mdfftmr:
|
||||
X: (X & 0x70) * 100 ms (MDTMR)
|
||||
(X & 0x0F) * 2.5 ms (FFTMR 400 Hz)
|
||||
(X & 0x0F) * 10 ms (FFTMR 100 Hz)
|
||||
|
||||
ffthr:
|
||||
X: (X >> 2) * 18mg (2G Range)
|
||||
X: (X & 0x0F) * 71 mg (8G Range)
|
|
@ -1,6 +1,6 @@
|
|||
Multi-touch (MT) Protocol
|
||||
-------------------------
|
||||
Copyright (C) 2009 Henrik Rydberg <rydberg@euromail.se>
|
||||
Copyright (C) 2009-2010 Henrik Rydberg <rydberg@euromail.se>
|
||||
|
||||
|
||||
Introduction
|
||||
|
@ -161,19 +161,24 @@ against the glass. The inner region will increase, and in general, the
|
|||
ratio ABS_MT_TOUCH_MAJOR / ABS_MT_WIDTH_MAJOR, which is always smaller than
|
||||
unity, is related to the contact pressure. For pressure-based devices,
|
||||
ABS_MT_PRESSURE may be used to provide the pressure on the contact area
|
||||
instead.
|
||||
instead. Devices capable of contact hovering can use ABS_MT_DISTANCE to
|
||||
indicate the distance between the contact and the surface.
|
||||
|
||||
In addition to the MAJOR parameters, the oval shape of the contact can be
|
||||
described by adding the MINOR parameters, such that MAJOR and MINOR are the
|
||||
major and minor axis of an ellipse. Finally, the orientation of the oval
|
||||
shape can be describe with the ORIENTATION parameter.
|
||||
|
||||
For type A devices, further specification of the touch shape is possible
|
||||
via ABS_MT_BLOB_ID.
|
||||
|
||||
The ABS_MT_TOOL_TYPE may be used to specify whether the touching tool is a
|
||||
contact or a pen or something else. Devices with more granular information
|
||||
may specify general shapes as blobs, i.e., as a sequence of rectangular
|
||||
shapes grouped together by an ABS_MT_BLOB_ID. Finally, for the few devices
|
||||
that currently support it, the ABS_MT_TRACKING_ID event may be used to
|
||||
report contact tracking from hardware [5].
|
||||
finger or a pen or something else. Finally, the ABS_MT_TRACKING_ID event
|
||||
may be used to track identified contacts over time [5].
|
||||
|
||||
In the type B protocol, ABS_MT_TOOL_TYPE and ABS_MT_TRACKING_ID are
|
||||
implicitly handled by input core; drivers should instead call
|
||||
input_mt_report_slot_state().
|
||||
|
||||
|
||||
Event Semantics
|
||||
|
@ -213,6 +218,12 @@ The pressure, in arbitrary units, on the contact area. May be used instead
|
|||
of TOUCH and WIDTH for pressure-based devices or any device with a spatial
|
||||
signal intensity distribution.
|
||||
|
||||
ABS_MT_DISTANCE
|
||||
|
||||
The distance, in surface units, between the contact and the surface. Zero
|
||||
distance means the contact is touching the surface. A positive number means
|
||||
the contact is hovering above the surface.
|
||||
|
||||
ABS_MT_ORIENTATION
|
||||
|
||||
The orientation of the ellipse. The value should describe a signed quarter
|
||||
|
@ -240,21 +251,24 @@ ABS_MT_TOOL_TYPE
|
|||
The type of approaching tool. A lot of kernel drivers cannot distinguish
|
||||
between different tool types, such as a finger or a pen. In such cases, the
|
||||
event should be omitted. The protocol currently supports MT_TOOL_FINGER and
|
||||
MT_TOOL_PEN [2].
|
||||
MT_TOOL_PEN [2]. For type B devices, this event is handled by input core;
|
||||
drivers should instead use input_mt_report_slot_state().
|
||||
|
||||
ABS_MT_BLOB_ID
|
||||
|
||||
The BLOB_ID groups several packets together into one arbitrarily shaped
|
||||
contact. This is a low-level anonymous grouping for type A devices, and
|
||||
contact. The sequence of points forms a polygon which defines the shape of
|
||||
the contact. This is a low-level anonymous grouping for type A devices, and
|
||||
should not be confused with the high-level trackingID [5]. Most type A
|
||||
devices do not have blob capability, so drivers can safely omit this event.
|
||||
|
||||
ABS_MT_TRACKING_ID
|
||||
|
||||
The TRACKING_ID identifies an initiated contact throughout its life cycle
|
||||
[5]. This event is mandatory for type B devices. The value range of the
|
||||
TRACKING_ID should be large enough to ensure unique identification of a
|
||||
contact maintained over an extended period of time.
|
||||
[5]. The value range of the TRACKING_ID should be large enough to ensure
|
||||
unique identification of a contact maintained over an extended period of
|
||||
time. For type B devices, this event is handled by input core; drivers
|
||||
should instead use input_mt_report_slot_state().
|
||||
|
||||
|
||||
Event Computation
|
||||
|
@ -301,18 +315,19 @@ and with ORIENTATION, one can detect twisting of fingers.
|
|||
Notes
|
||||
-----
|
||||
|
||||
In order to stay compatible with existing applications, the data
|
||||
reported in a finger packet must not be recognized as single-touch
|
||||
events. In addition, all finger data must bypass input filtering,
|
||||
since subsequent events of the same type refer to different fingers.
|
||||
In order to stay compatible with existing applications, the data reported
|
||||
in a finger packet must not be recognized as single-touch events.
|
||||
|
||||
The first kernel driver to utilize the MT protocol is the bcm5974 driver,
|
||||
where examples can be found.
|
||||
For type A devices, all finger data bypasses input filtering, since
|
||||
subsequent events of the same type refer to different fingers.
|
||||
|
||||
For example usage of the type A protocol, see the bcm5974 driver. For
|
||||
example usage of the type B protocol, see the hid-egalax driver.
|
||||
|
||||
[1] With the extension ABS_MT_APPROACH_X and ABS_MT_APPROACH_Y, the
|
||||
difference between the contact position and the approaching tool position
|
||||
could be used to derive tilt.
|
||||
[2] The list can of course be extended.
|
||||
[3] Multitouch X driver project: http://bitmath.org/code/multitouch/.
|
||||
[3] The mtdev project: http://bitmath.org/code/mtdev/.
|
||||
[4] See the section on event computation.
|
||||
[5] See the section on finger tracking.
|
||||
|
|
|
@ -155,7 +155,6 @@ Code Seq#(hex) Include File Comments
|
|||
'Q' all linux/soundcard.h
|
||||
'R' 00-1F linux/random.h conflict!
|
||||
'R' 01 linux/rfkill.h conflict!
|
||||
'R' 01-0F media/rds.h conflict!
|
||||
'R' C0-DF net/bluetooth/rfcomm.h
|
||||
'S' all linux/cdrom.h conflict!
|
||||
'S' 80-81 scsi/scsi_ioctl.h conflict!
|
||||
|
@ -194,7 +193,6 @@ Code Seq#(hex) Include File Comments
|
|||
<http://lrcwww.epfl.ch/>
|
||||
'b' 00-FF conflict! bit3 vme host bridge
|
||||
<mailto:natalia@nikhefk.nikhef.nl>
|
||||
'b' 00-0F media/bt819.h conflict!
|
||||
'c' all linux/cm4000_cs.h conflict!
|
||||
'c' 00-7F linux/comstats.h conflict!
|
||||
'c' 00-7F linux/coda.h conflict!
|
||||
|
@ -260,14 +258,11 @@ Code Seq#(hex) Include File Comments
|
|||
't' 80-8F linux/isdn_ppp.h
|
||||
't' 90 linux/toshiba.h
|
||||
'u' 00-1F linux/smb_fs.h gone
|
||||
'v' all linux/videodev.h conflict!
|
||||
'v' 00-1F linux/ext2_fs.h conflict!
|
||||
'v' 00-1F linux/fs.h conflict!
|
||||
'v' 00-0F linux/sonypi.h conflict!
|
||||
'v' C0-CF drivers/media/video/ov511.h conflict!
|
||||
'v' C0-DF media/pwc-ioctl.h conflict!
|
||||
'v' C0-FF linux/meye.h conflict!
|
||||
'v' C0-CF drivers/media/video/zoran/zoran.h conflict!
|
||||
'v' D0-DF drivers/media/video/cpia2/cpia2dev.h conflict!
|
||||
'w' all CERN SCI driver
|
||||
'y' 00-1F packet based user level communications
|
||||
|
@ -278,7 +273,6 @@ Code Seq#(hex) Include File Comments
|
|||
<mailto:oe@port.de>
|
||||
'z' 10-4F drivers/s390/crypto/zcrypt_api.h conflict!
|
||||
0x80 00-1F linux/fb.h
|
||||
0x88 00-3F media/ovcamchip.h
|
||||
0x89 00-06 arch/x86/include/asm/sockios.h
|
||||
0x89 0B-DF linux/sockios.h
|
||||
0x89 E0-EF linux/sockios.h SIOCPROTOPRIVATE range
|
||||
|
|
|
@ -73,6 +73,14 @@ Specify the output directory when building the kernel.
|
|||
The output directory can also be specified using "O=...".
|
||||
Setting "O=..." takes precedence over KBUILD_OUTPUT.
|
||||
|
||||
KBUILD_DEBARCH
|
||||
--------------------------------------------------
|
||||
For the deb-pkg target, allows overriding the normal heuristics deployed by
|
||||
deb-pkg. Normally deb-pkg attempts to guess the right architecture based on
|
||||
the UTS_MACHINE variable, and on some architectures also the kernel config.
|
||||
The value of KBUILD_DEBARCH is assumed (not checked) to be a valid Debian
|
||||
architecture.
|
||||
|
||||
ARCH
|
||||
--------------------------------------------------
|
||||
Set ARCH to the architecture to be built.
|
||||
|
|
|
@ -112,7 +112,6 @@ applicable everywhere (see syntax).
|
|||
(no prompts anywhere) and for symbols with no dependencies.
|
||||
That will limit the usefulness but on the other hand avoid
|
||||
the illegal configurations all over.
|
||||
kconfig should one day warn about such things.
|
||||
|
||||
- numerical ranges: "range" <symbol> <symbol> ["if" <expr>]
|
||||
This allows to limit the range of possible input values for int
|
||||
|
@ -268,7 +267,7 @@ separate list of options.
|
|||
|
||||
choices:
|
||||
|
||||
"choice"
|
||||
"choice" [symbol]
|
||||
<choice options>
|
||||
<choice block>
|
||||
"endchoice"
|
||||
|
@ -282,6 +281,10 @@ single driver can be compiled/loaded into the kernel, but all drivers
|
|||
can be compiled as modules.
|
||||
A choice accepts another option "optional", which allows to set the
|
||||
choice to 'n' and no entry needs to be selected.
|
||||
If no [symbol] is associated with a choice, then you can not have multiple
|
||||
definitions of that choice. If a [symbol] is associated to the choice,
|
||||
then you may define the same choice (ie. with the same entries) in another
|
||||
place.
|
||||
|
||||
comment:
|
||||
|
||||
|
|
|
@ -1136,6 +1136,21 @@ When kbuild executes, the following steps are followed (roughly):
|
|||
resulting in the target file being recompiled for no
|
||||
obvious reason.
|
||||
|
||||
dtc
|
||||
Create flattend device tree blob object suitable for linking
|
||||
into vmlinux. Device tree blobs linked into vmlinux are placed
|
||||
in an init section in the image. Platform code *must* copy the
|
||||
blob to non-init memory prior to calling unflatten_device_tree().
|
||||
|
||||
Example:
|
||||
#arch/x86/platform/ce4100/Makefile
|
||||
clean-files := *dtb.S
|
||||
|
||||
DTC_FLAGS := -p 1024
|
||||
obj-y += foo.dtb.o
|
||||
|
||||
$(obj)/%.dtb: $(src)/%.dts
|
||||
$(call cmd,dtc)
|
||||
|
||||
--- 6.7 Custom kbuild commands
|
||||
|
||||
|
|
|
@ -0,0 +1,145 @@
|
|||
Trusted and Encrypted Keys
|
||||
|
||||
Trusted and Encrypted Keys are two new key types added to the existing kernel
|
||||
key ring service. Both of these new types are variable length symmetic keys,
|
||||
and in both cases all keys are created in the kernel, and user space sees,
|
||||
stores, and loads only encrypted blobs. Trusted Keys require the availability
|
||||
of a Trusted Platform Module (TPM) chip for greater security, while Encrypted
|
||||
Keys can be used on any system. All user level blobs, are displayed and loaded
|
||||
in hex ascii for convenience, and are integrity verified.
|
||||
|
||||
Trusted Keys use a TPM both to generate and to seal the keys. Keys are sealed
|
||||
under a 2048 bit RSA key in the TPM, and optionally sealed to specified PCR
|
||||
(integrity measurement) values, and only unsealed by the TPM, if PCRs and blob
|
||||
integrity verifications match. A loaded Trusted Key can be updated with new
|
||||
(future) PCR values, so keys are easily migrated to new pcr values, such as
|
||||
when the kernel and initramfs are updated. The same key can have many saved
|
||||
blobs under different PCR values, so multiple boots are easily supported.
|
||||
|
||||
By default, trusted keys are sealed under the SRK, which has the default
|
||||
authorization value (20 zeros). This can be set at takeownership time with the
|
||||
trouser's utility: "tpm_takeownership -u -z".
|
||||
|
||||
Usage:
|
||||
keyctl add trusted name "new keylen [options]" ring
|
||||
keyctl add trusted name "load hex_blob [pcrlock=pcrnum]" ring
|
||||
keyctl update key "update [options]"
|
||||
keyctl print keyid
|
||||
|
||||
options:
|
||||
keyhandle= ascii hex value of sealing key default 0x40000000 (SRK)
|
||||
keyauth= ascii hex auth for sealing key default 0x00...i
|
||||
(40 ascii zeros)
|
||||
blobauth= ascii hex auth for sealed data default 0x00...
|
||||
(40 ascii zeros)
|
||||
blobauth= ascii hex auth for sealed data default 0x00...
|
||||
(40 ascii zeros)
|
||||
pcrinfo= ascii hex of PCR_INFO or PCR_INFO_LONG (no default)
|
||||
pcrlock= pcr number to be extended to "lock" blob
|
||||
migratable= 0|1 indicating permission to reseal to new PCR values,
|
||||
default 1 (resealing allowed)
|
||||
|
||||
"keyctl print" returns an ascii hex copy of the sealed key, which is in standard
|
||||
TPM_STORED_DATA format. The key length for new keys are always in bytes.
|
||||
Trusted Keys can be 32 - 128 bytes (256 - 1024 bits), the upper limit is to fit
|
||||
within the 2048 bit SRK (RSA) keylength, with all necessary structure/padding.
|
||||
|
||||
Encrypted keys do not depend on a TPM, and are faster, as they use AES for
|
||||
encryption/decryption. New keys are created from kernel generated random
|
||||
numbers, and are encrypted/decrypted using a specified 'master' key. The
|
||||
'master' key can either be a trusted-key or user-key type. The main
|
||||
disadvantage of encrypted keys is that if they are not rooted in a trusted key,
|
||||
they are only as secure as the user key encrypting them. The master user key
|
||||
should therefore be loaded in as secure a way as possible, preferably early in
|
||||
boot.
|
||||
|
||||
Usage:
|
||||
keyctl add encrypted name "new key-type:master-key-name keylen" ring
|
||||
keyctl add encrypted name "load hex_blob" ring
|
||||
keyctl update keyid "update key-type:master-key-name"
|
||||
|
||||
where 'key-type' is either 'trusted' or 'user'.
|
||||
|
||||
Examples of trusted and encrypted key usage:
|
||||
|
||||
Create and save a trusted key named "kmk" of length 32 bytes:
|
||||
|
||||
$ keyctl add trusted kmk "new 32" @u
|
||||
440502848
|
||||
|
||||
$ keyctl show
|
||||
Session Keyring
|
||||
-3 --alswrv 500 500 keyring: _ses
|
||||
97833714 --alswrv 500 -1 \_ keyring: _uid.500
|
||||
440502848 --alswrv 500 500 \_ trusted: kmk
|
||||
|
||||
$ keyctl print 440502848
|
||||
0101000000000000000001005d01b7e3f4a6be5709930f3b70a743cbb42e0cc95e18e915
|
||||
3f60da455bbf1144ad12e4f92b452f966929f6105fd29ca28e4d4d5a031d068478bacb0b
|
||||
27351119f822911b0a11ba3d3498ba6a32e50dac7f32894dd890eb9ad578e4e292c83722
|
||||
a52e56a097e6a68b3f56f7a52ece0cdccba1eb62cad7d817f6dc58898b3ac15f36026fec
|
||||
d568bd4a706cb60bb37be6d8f1240661199d640b66fb0fe3b079f97f450b9ef9c22c6d5d
|
||||
dd379f0facd1cd020281dfa3c70ba21a3fa6fc2471dc6d13ecf8298b946f65345faa5ef0
|
||||
f1f8fff03ad0acb083725535636addb08d73dedb9832da198081e5deae84bfaf0409c22b
|
||||
e4a8aea2b607ec96931e6f4d4fe563ba
|
||||
|
||||
$ keyctl pipe 440502848 > kmk.blob
|
||||
|
||||
Load a trusted key from the saved blob:
|
||||
|
||||
$ keyctl add trusted kmk "load `cat kmk.blob`" @u
|
||||
268728824
|
||||
|
||||
$ keyctl print 268728824
|
||||
0101000000000000000001005d01b7e3f4a6be5709930f3b70a743cbb42e0cc95e18e915
|
||||
3f60da455bbf1144ad12e4f92b452f966929f6105fd29ca28e4d4d5a031d068478bacb0b
|
||||
27351119f822911b0a11ba3d3498ba6a32e50dac7f32894dd890eb9ad578e4e292c83722
|
||||
a52e56a097e6a68b3f56f7a52ece0cdccba1eb62cad7d817f6dc58898b3ac15f36026fec
|
||||
d568bd4a706cb60bb37be6d8f1240661199d640b66fb0fe3b079f97f450b9ef9c22c6d5d
|
||||
dd379f0facd1cd020281dfa3c70ba21a3fa6fc2471dc6d13ecf8298b946f65345faa5ef0
|
||||
f1f8fff03ad0acb083725535636addb08d73dedb9832da198081e5deae84bfaf0409c22b
|
||||
e4a8aea2b607ec96931e6f4d4fe563ba
|
||||
|
||||
Reseal a trusted key under new pcr values:
|
||||
|
||||
$ keyctl update 268728824 "update pcrinfo=`cat pcr.blob`"
|
||||
$ keyctl print 268728824
|
||||
010100000000002c0002800093c35a09b70fff26e7a98ae786c641e678ec6ffb6b46d805
|
||||
77c8a6377aed9d3219c6dfec4b23ffe3000001005d37d472ac8a44023fbb3d18583a4f73
|
||||
d3a076c0858f6f1dcaa39ea0f119911ff03f5406df4f7f27f41da8d7194f45c9f4e00f2e
|
||||
df449f266253aa3f52e55c53de147773e00f0f9aca86c64d94c95382265968c354c5eab4
|
||||
9638c5ae99c89de1e0997242edfb0b501744e11ff9762dfd951cffd93227cc513384e7e6
|
||||
e782c29435c7ec2edafaa2f4c1fe6e7a781b59549ff5296371b42133777dcc5b8b971610
|
||||
94bc67ede19e43ddb9dc2baacad374a36feaf0314d700af0a65c164b7082401740e489c9
|
||||
7ef6a24defe4846104209bf0c3eced7fa1a672ed5b125fc9d8cd88b476a658a4434644ef
|
||||
df8ae9a178e9f83ba9f08d10fa47e4226b98b0702f06b3b8
|
||||
|
||||
Create and save an encrypted key "evm" using the above trusted key "kmk":
|
||||
|
||||
$ keyctl add encrypted evm "new trusted:kmk 32" @u
|
||||
159771175
|
||||
|
||||
$ keyctl print 159771175
|
||||
trusted:kmk 32 2375725ad57798846a9bbd240de8906f006e66c03af53b1b382dbbc55
|
||||
be2a44616e4959430436dc4f2a7a9659aa60bb4652aeb2120f149ed197c564e024717c64
|
||||
5972dcb82ab2dde83376d82b2e3c09ffc
|
||||
|
||||
$ keyctl pipe 159771175 > evm.blob
|
||||
|
||||
Load an encrypted key "evm" from saved blob:
|
||||
|
||||
$ keyctl add encrypted evm "load `cat evm.blob`" @u
|
||||
831684262
|
||||
|
||||
$ keyctl print 831684262
|
||||
trusted:kmk 32 2375725ad57798846a9bbd240de8906f006e66c03af53b1b382dbbc55
|
||||
be2a44616e4959430436dc4f2a7a9659aa60bb4652aeb2120f149ed197c564e024717c64
|
||||
5972dcb82ab2dde83376d82b2e3c09ffc
|
||||
|
||||
|
||||
The initial consumer of trusted keys is EVM, which at boot time needs a high
|
||||
quality symmetric key for HMAC protection of file metadata. The use of a
|
||||
trusted key provides strong guarantees that the EVM key has not been
|
||||
compromised by a user level problem, and when sealed to specific boot PCR
|
||||
values, protects against boot and offline attacks. Other uses for trusted and
|
||||
encrypted keys, such as for disk and file encryption are anticipated.
|
|
@ -39,8 +39,9 @@ INSTALL_HDR_PATH indicates where to install the headers. It defaults to
|
|||
The command "make headers_install_all" exports headers for all architectures
|
||||
simultaneously. (This is mostly of interest to distribution maintainers,
|
||||
who create an architecture-independent tarball from the resulting include
|
||||
directory.) Remember to provide the appropriate linux/asm directory via "mv"
|
||||
or "ln -s" before building a C library with headers exported this way.
|
||||
directory.) You also can use HDR_ARCH_LIST to specify list of architectures.
|
||||
Remember to provide the appropriate linux/asm directory via "mv" or "ln -s"
|
||||
before building a C library with headers exported this way.
|
||||
|
||||
The kernel header export infrastructure is maintained by David Woodhouse
|
||||
<dwmw2@infradead.org>.
|
||||
|
|
|
@ -23,10 +23,10 @@ Once you have resolved the suspend/resume-related problems with your test system
|
|||
without the new driver, you are ready to test it:
|
||||
|
||||
a) Build the driver as a module, load it and try the test modes of hibernation
|
||||
(see: Documents/power/basic-pm-debugging.txt, 1).
|
||||
(see: Documentation/power/basic-pm-debugging.txt, 1).
|
||||
|
||||
b) Load the driver and attempt to hibernate in the "reboot", "shutdown" and
|
||||
"platform" modes (see: Documents/power/basic-pm-debugging.txt, 1).
|
||||
"platform" modes (see: Documentation/power/basic-pm-debugging.txt, 1).
|
||||
|
||||
c) Compile the driver directly into the kernel and try the test modes of
|
||||
hibernation.
|
||||
|
@ -34,12 +34,12 @@ c) Compile the driver directly into the kernel and try the test modes of
|
|||
d) Attempt to hibernate with the driver compiled directly into the kernel
|
||||
in the "reboot", "shutdown" and "platform" modes.
|
||||
|
||||
e) Try the test modes of suspend (see: Documents/power/basic-pm-debugging.txt,
|
||||
e) Try the test modes of suspend (see: Documentation/power/basic-pm-debugging.txt,
|
||||
2). [As far as the STR tests are concerned, it should not matter whether or
|
||||
not the driver is built as a module.]
|
||||
|
||||
f) Attempt to suspend to RAM using the s2ram tool with the driver loaded
|
||||
(see: Documents/power/basic-pm-debugging.txt, 2).
|
||||
(see: Documentation/power/basic-pm-debugging.txt, 2).
|
||||
|
||||
Each of the above tests should be repeated several times and the STD tests
|
||||
should be mixed with the STR tests. If any of them fails, the driver cannot be
|
||||
|
|
|
@ -50,6 +50,15 @@ type's callbacks are not defined) of given device. The bus type, device type
|
|||
and device class callbacks are referred to as subsystem-level callbacks in what
|
||||
follows.
|
||||
|
||||
By default, the callbacks are always invoked in process context with interrupts
|
||||
enabled. However, subsystems can use the pm_runtime_irq_safe() helper function
|
||||
to tell the PM core that a device's ->runtime_suspend() and ->runtime_resume()
|
||||
callbacks should be invoked in atomic context with interrupts disabled
|
||||
(->runtime_idle() is still invoked the default way). This implies that these
|
||||
callback routines must not block or sleep, but it also means that the
|
||||
synchronous helper functions listed at the end of Section 4 can be used within
|
||||
an interrupt handler or in an atomic context.
|
||||
|
||||
The subsystem-level suspend callback is _entirely_ _responsible_ for handling
|
||||
the suspend of the device as appropriate, which may, but need not include
|
||||
executing the device driver's own ->runtime_suspend() callback (from the
|
||||
|
@ -237,6 +246,10 @@ defined in include/linux/pm.h:
|
|||
Section 8); it may be modified only by the pm_runtime_no_callbacks()
|
||||
helper function
|
||||
|
||||
unsigned int irq_safe;
|
||||
- indicates that the ->runtime_suspend() and ->runtime_resume() callbacks
|
||||
will be invoked with the spinlock held and interrupts disabled
|
||||
|
||||
unsigned int use_autosuspend;
|
||||
- indicates that the device's driver supports delayed autosuspend (see
|
||||
Section 9); it may be modified only by the
|
||||
|
@ -344,6 +357,10 @@ drivers/base/power/runtime.c and include/linux/pm_runtime.h:
|
|||
- decrement the device's usage counter; if the result is 0 then run
|
||||
pm_runtime_idle(dev) and return its result
|
||||
|
||||
int pm_runtime_put_sync_suspend(struct device *dev);
|
||||
- decrement the device's usage counter; if the result is 0 then run
|
||||
pm_runtime_suspend(dev) and return its result
|
||||
|
||||
int pm_runtime_put_sync_autosuspend(struct device *dev);
|
||||
- decrement the device's usage counter; if the result is 0 then run
|
||||
pm_runtime_autosuspend(dev) and return its result
|
||||
|
@ -397,6 +414,11 @@ drivers/base/power/runtime.c and include/linux/pm_runtime.h:
|
|||
PM attributes from /sys/devices/.../power (or prevent them from being
|
||||
added when the device is registered)
|
||||
|
||||
void pm_runtime_irq_safe(struct device *dev);
|
||||
- set the power.irq_safe flag for the device, causing the runtime-PM
|
||||
suspend and resume callbacks (but not the idle callback) to be invoked
|
||||
with interrupts disabled
|
||||
|
||||
void pm_runtime_mark_last_busy(struct device *dev);
|
||||
- set the power.last_busy field to the current time
|
||||
|
||||
|
@ -438,6 +460,15 @@ pm_runtime_suspended()
|
|||
pm_runtime_mark_last_busy()
|
||||
pm_runtime_autosuspend_expiration()
|
||||
|
||||
If pm_runtime_irq_safe() has been called for a device then the following helper
|
||||
functions may also be used in interrupt context:
|
||||
|
||||
pm_runtime_suspend()
|
||||
pm_runtime_autosuspend()
|
||||
pm_runtime_resume()
|
||||
pm_runtime_get_sync()
|
||||
pm_runtime_put_sync_suspend()
|
||||
|
||||
5. Run-time PM Initialization, Device Probing and Removal
|
||||
|
||||
Initially, the run-time PM is disabled for all devices, which means that the
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
EEPROMs (I2C)
|
||||
|
||||
Required properties:
|
||||
|
||||
- compatible : should be "<manufacturer>,<type>"
|
||||
If there is no specific driver for <manufacturer>, a generic
|
||||
driver based on <type> is selected. Possible types are:
|
||||
24c00, 24c01, 24c02, 24c04, 24c08, 24c16, 24c32, 24c64,
|
||||
24c128, 24c256, 24c512, 24c1024, spd
|
||||
|
||||
- reg : the I2C address of the EEPROM
|
||||
|
||||
Optional properties:
|
||||
|
||||
- pagesize : the length of the pagesize for writing. Please consult the
|
||||
manual of your device, that value varies a lot. A wrong value
|
||||
may result in data loss! If not specified, a safety value of
|
||||
'1' is used which will be very slow.
|
||||
|
||||
- read-only: this parameterless property disables writes to the eeprom
|
||||
|
||||
Example:
|
||||
|
||||
eeprom@52 {
|
||||
compatible = "atmel,24c32";
|
||||
reg = <0x52>;
|
||||
pagesize = <32>;
|
||||
};
|
|
@ -1,3 +1,25 @@
|
|||
Release Date : Tues. Dec 14, 2010 17:00:00 PST 2010 -
|
||||
(emaild-id:megaraidlinux@lsi.com)
|
||||
Adam Radford
|
||||
Current Version : 00.00.05.29-rc1
|
||||
Old Version : 00.00.04.31-rc1
|
||||
1. Rename megaraid_sas.c to megaraid_sas_base.c.
|
||||
2. Update GPL headers.
|
||||
3. Add MSI-X support and 'msix_disable' module parameter.
|
||||
4. Use lowest memory bar (for SR-IOV VF support).
|
||||
5. Add struct megasas_instance_temlate changes, and change all code to use
|
||||
new instance entries:
|
||||
|
||||
irqreturn_t (*service_isr )(int irq, void *devp);
|
||||
void (*tasklet)(unsigned long);
|
||||
u32 (*init_adapter)(struct megasas_instance *);
|
||||
u32 (*build_and_issue_cmd) (struct megasas_instance *,
|
||||
struct scsi_cmnd *);
|
||||
void (*issue_dcmd) (struct megasas_instance *instance,
|
||||
struct megasas_cmd *cmd);
|
||||
|
||||
6. Add code to support MegaRAID 9265/9285 controllers device id (0x5b).
|
||||
-------------------------------------------------------------------------------
|
||||
1 Release Date : Thur. May 03, 2010 09:12:45 PST 2009 -
|
||||
(emaild-id:megaraidlinux@lsi.com)
|
||||
Bo Yang
|
||||
|
|
|
@ -14,6 +14,8 @@ riscom8.txt
|
|||
- notes on using the RISCom/8 multi-port serial driver.
|
||||
rocket.txt
|
||||
- info on the Comtrol RocketPort multiport serial driver.
|
||||
serial-rs485.txt
|
||||
- info about RS485 structures and support in the kernel.
|
||||
specialix.txt
|
||||
- info on hardware/driver for specialix IO8+ multiport serial card.
|
||||
stallion.txt
|
||||
|
|
|
@ -0,0 +1,120 @@
|
|||
RS485 SERIAL COMMUNICATIONS
|
||||
|
||||
1. INTRODUCTION
|
||||
|
||||
EIA-485, also known as TIA/EIA-485 or RS-485, is a standard defining the
|
||||
electrical characteristics of drivers and receivers for use in balanced
|
||||
digital multipoint systems.
|
||||
This standard is widely used for communications in industrial automation
|
||||
because it can be used effectively over long distances and in electrically
|
||||
noisy environments.
|
||||
|
||||
2. HARDWARE-RELATED CONSIDERATIONS
|
||||
|
||||
Some CPUs/UARTs (e.g., Atmel AT91 or 16C950 UART) contain a built-in
|
||||
half-duplex mode capable of automatically controlling line direction by
|
||||
toggling RTS or DTR signals. That can be used to control external
|
||||
half-duplex hardware like an RS485 transceiver or any RS232-connected
|
||||
half-duplex devices like some modems.
|
||||
|
||||
For these microcontrollers, the Linux driver should be made capable of
|
||||
working in both modes, and proper ioctls (see later) should be made
|
||||
available at user-level to allow switching from one mode to the other, and
|
||||
vice versa.
|
||||
|
||||
3. DATA STRUCTURES ALREADY AVAILABLE IN THE KERNEL
|
||||
|
||||
The Linux kernel provides the serial_rs485 structure (see [1]) to handle
|
||||
RS485 communications. This data structure is used to set and configure RS485
|
||||
parameters in the platform data and in ioctls.
|
||||
|
||||
Any driver for devices capable of working both as RS232 and RS485 should
|
||||
provide at least the following ioctls:
|
||||
|
||||
- TIOCSRS485 (typically associated with number 0x542F). This ioctl is used
|
||||
to enable/disable RS485 mode from user-space
|
||||
|
||||
- TIOCGRS485 (typically associated with number 0x542E). This ioctl is used
|
||||
to get RS485 mode from kernel-space (i.e., driver) to user-space.
|
||||
|
||||
In other words, the serial driver should contain a code similar to the next
|
||||
one:
|
||||
|
||||
static struct uart_ops atmel_pops = {
|
||||
/* ... */
|
||||
.ioctl = handle_ioctl,
|
||||
};
|
||||
|
||||
static int handle_ioctl(struct uart_port *port,
|
||||
unsigned int cmd,
|
||||
unsigned long arg)
|
||||
{
|
||||
struct serial_rs485 rs485conf;
|
||||
|
||||
switch (cmd) {
|
||||
case TIOCSRS485:
|
||||
if (copy_from_user(&rs485conf,
|
||||
(struct serial_rs485 *) arg,
|
||||
sizeof(rs485conf)))
|
||||
return -EFAULT;
|
||||
|
||||
/* ... */
|
||||
break;
|
||||
|
||||
case TIOCGRS485:
|
||||
if (copy_to_user((struct serial_rs485 *) arg,
|
||||
...,
|
||||
sizeof(rs485conf)))
|
||||
return -EFAULT;
|
||||
/* ... */
|
||||
break;
|
||||
|
||||
/* ... */
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
4. USAGE FROM USER-LEVEL
|
||||
|
||||
From user-level, RS485 configuration can be get/set using the previous
|
||||
ioctls. For instance, to set RS485 you can use the following code:
|
||||
|
||||
#include <linux/serial.h>
|
||||
|
||||
/* Driver-specific ioctls: */
|
||||
#define TIOCGRS485 0x542E
|
||||
#define TIOCSRS485 0x542F
|
||||
|
||||
/* Open your specific device (e.g., /dev/mydevice): */
|
||||
int fd = open ("/dev/mydevice", O_RDWR);
|
||||
if (fd < 0) {
|
||||
/* Error handling. See errno. */
|
||||
}
|
||||
|
||||
struct serial_rs485 rs485conf;
|
||||
|
||||
/* Set RS485 mode: */
|
||||
rs485conf.flags |= SER_RS485_ENABLED;
|
||||
|
||||
/* Set rts delay before send, if needed: */
|
||||
rs485conf.flags |= SER_RS485_RTS_BEFORE_SEND;
|
||||
rs485conf.delay_rts_before_send = ...;
|
||||
|
||||
/* Set rts delay after send, if needed: */
|
||||
rs485conf.flags |= SER_RS485_RTS_AFTER_SEND;
|
||||
rs485conf.delay_rts_after_send = ...;
|
||||
|
||||
if (ioctl (fd, TIOCSRS485, &rs485conf) < 0) {
|
||||
/* Error handling. See errno. */
|
||||
}
|
||||
|
||||
/* Use read() and write() syscalls here... */
|
||||
|
||||
/* Close the device when finished: */
|
||||
if (close (fd) < 0) {
|
||||
/* Error handling. See errno. */
|
||||
}
|
||||
|
||||
5. REFERENCES
|
||||
|
||||
[1] include/linux/serial.h
|
|
@ -19,7 +19,7 @@ Declaring PXA2xx Master Controllers
|
|||
-----------------------------------
|
||||
Typically a SPI master is defined in the arch/.../mach-*/board-*.c as a
|
||||
"platform device". The master configuration is passed to the driver via a table
|
||||
found in arch/arm/mach-pxa/include/mach/pxa2xx_spi.h:
|
||||
found in include/linux/spi/pxa2xx_spi.h:
|
||||
|
||||
struct pxa2xx_spi_master {
|
||||
enum pxa_ssp_type ssp_type;
|
||||
|
@ -94,7 +94,7 @@ using the "spi_board_info" structure found in "linux/spi/spi.h". See
|
|||
|
||||
Each slave device attached to the PXA must provide slave specific configuration
|
||||
information via the structure "pxa2xx_spi_chip" found in
|
||||
"arch/arm/mach-pxa/include/mach/pxa2xx_spi.h". The pxa2xx_spi master controller driver
|
||||
"include/linux/spi/pxa2xx_spi.h". The pxa2xx_spi master controller driver
|
||||
will uses the configuration whenever the driver communicates with the slave
|
||||
device. All fields are optional.
|
||||
|
||||
|
|
|
@ -219,7 +219,7 @@ dmesg_restrict:
|
|||
This toggle indicates whether unprivileged users are prevented from using
|
||||
dmesg(8) to view messages from the kernel's log buffer. When
|
||||
dmesg_restrict is set to (0) there are no restrictions. When
|
||||
dmesg_restrict is set set to (1), users must have CAP_SYS_ADMIN to use
|
||||
dmesg_restrict is set set to (1), users must have CAP_SYSLOG to use
|
||||
dmesg(8).
|
||||
|
||||
The kernel config option CONFIG_SECURITY_DMESG_RESTRICT sets the default
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
Alan Stern <stern@rowland.harvard.edu>
|
||||
|
||||
December 11, 2009
|
||||
October 28, 2010
|
||||
|
||||
|
||||
|
||||
|
@ -107,9 +107,14 @@ allowed to issue dynamic suspends.
|
|||
The user interface for controlling dynamic PM is located in the power/
|
||||
subdirectory of each USB device's sysfs directory, that is, in
|
||||
/sys/bus/usb/devices/.../power/ where "..." is the device's ID. The
|
||||
relevant attribute files are: wakeup, control, and autosuspend.
|
||||
(There may also be a file named "level"; this file was deprecated
|
||||
as of the 2.6.35 kernel and replaced by the "control" file.)
|
||||
relevant attribute files are: wakeup, control, and
|
||||
autosuspend_delay_ms. (There may also be a file named "level"; this
|
||||
file was deprecated as of the 2.6.35 kernel and replaced by the
|
||||
"control" file. In 2.6.38 the "autosuspend" file will be deprecated
|
||||
and replaced by the "autosuspend_delay_ms" file. The only difference
|
||||
is that the newer file expresses the delay in milliseconds whereas the
|
||||
older file uses seconds. Confusingly, both files are present in 2.6.37
|
||||
but only "autosuspend" works.)
|
||||
|
||||
power/wakeup
|
||||
|
||||
|
@ -140,33 +145,36 @@ as of the 2.6.35 kernel and replaced by the "control" file.)
|
|||
suspended and autoresume was not allowed. This
|
||||
setting is no longer supported.)
|
||||
|
||||
power/autosuspend
|
||||
power/autosuspend_delay_ms
|
||||
|
||||
This file contains an integer value, which is the
|
||||
number of seconds the device should remain idle before
|
||||
the kernel will autosuspend it (the idle-delay time).
|
||||
The default is 2. 0 means to autosuspend as soon as
|
||||
the device becomes idle, and negative values mean
|
||||
never to autosuspend. You can write a number to the
|
||||
file to change the autosuspend idle-delay time.
|
||||
number of milliseconds the device should remain idle
|
||||
before the kernel will autosuspend it (the idle-delay
|
||||
time). The default is 2000. 0 means to autosuspend
|
||||
as soon as the device becomes idle, and negative
|
||||
values mean never to autosuspend. You can write a
|
||||
number to the file to change the autosuspend
|
||||
idle-delay time.
|
||||
|
||||
Writing "-1" to power/autosuspend and writing "on" to power/control do
|
||||
essentially the same thing -- they both prevent the device from being
|
||||
autosuspended. Yes, this is a redundancy in the API.
|
||||
Writing "-1" to power/autosuspend_delay_ms and writing "on" to
|
||||
power/control do essentially the same thing -- they both prevent the
|
||||
device from being autosuspended. Yes, this is a redundancy in the
|
||||
API.
|
||||
|
||||
(In 2.6.21 writing "0" to power/autosuspend would prevent the device
|
||||
from being autosuspended; the behavior was changed in 2.6.22. The
|
||||
power/autosuspend attribute did not exist prior to 2.6.21, and the
|
||||
power/level attribute did not exist prior to 2.6.22. power/control
|
||||
was added in 2.6.34.)
|
||||
was added in 2.6.34, and power/autosuspend_delay_ms was added in
|
||||
2.6.37 but did not become functional until 2.6.38.)
|
||||
|
||||
|
||||
Changing the default idle-delay time
|
||||
------------------------------------
|
||||
|
||||
The default autosuspend idle-delay time is controlled by a module
|
||||
parameter in usbcore. You can specify the value when usbcore is
|
||||
loaded. For example, to set it to 5 seconds instead of 2 you would
|
||||
The default autosuspend idle-delay time (in seconds) is controlled by
|
||||
a module parameter in usbcore. You can specify the value when usbcore
|
||||
is loaded. For example, to set it to 5 seconds instead of 2 you would
|
||||
do:
|
||||
|
||||
modprobe usbcore autosuspend=5
|
||||
|
@ -234,25 +242,23 @@ every device.
|
|||
|
||||
If a driver knows that its device has proper suspend/resume support,
|
||||
it can enable autosuspend all by itself. For example, the video
|
||||
driver for a laptop's webcam might do this, since these devices are
|
||||
rarely used and so should normally be autosuspended.
|
||||
driver for a laptop's webcam might do this (in recent kernels they
|
||||
do), since these devices are rarely used and so should normally be
|
||||
autosuspended.
|
||||
|
||||
Sometimes it turns out that even when a device does work okay with
|
||||
autosuspend there are still problems. For example, there are
|
||||
experimental patches adding autosuspend support to the usbhid driver,
|
||||
which manages keyboards and mice, among other things. Tests with a
|
||||
number of keyboards showed that typing on a suspended keyboard, while
|
||||
causing the keyboard to do a remote wakeup all right, would
|
||||
nonetheless frequently result in lost keystrokes. Tests with mice
|
||||
showed that some of them would issue a remote-wakeup request in
|
||||
response to button presses but not to motion, and some in response to
|
||||
neither.
|
||||
autosuspend there are still problems. For example, the usbhid driver,
|
||||
which manages keyboards and mice, has autosuspend support. Tests with
|
||||
a number of keyboards show that typing on a suspended keyboard, while
|
||||
causing the keyboard to do a remote wakeup all right, will nonetheless
|
||||
frequently result in lost keystrokes. Tests with mice show that some
|
||||
of them will issue a remote-wakeup request in response to button
|
||||
presses but not to motion, and some in response to neither.
|
||||
|
||||
The kernel will not prevent you from enabling autosuspend on devices
|
||||
that can't handle it. It is even possible in theory to damage a
|
||||
device by suspending it at the wrong time -- for example, suspending a
|
||||
USB hard disk might cause it to spin down without parking the heads.
|
||||
(Highly unlikely, but possible.) Take care.
|
||||
device by suspending it at the wrong time. (Highly unlikely, but
|
||||
possible.) Take care.
|
||||
|
||||
|
||||
The driver interface for Power Management
|
||||
|
@ -336,10 +342,6 @@ autosuspend the interface's device. When the usage counter is = 0
|
|||
then the interface is considered to be idle, and the kernel may
|
||||
autosuspend the device.
|
||||
|
||||
(There is a similar usage counter field in struct usb_device,
|
||||
associated with the device itself rather than any of its interfaces.
|
||||
This counter is used only by the USB core.)
|
||||
|
||||
Drivers need not be concerned about balancing changes to the usage
|
||||
counter; the USB core will undo any remaining "get"s when a driver
|
||||
is unbound from its interface. As a corollary, drivers must not call
|
||||
|
@ -409,11 +411,11 @@ during autosuspend. For example, there's not much point
|
|||
autosuspending a keyboard if the user can't cause the keyboard to do a
|
||||
remote wakeup by typing on it. If the driver sets
|
||||
intf->needs_remote_wakeup to 1, the kernel won't autosuspend the
|
||||
device if remote wakeup isn't available or has been disabled through
|
||||
the power/wakeup attribute. (If the device is already autosuspended,
|
||||
though, setting this flag won't cause the kernel to autoresume it.
|
||||
Normally a driver would set this flag in its probe method, at which
|
||||
time the device is guaranteed not to be autosuspended.)
|
||||
device if remote wakeup isn't available. (If the device is already
|
||||
autosuspended, though, setting this flag won't cause the kernel to
|
||||
autoresume it. Normally a driver would set this flag in its probe
|
||||
method, at which time the device is guaranteed not to be
|
||||
autosuspended.)
|
||||
|
||||
If a driver does its I/O asynchronously in interrupt context, it
|
||||
should call usb_autopm_get_interface_async() before starting output and
|
||||
|
@ -422,20 +424,19 @@ it receives an input event, it should call
|
|||
|
||||
usb_mark_last_busy(struct usb_device *udev);
|
||||
|
||||
in the event handler. This sets udev->last_busy to the current time.
|
||||
udev->last_busy is the field used for idle-delay calculations;
|
||||
updating it will cause any pending autosuspend to be moved back. Most
|
||||
of the usb_autopm_* routines will also set the last_busy field to the
|
||||
current time.
|
||||
in the event handler. This tells the PM core that the device was just
|
||||
busy and therefore the next autosuspend idle-delay expiration should
|
||||
be pushed back. Many of the usb_autopm_* routines also make this call,
|
||||
so drivers need to worry only when interrupt-driven input arrives.
|
||||
|
||||
Asynchronous operation is always subject to races. For example, a
|
||||
driver may call one of the usb_autopm_*_interface_async() routines at
|
||||
a time when the core has just finished deciding the device has been
|
||||
idle for long enough but not yet gotten around to calling the driver's
|
||||
suspend method. The suspend method must be responsible for
|
||||
synchronizing with the output request routine and the URB completion
|
||||
handler; it should cause autosuspends to fail with -EBUSY if the
|
||||
driver needs to use the device.
|
||||
driver may call the usb_autopm_get_interface_async() routine at a time
|
||||
when the core has just finished deciding the device has been idle for
|
||||
long enough but not yet gotten around to calling the driver's suspend
|
||||
method. The suspend method must be responsible for synchronizing with
|
||||
the I/O request routine and the URB completion handler; it should
|
||||
cause autosuspends to fail with -EBUSY if the driver needs to use the
|
||||
device.
|
||||
|
||||
External suspend calls should never be allowed to fail in this way,
|
||||
only autosuspend calls. The driver can tell them apart by checking
|
||||
|
@ -472,7 +473,9 @@ Firstly, a device may already be autosuspended when a system suspend
|
|||
occurs. Since system suspends are supposed to be as transparent as
|
||||
possible, the device should remain suspended following the system
|
||||
resume. But this theory may not work out well in practice; over time
|
||||
the kernel's behavior in this regard has changed.
|
||||
the kernel's behavior in this regard has changed. As of 2.6.37 the
|
||||
policy is to resume all devices during a system resume and let them
|
||||
handle their own runtime suspends afterward.
|
||||
|
||||
Secondly, a dynamic power-management event may occur as a system
|
||||
suspend is underway. The window for this is short, since system
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
0 -> Unknown EM2800 video grabber (em2800) [eb1a:2800]
|
||||
1 -> Unknown EM2750/28xx video grabber (em2820/em2840) [eb1a:2710,eb1a:2820,eb1a:2821,eb1a:2860,eb1a:2861,eb1a:2862,eb1a:2863,eb1a:2870,eb1a:2881,eb1a:2883,eb1a:2868]
|
||||
1 -> Unknown EM2750/28xx video grabber (em2820/em2840) [eb1a:2710,eb1a:2820,eb1a:2821,eb1a:2860,eb1a:2861,eb1a:2862,eb1a:2863,eb1a:2870,eb1a:2881,eb1a:2883,eb1a:2868,eb1a:2875]
|
||||
2 -> Terratec Cinergy 250 USB (em2820/em2840) [0ccd:0036]
|
||||
3 -> Pinnacle PCTV USB 2 (em2820/em2840) [2304:0208]
|
||||
4 -> Hauppauge WinTV USB 2 (em2820/em2840) [2040:4200,2040:4201]
|
||||
|
@ -9,7 +9,7 @@
|
|||
8 -> Kworld USB2800 (em2800)
|
||||
9 -> Pinnacle Dazzle DVC 90/100/101/107 / Kaiser Baas Video to DVD maker (em2820/em2840) [1b80:e302,1b80:e304,2304:0207,2304:021a]
|
||||
10 -> Hauppauge WinTV HVR 900 (em2880) [2040:6500]
|
||||
11 -> Terratec Hybrid XS (em2880) [0ccd:0042]
|
||||
11 -> Terratec Hybrid XS (em2880)
|
||||
12 -> Kworld PVR TV 2800 RF (em2820/em2840)
|
||||
13 -> Terratec Prodigy XS (em2880) [0ccd:0047]
|
||||
14 -> SIIG AVTuner-PVR / Pixelview Prolink PlayTV USB 2.0 (em2820/em2840)
|
||||
|
@ -53,7 +53,7 @@
|
|||
52 -> DNT DA2 Hybrid (em2881)
|
||||
53 -> Pinnacle Hybrid Pro (em2881)
|
||||
54 -> Kworld VS-DVB-T 323UR (em2882) [eb1a:e323]
|
||||
55 -> Terratec Hybrid XS (em2882) (em2882) [0ccd:005e]
|
||||
55 -> Terratec Cinnergy Hybrid T USB XS (em2882) (em2882) [0ccd:005e,0ccd:0042]
|
||||
56 -> Pinnacle Hybrid Pro (2) (em2882) [2304:0226]
|
||||
57 -> Kworld PlusTV HD Hybrid 330 (em2883) [eb1a:a316]
|
||||
58 -> Compro VideoMate ForYou/Stereo (em2820/em2840) [185b:2041]
|
||||
|
|
|
@ -180,3 +180,5 @@
|
|||
179 -> Beholder BeholdTV A7 [5ace:7090]
|
||||
180 -> Avermedia PCI M733A [1461:4155,1461:4255]
|
||||
181 -> TechoTrend TT-budget T-3000 [13c2:2804]
|
||||
182 -> Kworld PCI SBTVD/ISDB-T Full-Seg Hybrid [17de:b136]
|
||||
183 -> Compro VideoMate Vista M1F [185b:c900]
|
||||
|
|
|
@ -1,8 +0,0 @@
|
|||
# kbuild trick to avoid linker error. Can be omitted if a module is built.
|
||||
obj- := dummy.o
|
||||
|
||||
# List of programs to build
|
||||
hostprogs-y := v4lgrab
|
||||
|
||||
# Tell kbuild to always build the programs
|
||||
always := $(hostprogs-y)
|
|
@ -1,191 +0,0 @@
|
|||
This is a driver for the CPiA PPC2 driven parallel connected
|
||||
Camera. For example the Creative WebcamII is CPiA driven.
|
||||
|
||||
) [1]Peter Pregler, Linz 2000, published under the [2]GNU GPL
|
||||
|
||||
---------------------------------------------------------------------------
|
||||
|
||||
USAGE:
|
||||
|
||||
General:
|
||||
========
|
||||
|
||||
1) Make sure you have created the video devices (/dev/video*):
|
||||
|
||||
- if you have a recent MAKEDEV do a 'cd /dev;./MAKEDEV video'
|
||||
- otherwise do a:
|
||||
|
||||
cd /dev
|
||||
mknod video0 c 81 0
|
||||
ln -s video0 video
|
||||
|
||||
2) Compile the kernel (see below for the list of options to use),
|
||||
configure your parport and reboot.
|
||||
|
||||
3) If all worked well you should get messages similar
|
||||
to the following (your versions may be different) on the console:
|
||||
|
||||
V4L-Driver for Vision CPiA based cameras v0.7.4
|
||||
parport0: read2 timeout.
|
||||
parport0: Multimedia device, VLSI Vision Ltd PPC2
|
||||
Parallel port driver for Vision CPiA based camera
|
||||
CPIA Version: 1.20 (2.0)
|
||||
CPIA PnP-ID: 0553:0002:0100
|
||||
VP-Version: 1.0 0100
|
||||
1 camera(s) found
|
||||
|
||||
|
||||
As modules:
|
||||
===========
|
||||
|
||||
Make sure you have selected the following kernel options (you can
|
||||
select all stuff as modules):
|
||||
|
||||
The cpia-stuff is in the section 'Character devices -> Video For Linux'.
|
||||
|
||||
CONFIG_PARPORT=m
|
||||
CONFIG_PARPORT_PC=m
|
||||
CONFIG_PARPORT_PC_FIFO=y
|
||||
CONFIG_PARPORT_1284=y
|
||||
CONFIG_VIDEO_DEV=m
|
||||
CONFIG_VIDEO_CPIA=m
|
||||
CONFIG_VIDEO_CPIA_PP=m
|
||||
|
||||
For autoloading of all those modules you need to tell module-init-tools
|
||||
some stuff. Add the following line to your module-init-tools config-file
|
||||
(e.g. /etc/modprobe.conf or wherever your distribution does store that
|
||||
stuff):
|
||||
|
||||
options parport_pc io=0x378 irq=7 dma=3
|
||||
alias char-major-81 cpia_pp
|
||||
|
||||
The first line tells the dma/irq channels to use. Those _must_ match
|
||||
the settings of your BIOS. Do NOT simply use the values above. See
|
||||
Documentation/parport.txt for more information about this. The second
|
||||
line associates the video-device file with the driver. Of cause you
|
||||
can also load the modules once upon boot (usually done in /etc/modules).
|
||||
|
||||
Linked into the kernel:
|
||||
=======================
|
||||
|
||||
Make sure you have selected the following kernel options. Note that
|
||||
you cannot compile the parport-stuff as modules and the cpia-driver
|
||||
statically (the other way round is okay though).
|
||||
|
||||
The cpia-stuff is in the section 'Character devices -> Video For Linux'.
|
||||
|
||||
CONFIG_PARPORT=y
|
||||
CONFIG_PARPORT_PC=y
|
||||
CONFIG_PARPORT_PC_FIFO=y
|
||||
CONFIG_PARPORT_1284=y
|
||||
CONFIG_VIDEO_DEV=y
|
||||
CONFIG_VIDEO_CPIA=y
|
||||
CONFIG_VIDEO_CPIA_PP=y
|
||||
|
||||
To use DMA/irq you will need to tell the kernel upon boot time the
|
||||
hardware configuration of the parport. You can give the boot-parameter
|
||||
at the LILO-prompt or specify it in lilo.conf. I use the following
|
||||
append-line in lilo.conf:
|
||||
|
||||
append="parport=0x378,7,3"
|
||||
|
||||
See Documentation/parport.txt for more information about the
|
||||
configuration of the parport and the values given above. Do not simply
|
||||
use the values given above.
|
||||
|
||||
---------------------------------------------------------------------------
|
||||
FEATURES:
|
||||
|
||||
- mmap/read v4l-interface (but no overlay)
|
||||
- image formats: CIF/QCIF, SIF/QSIF, various others used by isabel;
|
||||
note: all sizes except CIF/QCIF are implemented by clipping, i.e.
|
||||
pixels are not uploaded from the camera
|
||||
- palettes: VIDEO_PALETTE_GRAY, VIDEO_PALETTE_RGB565, VIDEO_PALETTE_RGB555,
|
||||
VIDEO_PALETTE_RGB24, VIDEO_PALETTE_RGB32, VIDEO_PALETTE_YUYV,
|
||||
VIDEO_PALETTE_UYVY, VIDEO_PALETTE_YUV422
|
||||
- state information (color balance, exposure, ...) is preserved between
|
||||
device opens
|
||||
- complete control over camera via proc-interface (_all_ camera settings are
|
||||
supported), there is also a python-gtk application available for this [3]
|
||||
- works under SMP (but the driver is completely serialized and synchronous)
|
||||
so you get no benefit from SMP, but at least it does not crash your box
|
||||
- might work for non-Intel architecture, let us know about this
|
||||
|
||||
---------------------------------------------------------------------------
|
||||
TESTED APPLICATIONS:
|
||||
|
||||
- a simple test application based on Xt is available at [3]
|
||||
- another test-application based on gqcam-0.4 (uses GTK)
|
||||
- gqcam-0.6 should work
|
||||
- xawtv-3.x (also the webcam software)
|
||||
- xawtv-2.46
|
||||
- w3cam (cgi-interface and vidcat, e.g. you may try out 'vidcat |xv
|
||||
-maxpect -root -quit +noresetroot -rmode 5 -')
|
||||
- vic, the MBONE video conferencing tool (version 2.8ucl4-1)
|
||||
- isabel 3R4beta (barely working, but AFAICT all the problems are on
|
||||
their side)
|
||||
- camserv-0.40
|
||||
|
||||
See [3] for pointers to v4l-applications.
|
||||
|
||||
---------------------------------------------------------------------------
|
||||
KNOWN PROBLEMS:
|
||||
|
||||
- some applications do not handle the image format correctly, you will
|
||||
see strange horizontal stripes instead of a nice picture -> make sure
|
||||
your application does use a supported image size or queries the driver
|
||||
for the actually used size (reason behind this: the camera cannot
|
||||
provide any image format, so if size NxM is requested the driver will
|
||||
use a format to the closest fitting N1xM1, the application should now
|
||||
query for this granted size, most applications do not).
|
||||
- all the todo ;)
|
||||
- if there is not enough light and the picture is too dark try to
|
||||
adjust the SetSensorFPS setting, automatic frame rate adjustment
|
||||
has its price
|
||||
- do not try out isabel 3R4beta (built 135), you will be disappointed
|
||||
|
||||
---------------------------------------------------------------------------
|
||||
TODO:
|
||||
|
||||
- multiple camera support (struct camera or something) - This should work,
|
||||
but hasn't been tested yet.
|
||||
- architecture independence?
|
||||
- SMP-safe asynchronous mmap interface
|
||||
- nibble mode for old parport interfaces
|
||||
- streaming capture, this should give a performance gain
|
||||
|
||||
---------------------------------------------------------------------------
|
||||
IMPLEMENTATION NOTES:
|
||||
|
||||
The camera can act in two modes, streaming or grabbing. Right now a
|
||||
polling grab-scheme is used. Maybe interrupt driven streaming will be
|
||||
used for a asynchronous mmap interface in the next major release of the
|
||||
driver. This might give a better frame rate.
|
||||
|
||||
---------------------------------------------------------------------------
|
||||
THANKS (in no particular order):
|
||||
|
||||
- Scott J. Bertin <sbertin@mindspring.com> for cleanups, the proc-filesystem
|
||||
and much more
|
||||
- Henry Bruce <whb@vvl.co.uk> for providing developers information about
|
||||
the CPiA chip, I wish all companies would treat Linux as seriously
|
||||
- Karoly Erdei <Karoly.Erdei@risc.uni-linz.ac.at> and RISC-Linz for being
|
||||
my boss ;) resp. my employer and for providing me the hardware and
|
||||
allow me to devote some working time to this project
|
||||
- Manuel J. Petit de Gabriel <mpetit@dit.upm.es> for providing help
|
||||
with Isabel (http://isabel.dit.upm.es/)
|
||||
- Bas Huisman <bhuism@cs.utwente.nl> for writing the initial parport code
|
||||
- Jarl Totland <Jarl.Totland@bdc.no> for setting up the mailing list
|
||||
and maintaining the web-server[3]
|
||||
- Chris Whiteford <Chris@informinteractive.com> for fixes related to the
|
||||
1.02 firmware
|
||||
- special kudos to all the tester whose machines crashed and/or
|
||||
will crash. :)
|
||||
|
||||
---------------------------------------------------------------------------
|
||||
REFERENCES
|
||||
|
||||
1. http://www.risc.uni-linz.ac.at/
|
||||
mailto:Peter_Pregler@email.com
|
||||
2. see the file COPYING in the top directory of the kernel tree
|
||||
3. http://webcam.sourceforge.net/
|
|
@ -322,76 +322,11 @@ your IRQs and make sure the card has its own interrupts.
|
|||
|
||||
4. Programming interface
|
||||
|
||||
This driver conforms to video4linux and video4linux2, both can be used to
|
||||
use the driver. Since video4linux didn't provide adequate calls to fully
|
||||
use the cards' features, we've introduced several programming extensions,
|
||||
which are currently officially accepted in the 2.4.x branch of the kernel.
|
||||
These extensions are known as the v4l/mjpeg extensions. See zoran.h for
|
||||
details (structs/ioctls).
|
||||
|
||||
Information - video4linux:
|
||||
http://linux.bytesex.org/v4l2/API.html
|
||||
Documentation/video4linux/API.html
|
||||
/usr/include/linux/videodev.h
|
||||
|
||||
Information - video4linux/mjpeg extensions:
|
||||
./zoran.h
|
||||
(also see below)
|
||||
|
||||
Information - video4linux2:
|
||||
http://linuxtv.org
|
||||
http://v4l2spec.bytesex.org/
|
||||
/usr/include/linux/videodev2.h
|
||||
|
||||
More information on the video4linux/mjpeg extensions, by Serguei
|
||||
Miridonovi and Rainer Johanni:
|
||||
--
|
||||
The ioctls for that interface are as follows:
|
||||
|
||||
BUZIOC_G_PARAMS
|
||||
BUZIOC_S_PARAMS
|
||||
|
||||
Get and set the parameters of the buz. The user should always do a
|
||||
BUZIOC_G_PARAMS (with a struct buz_params) to obtain the default
|
||||
settings, change what he likes and then make a BUZIOC_S_PARAMS call.
|
||||
|
||||
BUZIOC_REQBUFS
|
||||
|
||||
Before being able to capture/playback, the user has to request
|
||||
the buffers he is wanting to use. Fill the structure
|
||||
zoran_requestbuffers with the size (recommended: 256*1024) and
|
||||
the number (recommended 32 up to 256). There are no such restrictions
|
||||
as for the Video for Linux buffers, you should LEAVE SUFFICIENT
|
||||
MEMORY for your system however, else strange things will happen ....
|
||||
On return, the zoran_requestbuffers structure contains number and
|
||||
size of the actually allocated buffers.
|
||||
You should use these numbers for doing a mmap of the buffers
|
||||
into the user space.
|
||||
The BUZIOC_REQBUFS ioctl also makes it happen, that the next mmap
|
||||
maps the MJPEG buffer instead of the V4L buffers.
|
||||
|
||||
BUZIOC_QBUF_CAPT
|
||||
BUZIOC_QBUF_PLAY
|
||||
|
||||
Queue a buffer for capture or playback. The first call also starts
|
||||
streaming capture. When streaming capture is going on, you may
|
||||
only queue further buffers or issue syncs until streaming
|
||||
capture is switched off again with a argument of -1 to
|
||||
a BUZIOC_QBUF_CAPT/BUZIOC_QBUF_PLAY ioctl.
|
||||
|
||||
BUZIOC_SYNC
|
||||
|
||||
Issue this ioctl when all buffers are queued. This ioctl will
|
||||
block until the first buffer becomes free for saving its
|
||||
data to disk (after BUZIOC_QBUF_CAPT) or for reuse (after BUZIOC_QBUF_PLAY).
|
||||
|
||||
BUZIOC_G_STATUS
|
||||
|
||||
Get the status of the input lines (video source connected/norm).
|
||||
This driver conforms to video4linux2. Support for V4L1 and for the custom
|
||||
zoran ioctls has been removed in kernel 2.6.38.
|
||||
|
||||
For programming example, please, look at lavrec.c and lavplay.c code in
|
||||
lavtools-1.2p2 package (URL: http://www.cicese.mx/)
|
||||
and the 'examples' directory in the original Buz driver distribution.
|
||||
the MJPEG-tools (http://mjpeg.sf.net/).
|
||||
|
||||
Additional notes for software developers:
|
||||
|
||||
|
@ -402,9 +337,6 @@ Additional notes for software developers:
|
|||
standard is "more constant" for current country than geometry
|
||||
settings of a variety of TV capture cards which may work in ITU or
|
||||
square pixel format.
|
||||
--
|
||||
Please note that lavplay/lavrec are also included in the MJPEG-tools
|
||||
(http://mjpeg.sf.net/).
|
||||
|
||||
===========================
|
||||
|
||||
|
|
|
@ -464,10 +464,6 @@ Siemens
|
|||
-------
|
||||
Multimedia eXtension Board (MXB) (SAA7146, SAA7111)
|
||||
|
||||
Stradis
|
||||
-------
|
||||
SDM275,SDM250,SDM026,SDM025 (SAA7146, IBMMPEG2): MPEG2 decoder only
|
||||
|
||||
Powercolor
|
||||
----------
|
||||
MTV878
|
||||
|
|
|
@ -366,6 +366,7 @@ t613 17a1:0128 TASCORP JPEG Webcam, NGS Cyclops
|
|||
vc032x 17ef:4802 Lenovo Vc0323+MI1310_SOC
|
||||
pac207 2001:f115 D-Link DSB-C120
|
||||
sq905c 2770:9050 Disney pix micro (CIF)
|
||||
sq905c 2770:9051 Lego Bionicle
|
||||
sq905c 2770:9052 Disney pix micro 2 (VGA)
|
||||
sq905c 2770:905c All 11 known cameras with this ID
|
||||
sq905 2770:9120 All 24 known cameras with this ID
|
||||
|
|
|
@ -45,8 +45,6 @@ module argument syntax (<param>=<value> when passing the option to the
|
|||
module or meye.<param>=<value> on the kernel boot line when meye is
|
||||
statically linked into the kernel). Those options are:
|
||||
|
||||
forcev4l1: force use of V4L1 API instead of V4L2
|
||||
|
||||
gbuffers: number of capture buffers, default is 2 (32 max)
|
||||
|
||||
gbufsize: size of each capture buffer, default is 614400
|
||||
|
@ -79,9 +77,8 @@ Usage:
|
|||
Private API:
|
||||
------------
|
||||
|
||||
The driver supports frame grabbing with the video4linux API
|
||||
(either v4l1 or v4l2), so all video4linux tools (like xawtv)
|
||||
should work with this driver.
|
||||
The driver supports frame grabbing with the video4linux API,
|
||||
so all video4linux tools (like xawtv) should work with this driver.
|
||||
|
||||
Besides the video4linux interface, the driver has a private interface
|
||||
for accessing the Motion Eye extended parameters (camera sharpness,
|
||||
|
@ -123,7 +120,4 @@ Private API:
|
|||
Bugs / Todo:
|
||||
------------
|
||||
|
||||
- the driver could be much cleaned up by removing the v4l1 support.
|
||||
However, this means all v4l1-only applications will stop working.
|
||||
|
||||
- 'motioneye' still uses the meye private v4l1 API extensions.
|
||||
|
|
|
@ -1,201 +0,0 @@
|
|||
/* Simple Video4Linux image grabber. */
|
||||
/*
|
||||
* Video4Linux Driver Test/Example Framegrabbing Program
|
||||
*
|
||||
* Compile with:
|
||||
* gcc -s -Wall -Wstrict-prototypes v4lgrab.c -o v4lgrab
|
||||
* Use as:
|
||||
* v4lgrab >image.ppm
|
||||
*
|
||||
* Copyright (C) 1998-05-03, Phil Blundell <philb@gnu.org>
|
||||
* Copied from http://www.tazenda.demon.co.uk/phil/vgrabber.c
|
||||
* with minor modifications (Dave Forrest, drf5n@virginia.edu).
|
||||
*
|
||||
*
|
||||
* For some cameras you may need to pre-load libv4l to perform
|
||||
* the necessary decompression, e.g.:
|
||||
*
|
||||
* export LD_PRELOAD=/usr/lib/libv4l/v4l1compat.so
|
||||
* ./v4lgrab >image.ppm
|
||||
*
|
||||
* see http://hansdegoede.livejournal.com/3636.html for details.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <unistd.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdio.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/videodev.h>
|
||||
|
||||
#define VIDEO_DEV "/dev/video0"
|
||||
|
||||
/* Stole this from tvset.c */
|
||||
|
||||
#define READ_VIDEO_PIXEL(buf, format, depth, r, g, b) \
|
||||
{ \
|
||||
switch (format) \
|
||||
{ \
|
||||
case VIDEO_PALETTE_GREY: \
|
||||
switch (depth) \
|
||||
{ \
|
||||
case 4: \
|
||||
case 6: \
|
||||
case 8: \
|
||||
(r) = (g) = (b) = (*buf++ << 8);\
|
||||
break; \
|
||||
\
|
||||
case 16: \
|
||||
(r) = (g) = (b) = \
|
||||
*((unsigned short *) buf); \
|
||||
buf += 2; \
|
||||
break; \
|
||||
} \
|
||||
break; \
|
||||
\
|
||||
\
|
||||
case VIDEO_PALETTE_RGB565: \
|
||||
{ \
|
||||
unsigned short tmp = *(unsigned short *)buf; \
|
||||
(r) = tmp&0xF800; \
|
||||
(g) = (tmp<<5)&0xFC00; \
|
||||
(b) = (tmp<<11)&0xF800; \
|
||||
buf += 2; \
|
||||
} \
|
||||
break; \
|
||||
\
|
||||
case VIDEO_PALETTE_RGB555: \
|
||||
(r) = (buf[0]&0xF8)<<8; \
|
||||
(g) = ((buf[0] << 5 | buf[1] >> 3)&0xF8)<<8; \
|
||||
(b) = ((buf[1] << 2 ) & 0xF8)<<8; \
|
||||
buf += 2; \
|
||||
break; \
|
||||
\
|
||||
case VIDEO_PALETTE_RGB24: \
|
||||
(r) = buf[0] << 8; (g) = buf[1] << 8; \
|
||||
(b) = buf[2] << 8; \
|
||||
buf += 3; \
|
||||
break; \
|
||||
\
|
||||
default: \
|
||||
fprintf(stderr, \
|
||||
"Format %d not yet supported\n", \
|
||||
format); \
|
||||
} \
|
||||
}
|
||||
|
||||
static int get_brightness_adj(unsigned char *image, long size, int *brightness) {
|
||||
long i, tot = 0;
|
||||
for (i=0;i<size*3;i++)
|
||||
tot += image[i];
|
||||
*brightness = (128 - tot/(size*3))/3;
|
||||
return !((tot/(size*3)) >= 126 && (tot/(size*3)) <= 130);
|
||||
}
|
||||
|
||||
int main(int argc, char ** argv)
|
||||
{
|
||||
int fd = open(VIDEO_DEV, O_RDONLY), f;
|
||||
struct video_capability cap;
|
||||
struct video_window win;
|
||||
struct video_picture vpic;
|
||||
|
||||
unsigned char *buffer, *src;
|
||||
int bpp = 24, r = 0, g = 0, b = 0;
|
||||
unsigned int i, src_depth = 16;
|
||||
|
||||
if (fd < 0) {
|
||||
perror(VIDEO_DEV);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (ioctl(fd, VIDIOCGCAP, &cap) < 0) {
|
||||
perror("VIDIOGCAP");
|
||||
fprintf(stderr, "(" VIDEO_DEV " not a video4linux device?)\n");
|
||||
close(fd);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (ioctl(fd, VIDIOCGWIN, &win) < 0) {
|
||||
perror("VIDIOCGWIN");
|
||||
close(fd);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (ioctl(fd, VIDIOCGPICT, &vpic) < 0) {
|
||||
perror("VIDIOCGPICT");
|
||||
close(fd);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (cap.type & VID_TYPE_MONOCHROME) {
|
||||
vpic.depth=8;
|
||||
vpic.palette=VIDEO_PALETTE_GREY; /* 8bit grey */
|
||||
if(ioctl(fd, VIDIOCSPICT, &vpic) < 0) {
|
||||
vpic.depth=6;
|
||||
if(ioctl(fd, VIDIOCSPICT, &vpic) < 0) {
|
||||
vpic.depth=4;
|
||||
if(ioctl(fd, VIDIOCSPICT, &vpic) < 0) {
|
||||
fprintf(stderr, "Unable to find a supported capture format.\n");
|
||||
close(fd);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
vpic.depth=24;
|
||||
vpic.palette=VIDEO_PALETTE_RGB24;
|
||||
|
||||
if(ioctl(fd, VIDIOCSPICT, &vpic) < 0) {
|
||||
vpic.palette=VIDEO_PALETTE_RGB565;
|
||||
vpic.depth=16;
|
||||
|
||||
if(ioctl(fd, VIDIOCSPICT, &vpic)==-1) {
|
||||
vpic.palette=VIDEO_PALETTE_RGB555;
|
||||
vpic.depth=15;
|
||||
|
||||
if(ioctl(fd, VIDIOCSPICT, &vpic)==-1) {
|
||||
fprintf(stderr, "Unable to find a supported capture format.\n");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
buffer = malloc(win.width * win.height * bpp);
|
||||
if (!buffer) {
|
||||
fprintf(stderr, "Out of memory.\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
do {
|
||||
int newbright;
|
||||
read(fd, buffer, win.width * win.height * bpp);
|
||||
f = get_brightness_adj(buffer, win.width * win.height, &newbright);
|
||||
if (f) {
|
||||
vpic.brightness += (newbright << 8);
|
||||
if(ioctl(fd, VIDIOCSPICT, &vpic)==-1) {
|
||||
perror("VIDIOSPICT");
|
||||
break;
|
||||
}
|
||||
}
|
||||
} while (f);
|
||||
|
||||
fprintf(stdout, "P6\n%d %d 255\n", win.width, win.height);
|
||||
|
||||
src = buffer;
|
||||
|
||||
for (i = 0; i < win.width * win.height; i++) {
|
||||
READ_VIDEO_PIXEL(src, vpic.palette, src_depth, r, g, b);
|
||||
fputc(r>>8, stdout);
|
||||
fputc(g>>8, stdout);
|
||||
fputc(b>>8, stdout);
|
||||
}
|
||||
|
||||
close(fd);
|
||||
return 0;
|
||||
}
|
|
@ -247,8 +247,6 @@ calls. The relevant helper functions are:
|
|||
int nonblocking);
|
||||
int videobuf_streamon(struct videobuf_queue *q);
|
||||
int videobuf_streamoff(struct videobuf_queue *q);
|
||||
int videobuf_cgmbuf(struct videobuf_queue *q, struct video_mbuf *mbuf,
|
||||
int count);
|
||||
|
||||
So, for example, a VIDIOC_REQBUFS call turns into a call to the driver's
|
||||
vidioc_reqbufs() callback which, in turn, usually only needs to locate the
|
||||
|
@ -258,10 +256,7 @@ boilerplate in a lot of V4L2 drivers.
|
|||
|
||||
The vidioc_streamon() and vidioc_streamoff() functions will be a bit more
|
||||
complex, of course, since they will also need to deal with starting and
|
||||
stopping the capture engine. videobuf_cgmbuf(), called from the driver's
|
||||
vidiocgmbuf() function, only exists if the V4L1 compatibility module has
|
||||
been selected with CONFIG_VIDEO_V4L1_COMPAT, so its use must be surrounded
|
||||
with #ifdef directives.
|
||||
stopping the capture engine.
|
||||
|
||||
Buffer allocation
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
obj- := dummy.o
|
||||
|
||||
# List of programs to build
|
||||
hostprogs-y := slabinfo page-types hugepage-mmap hugepage-shm map_hugetlb
|
||||
hostprogs-y := page-types hugepage-mmap hugepage-shm map_hugetlb
|
||||
|
||||
# Tell kbuild to always build the programs
|
||||
always := $(hostprogs-y)
|
||||
|
|
48
MAINTAINERS
48
MAINTAINERS
|
@ -1423,7 +1423,9 @@ F: drivers/net/tg3.*
|
|||
BROADCOM BRCM80211 IEEE802.11n WIRELESS DRIVER
|
||||
M: Brett Rudley <brudley@broadcom.com>
|
||||
M: Henry Ptasinski <henryp@broadcom.com>
|
||||
M: Nohee Ko <noheek@broadcom.com>
|
||||
M: Dowan Kim <dowan@broadcom.com>
|
||||
M: Roland Vossen <rvossen@broadcom.com>
|
||||
M: Arend van Spriel <arend@broadcom.com>
|
||||
L: linux-wireless@vger.kernel.org
|
||||
S: Supported
|
||||
F: drivers/staging/brcm80211/
|
||||
|
@ -2271,6 +2273,14 @@ W: http://acpi4asus.sf.net
|
|||
S: Maintained
|
||||
F: drivers/platform/x86/eeepc-laptop.c
|
||||
|
||||
EEEPC WMI EXTRAS DRIVER
|
||||
M: Corentin Chary <corentincj@iksaif.net>
|
||||
L: acpi4asus-user@lists.sourceforge.net
|
||||
L: platform-driver-x86@vger.kernel.org
|
||||
W: http://acpi4asus.sf.net
|
||||
S: Maintained
|
||||
F: drivers/platform/x86/eeepc-wmi.c
|
||||
|
||||
EFIFB FRAMEBUFFER DRIVER
|
||||
L: linux-fbdev@vger.kernel.org
|
||||
M: Peter Jones <pjones@redhat.com>
|
||||
|
@ -3065,8 +3075,10 @@ F: drivers/input/
|
|||
INPUT MULTITOUCH (MT) PROTOCOL
|
||||
M: Henrik Rydberg <rydberg@euromail.se>
|
||||
L: linux-input@vger.kernel.org
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/rydberg/input-mt.git
|
||||
S: Maintained
|
||||
F: Documentation/input/multi-touch-protocol.txt
|
||||
F: drivers/input/input-mt.c
|
||||
K: \b(ABS|SYN)_MT_
|
||||
|
||||
INTEL IDLE DRIVER
|
||||
|
@ -4266,6 +4278,7 @@ NILFS2 FILESYSTEM
|
|||
M: KONISHI Ryusuke <konishi.ryusuke@lab.ntt.co.jp>
|
||||
L: linux-nilfs@vger.kernel.org
|
||||
W: http://www.nilfs.org/en/
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/ryusuke/nilfs2.git
|
||||
S: Supported
|
||||
F: Documentation/filesystems/nilfs2.txt
|
||||
F: fs/nilfs2/
|
||||
|
@ -4363,6 +4376,20 @@ M: Deepak Saxena <dsaxena@plexity.net>
|
|||
S: Maintained
|
||||
F: drivers/char/hw_random/omap-rng.c
|
||||
|
||||
OMAP HWMOD SUPPORT
|
||||
M: Benoît Cousson <b-cousson@ti.com>
|
||||
M: Paul Walmsley <paul@pwsan.com>
|
||||
L: linux-omap@vger.kernel.org
|
||||
S: Maintained
|
||||
F: arch/arm/mach-omap2/omap_hwmod.c
|
||||
F: arch/arm/plat-omap/include/plat/omap_hwmod.h
|
||||
|
||||
OMAP HWMOD DATA FOR OMAP4-BASED DEVICES
|
||||
M: Benoît Cousson <b-cousson@ti.com>
|
||||
L: linux-omap@vger.kernel.org
|
||||
S: Maintained
|
||||
F: arch/arm/mach-omap2/omap_hwmod_44xx_data.c
|
||||
|
||||
OMAP USB SUPPORT
|
||||
M: Felipe Balbi <balbi@ti.com>
|
||||
M: David Brownell <dbrownell@users.sourceforge.net>
|
||||
|
@ -4637,6 +4664,16 @@ S: Maintained
|
|||
F: crypto/pcrypt.c
|
||||
F: include/crypto/pcrypt.h
|
||||
|
||||
PER-CPU MEMORY ALLOCATOR
|
||||
M: Tejun Heo <tj@kernel.org>
|
||||
M: Christoph Lameter <cl@linux-foundation.org>
|
||||
L: linux-kernel@vger.kernel.org
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu.git
|
||||
S: Maintained
|
||||
F: include/linux/percpu*.h
|
||||
F: mm/percpu*.c
|
||||
F: arch/*/include/asm/percpu.h
|
||||
|
||||
PER-TASK DELAY ACCOUNTING
|
||||
M: Balbir Singh <balbir@linux.vnet.ibm.com>
|
||||
S: Maintained
|
||||
|
@ -5754,12 +5791,6 @@ M: Ion Badulescu <ionut@badula.org>
|
|||
S: Odd Fixes
|
||||
F: drivers/net/starfire*
|
||||
|
||||
STRADIS MPEG-2 DECODER DRIVER
|
||||
M: Nathan Laredo <laredo@gnu.org>
|
||||
W: http://www.stradis.com/
|
||||
S: Maintained
|
||||
F: drivers/media/video/stradis.c
|
||||
|
||||
SUN3/3X
|
||||
M: Sam Creasey <sammy@sammy.net>
|
||||
W: http://sammy.net/sun3/
|
||||
|
@ -5909,7 +5940,8 @@ F: drivers/net/tlan.*
|
|||
TOMOYO SECURITY MODULE
|
||||
M: Kentaro Takeda <takedakn@nttdata.co.jp>
|
||||
M: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
|
||||
L: tomoyo-users-en@lists.sourceforge.jp (subscribers-only, for developers and users in English)
|
||||
L: tomoyo-dev-en@lists.sourceforge.jp (subscribers-only, for developers in English)
|
||||
L: tomoyo-users-en@lists.sourceforge.jp (subscribers-only, for users in English)
|
||||
L: tomoyo-dev@lists.sourceforge.jp (subscribers-only, for developers in Japanese)
|
||||
L: tomoyo-users@lists.sourceforge.jp (subscribers-only, for users in Japanese)
|
||||
W: http://tomoyo.sourceforge.jp/
|
||||
|
|
1
Makefile
1
Makefile
|
@ -224,6 +224,7 @@ ifeq ($(ARCH),m68knommu)
|
|||
endif
|
||||
|
||||
KCONFIG_CONFIG ?= .config
|
||||
export KCONFIG_CONFIG
|
||||
|
||||
# SHELL used by kbuild
|
||||
CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
|
||||
|
|
|
@ -92,6 +92,7 @@
|
|||
#define TIOCGSID 0x5429 /* Return the session ID of FD */
|
||||
#define TIOCGPTN _IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
|
||||
#define TIOCSPTLCK _IOW('T',0x31, int) /* Lock/unlock Pty */
|
||||
#define TIOCGDEV _IOR('T',0x32, unsigned int) /* Get primary device node of /dev/console */
|
||||
#define TIOCSIG _IOW('T',0x36, int) /* Generate signal on Pty slave */
|
||||
|
||||
#define TIOCSERCONFIG 0x5453
|
||||
|
|
|
@ -632,9 +632,15 @@ config ARCH_MSM
|
|||
(clock and power control, etc).
|
||||
|
||||
config ARCH_SHMOBILE
|
||||
bool "Renesas SH-Mobile"
|
||||
bool "Renesas SH-Mobile / R-Mobile"
|
||||
select HAVE_CLK
|
||||
select CLKDEV_LOOKUP
|
||||
select GENERIC_CLOCKEVENTS
|
||||
select NO_IOPORT
|
||||
select SPARSE_IRQ
|
||||
select MULTI_IRQ_HANDLER
|
||||
help
|
||||
Support for Renesas's SH-Mobile ARM platforms
|
||||
Support for Renesas's SH-Mobile and R-Mobile ARM platforms.
|
||||
|
||||
config ARCH_RPC
|
||||
bool "RiscPC"
|
||||
|
@ -1252,7 +1258,7 @@ config SMP
|
|||
depends on REALVIEW_EB_ARM11MP || REALVIEW_EB_A9MP || \
|
||||
MACH_REALVIEW_PB11MP || MACH_REALVIEW_PBX || ARCH_OMAP4 || \
|
||||
ARCH_S5PV310 || ARCH_TEGRA || ARCH_U8500 || ARCH_VEXPRESS_CA9X4 || \
|
||||
ARCH_MSM_SCORPIONMP
|
||||
ARCH_MSM_SCORPIONMP || ARCH_SHMOBILE
|
||||
select USE_GENERIC_SMP_HELPERS
|
||||
select HAVE_ARM_SCU if !ARCH_MSM_SCORPIONMP
|
||||
help
|
||||
|
|
|
@ -0,0 +1,83 @@
|
|||
CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_LOG_BUF_SHIFT=16
|
||||
CONFIG_NAMESPACES=y
|
||||
# CONFIG_UTS_NS is not set
|
||||
# CONFIG_IPC_NS is not set
|
||||
# CONFIG_USER_NS is not set
|
||||
# CONFIG_PID_NS is not set
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
CONFIG_EMBEDDED=y
|
||||
CONFIG_SLAB=y
|
||||
# CONFIG_BLK_DEV_BSG is not set
|
||||
# CONFIG_IOSCHED_DEADLINE is not set
|
||||
# CONFIG_IOSCHED_CFQ is not set
|
||||
CONFIG_ARCH_SHMOBILE=y
|
||||
CONFIG_ARCH_SH73A0=y
|
||||
CONFIG_MACH_AG5EVM=y
|
||||
CONFIG_MEMORY_SIZE=0x10000000
|
||||
CONFIG_CPU_BPREDICT_DISABLE=y
|
||||
CONFIG_ARM_ERRATA_430973=y
|
||||
CONFIG_ARM_ERRATA_458693=y
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_AEABI=y
|
||||
# CONFIG_OABI_COMPAT is not set
|
||||
CONFIG_HIGHMEM=y
|
||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
||||
CONFIG_CMDLINE="console=tty0 console=ttySC2,115200 earlyprintk=sh-sci.2,115200 ignore_loglevel"
|
||||
CONFIG_CMDLINE_FORCE=y
|
||||
CONFIG_KEXEC=y
|
||||
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
|
||||
CONFIG_PM=y
|
||||
# CONFIG_SUSPEND is not set
|
||||
CONFIG_PM_RUNTIME=y
|
||||
CONFIG_NET=y
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_INET=y
|
||||
# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
|
||||
# CONFIG_INET_XFRM_MODE_TUNNEL is not set
|
||||
# CONFIG_INET_XFRM_MODE_BEET is not set
|
||||
# CONFIG_INET_LRO is not set
|
||||
# CONFIG_INET_DIAG is not set
|
||||
# CONFIG_IPV6 is not set
|
||||
# CONFIG_WIRELESS is not set
|
||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||
# CONFIG_BLK_DEV is not set
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_SMSC911X=y
|
||||
# CONFIG_NETDEV_1000 is not set
|
||||
# CONFIG_NETDEV_10000 is not set
|
||||
# CONFIG_WLAN is not set
|
||||
CONFIG_INPUT_SPARSEKMAP=y
|
||||
# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
|
||||
CONFIG_INPUT_EVDEV=y
|
||||
# CONFIG_INPUT_KEYBOARD is not set
|
||||
# CONFIG_INPUT_MOUSE is not set
|
||||
CONFIG_SERIAL_SH_SCI=y
|
||||
CONFIG_SERIAL_SH_SCI_NR_UARTS=9
|
||||
CONFIG_SERIAL_SH_SCI_CONSOLE=y
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
CONFIG_I2C=y
|
||||
CONFIG_I2C_SH_MOBILE=y
|
||||
# CONFIG_HWMON is not set
|
||||
# CONFIG_MFD_SUPPORT is not set
|
||||
CONFIG_FB=y
|
||||
CONFIG_FB_SH_MOBILE_LCDC=y
|
||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
|
||||
# CONFIG_HID_SUPPORT is not set
|
||||
# CONFIG_USB_SUPPORT is not set
|
||||
# CONFIG_DNOTIFY is not set
|
||||
# CONFIG_INOTIFY_USER is not set
|
||||
CONFIG_TMPFS=y
|
||||
# CONFIG_MISC_FILESYSTEMS is not set
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
# CONFIG_FTRACE is not set
|
|
@ -1,121 +0,0 @@
|
|||
CONFIG_EXPERIMENTAL=y
|
||||
# CONFIG_SWAP is not set
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_TREE_PREEMPT_RCU=y
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_EMBEDDED=y
|
||||
# CONFIG_KALLSYMS is not set
|
||||
CONFIG_SLAB=y
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_MODULE_FORCE_UNLOAD=y
|
||||
# CONFIG_LBDAF is not set
|
||||
CONFIG_ARCH_OMAP=y
|
||||
CONFIG_ARCH_OMAP1=y
|
||||
CONFIG_OMAP_MBOX_FWK=m
|
||||
CONFIG_MACH_AMS_DELTA=y
|
||||
CONFIG_OMAP_ARM_150MHZ=y
|
||||
# CONFIG_OMAP_ARM_60MHZ is not set
|
||||
CONFIG_PREEMPT=y
|
||||
CONFIG_AEABI=y
|
||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
||||
CONFIG_CMDLINE="mem=32M console=ttyS0,115200n8 root=/dev/ram0 initrd=0x11c00000,4M"
|
||||
CONFIG_FPE_NWFPE=y
|
||||
CONFIG_PM=y
|
||||
# CONFIG_SUSPEND is not set
|
||||
CONFIG_PM_RUNTIME=y
|
||||
CONFIG_NET=y
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_INET=y
|
||||
CONFIG_IP_MULTICAST=y
|
||||
CONFIG_IPV6=y
|
||||
# CONFIG_FW_LOADER is not set
|
||||
CONFIG_MTD=y
|
||||
CONFIG_MTD_PARTITIONS=y
|
||||
CONFIG_MTD_CHAR=y
|
||||
CONFIG_MTD_BLOCK=y
|
||||
CONFIG_MTD_NAND=y
|
||||
CONFIG_MTD_NAND_AMS_DELTA=y
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_SIZE=8192
|
||||
CONFIG_SCSI=y
|
||||
CONFIG_BLK_DEV_SD=y
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_USB_CATC=y
|
||||
CONFIG_USB_KAWETH=y
|
||||
CONFIG_USB_PEGASUS=y
|
||||
CONFIG_USB_RTL8150=y
|
||||
CONFIG_USB_USBNET=y
|
||||
CONFIG_PPP=y
|
||||
CONFIG_PPP_MULTILINK=y
|
||||
CONFIG_INPUT_EVDEV=y
|
||||
CONFIG_KEYBOARD_OMAP=y
|
||||
# CONFIG_INPUT_MOUSE is not set
|
||||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
CONFIG_HW_RANDOM=y
|
||||
CONFIG_I2C=y
|
||||
CONFIG_I2C_CHARDEV=y
|
||||
CONFIG_I2C_OMAP=y
|
||||
CONFIG_GPIO_SYSFS=y
|
||||
# CONFIG_HWMON is not set
|
||||
CONFIG_FB=y
|
||||
CONFIG_FIRMWARE_EDID=y
|
||||
CONFIG_FB_OMAP=y
|
||||
CONFIG_BACKLIGHT_LCD_SUPPORT=y
|
||||
CONFIG_LCD_CLASS_DEVICE=y
|
||||
# CONFIG_VGA_CONSOLE is not set
|
||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
CONFIG_FONTS=y
|
||||
CONFIG_FONT_6x11=y
|
||||
CONFIG_LOGO=y
|
||||
# CONFIG_LOGO_LINUX_MONO is not set
|
||||
# CONFIG_LOGO_LINUX_VGA16 is not set
|
||||
CONFIG_SOUND=y
|
||||
CONFIG_SND=y
|
||||
CONFIG_SND_MIXER_OSS=y
|
||||
CONFIG_SND_PCM_OSS=y
|
||||
CONFIG_SND_SOC=y
|
||||
CONFIG_SND_OMAP_SOC=y
|
||||
CONFIG_SND_OMAP_SOC_AMS_DELTA=y
|
||||
CONFIG_USB=y
|
||||
CONFIG_USB_DEVICEFS=y
|
||||
# CONFIG_USB_DEVICE_CLASS is not set
|
||||
CONFIG_USB_MON=y
|
||||
CONFIG_USB_OHCI_HCD=y
|
||||
CONFIG_USB_STORAGE=y
|
||||
CONFIG_NEW_LEDS=y
|
||||
CONFIG_LEDS_CLASS=y
|
||||
CONFIG_LEDS_AMS_DELTA=y
|
||||
CONFIG_LEDS_TRIGGERS=y
|
||||
CONFIG_LEDS_TRIGGER_TIMER=y
|
||||
CONFIG_LEDS_TRIGGER_HEARTBEAT=y
|
||||
CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
|
||||
CONFIG_RTC_CLASS=y
|
||||
CONFIG_RTC_DRV_OMAP=y
|
||||
CONFIG_EXT2_FS=y
|
||||
CONFIG_EXT3_FS=y
|
||||
CONFIG_INOTIFY=y
|
||||
CONFIG_AUTOFS_FS=y
|
||||
CONFIG_AUTOFS4_FS=y
|
||||
CONFIG_MSDOS_FS=y
|
||||
CONFIG_VFAT_FS=y
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_JFFS2_FS=y
|
||||
CONFIG_JFFS2_SUMMARY=y
|
||||
CONFIG_NFS_FS=y
|
||||
CONFIG_PARTITION_ADVANCED=y
|
||||
CONFIG_NLS_CODEPAGE_437=y
|
||||
CONFIG_NLS_CODEPAGE_850=y
|
||||
CONFIG_NLS_CODEPAGE_852=y
|
||||
CONFIG_NLS_ISO8859_1=y
|
||||
CONFIG_NLS_ISO8859_2=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
# CONFIG_DEBUG_BUGVERBOSE is not set
|
|
@ -1,73 +0,0 @@
|
|||
CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_SLAB=y
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
# CONFIG_BLK_DEV_BSG is not set
|
||||
CONFIG_ARCH_OMAP=y
|
||||
CONFIG_ARCH_OMAP1=y
|
||||
CONFIG_ARCH_OMAP850=y
|
||||
# CONFIG_ARCH_OMAP15XX is not set
|
||||
CONFIG_MACH_HERALD=y
|
||||
CONFIG_OMAP_ARM_195MHZ=y
|
||||
# CONFIG_OMAP_ARM_60MHZ is not set
|
||||
CONFIG_CPU_ARM925T=y
|
||||
CONFIG_PREEMPT=y
|
||||
CONFIG_AEABI=y
|
||||
CONFIG_LEDS=y
|
||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
||||
CONFIG_CMDLINE="mem=32M console=ttyS0,115200 ip=dhcp"
|
||||
CONFIG_FPE_NWFPE=y
|
||||
CONFIG_PM=y
|
||||
CONFIG_NET=y
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_INET=y
|
||||
CONFIG_IP_MULTICAST=y
|
||||
CONFIG_IP_PNP=y
|
||||
CONFIG_IP_PNP_DHCP=y
|
||||
CONFIG_IP_PNP_BOOTP=y
|
||||
# CONFIG_IPV6 is not set
|
||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_SIZE=8192
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_SMC91X=y
|
||||
# CONFIG_KEYBOARD_ATKBD is not set
|
||||
CONFIG_KEYBOARD_OMAP=y
|
||||
# CONFIG_INPUT_MOUSE is not set
|
||||
CONFIG_SERIAL_8250=m
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
CONFIG_VIDEO_OUTPUT_CONTROL=m
|
||||
CONFIG_FB=y
|
||||
CONFIG_FB_MODE_HELPERS=y
|
||||
CONFIG_FB_OMAP=y
|
||||
# CONFIG_VGA_CONSOLE is not set
|
||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
|
||||
CONFIG_FONTS=y
|
||||
CONFIG_FONT_MINI_4x6=y
|
||||
CONFIG_USB_GADGET=y
|
||||
CONFIG_USB_ETH=m
|
||||
# CONFIG_USB_ETH_RNDIS is not set
|
||||
CONFIG_MMC=y
|
||||
CONFIG_MMC_SDHCI=y
|
||||
CONFIG_MMC_SDHCI_PLTFM=y
|
||||
CONFIG_MMC_OMAP=y
|
||||
CONFIG_RTC_CLASS=y
|
||||
CONFIG_EXT2_FS=y
|
||||
CONFIG_EXT3_FS=y
|
||||
CONFIG_INOTIFY=y
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_NFS_FS=y
|
||||
CONFIG_ROOT_NFS=y
|
||||
# CONFIG_RCU_CPU_STALL_DETECTOR is not set
|
||||
CONFIG_CRYPTO_DEFLATE=y
|
||||
CONFIG_CRYPTO_ZLIB=y
|
||||
CONFIG_CRYPTO_LZO=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
|
@ -0,0 +1,138 @@
|
|||
CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_LOG_BUF_SHIFT=16
|
||||
# CONFIG_UTS_NS is not set
|
||||
# CONFIG_IPC_NS is not set
|
||||
# CONFIG_USER_NS is not set
|
||||
# CONFIG_PID_NS is not set
|
||||
# CONFIG_NET_NS is not set
|
||||
CONFIG_SLAB=y
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
# CONFIG_BLK_DEV_BSG is not set
|
||||
# CONFIG_IOSCHED_DEADLINE is not set
|
||||
# CONFIG_IOSCHED_CFQ is not set
|
||||
CONFIG_ARCH_SHMOBILE=y
|
||||
CONFIG_ARCH_SH7372=y
|
||||
CONFIG_MACH_MACKEREL=y
|
||||
CONFIG_MEMORY_SIZE=0x10000000
|
||||
CONFIG_AEABI=y
|
||||
# CONFIG_OABI_COMPAT is not set
|
||||
CONFIG_FORCE_MAX_ZONEORDER=15
|
||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
||||
CONFIG_CMDLINE="console=tty0, console=ttySC0,115200 earlyprintk=sh-sci.0,115200 root=/dev/nfs nfsroot=,tcp,v3 ip=dhcp memchunk.vpu=64m memchunk.veu0=8m memchunk.spu0=2m mem=240m"
|
||||
CONFIG_KEXEC=y
|
||||
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
|
||||
CONFIG_PM=y
|
||||
CONFIG_PM_RUNTIME=y
|
||||
CONFIG_NET=y
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_INET=y
|
||||
CONFIG_IP_MULTICAST=y
|
||||
CONFIG_IP_PNP=y
|
||||
CONFIG_IP_PNP_DHCP=y
|
||||
# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
|
||||
# CONFIG_INET_XFRM_MODE_TUNNEL is not set
|
||||
# CONFIG_INET_XFRM_MODE_BEET is not set
|
||||
# CONFIG_IPV6 is not set
|
||||
# CONFIG_WIRELESS is not set
|
||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||
# CONFIG_FIRMWARE_IN_KERNEL is not set
|
||||
CONFIG_MTD=y
|
||||
CONFIG_MTD_CONCAT=y
|
||||
CONFIG_MTD_PARTITIONS=y
|
||||
CONFIG_MTD_CHAR=y
|
||||
CONFIG_MTD_BLOCK=y
|
||||
CONFIG_MTD_CFI=y
|
||||
CONFIG_MTD_CFI_ADV_OPTIONS=y
|
||||
CONFIG_MTD_CFI_INTELEXT=y
|
||||
CONFIG_MTD_PHYSMAP=y
|
||||
CONFIG_MTD_ARM_INTEGRATOR=y
|
||||
CONFIG_MTD_BLOCK2MTD=y
|
||||
CONFIG_SCSI=y
|
||||
CONFIG_BLK_DEV_SD=y
|
||||
# CONFIG_SCSI_LOWLEVEL is not set
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_SMSC911X=y
|
||||
# CONFIG_NETDEV_1000 is not set
|
||||
# CONFIG_NETDEV_10000 is not set
|
||||
# CONFIG_WLAN is not set
|
||||
# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
|
||||
# CONFIG_INPUT_KEYBOARD is not set
|
||||
# CONFIG_INPUT_MOUSE is not set
|
||||
CONFIG_SERIAL_SH_SCI=y
|
||||
CONFIG_SERIAL_SH_SCI_NR_UARTS=8
|
||||
CONFIG_SERIAL_SH_SCI_CONSOLE=y
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
# CONFIG_HWMON is not set
|
||||
# CONFIG_MFD_SUPPORT is not set
|
||||
CONFIG_FB=y
|
||||
CONFIG_FB_MODE_HELPERS=y
|
||||
CONFIG_FB_SH_MOBILE_LCDC=y
|
||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
CONFIG_LOGO=y
|
||||
# CONFIG_LOGO_LINUX_MONO is not set
|
||||
# CONFIG_LOGO_LINUX_CLUT224 is not set
|
||||
# CONFIG_HID_SUPPORT is not set
|
||||
# CONFIG_USB_SUPPORT is not set
|
||||
CONFIG_EXT2_FS=y
|
||||
CONFIG_EXT2_FS_XATTR=y
|
||||
CONFIG_EXT2_FS_POSIX_ACL=y
|
||||
CONFIG_EXT2_FS_SECURITY=y
|
||||
CONFIG_EXT2_FS_XIP=y
|
||||
CONFIG_EXT3_FS=y
|
||||
# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
|
||||
CONFIG_EXT3_FS_POSIX_ACL=y
|
||||
CONFIG_EXT3_FS_SECURITY=y
|
||||
# CONFIG_DNOTIFY is not set
|
||||
# CONFIG_INOTIFY_USER is not set
|
||||
CONFIG_MSDOS_FS=y
|
||||
CONFIG_VFAT_FS=y
|
||||
CONFIG_TMPFS=y
|
||||
# CONFIG_MISC_FILESYSTEMS is not set
|
||||
CONFIG_NFS_FS=y
|
||||
CONFIG_NFS_V3=y
|
||||
CONFIG_NFS_V3_ACL=y
|
||||
CONFIG_NFS_V4=y
|
||||
CONFIG_NFS_V4_1=y
|
||||
CONFIG_ROOT_NFS=y
|
||||
CONFIG_NLS_CODEPAGE_437=y
|
||||
CONFIG_NLS_CODEPAGE_737=y
|
||||
CONFIG_NLS_CODEPAGE_775=y
|
||||
CONFIG_NLS_CODEPAGE_850=y
|
||||
CONFIG_NLS_CODEPAGE_852=y
|
||||
CONFIG_NLS_CODEPAGE_855=y
|
||||
CONFIG_NLS_CODEPAGE_857=y
|
||||
CONFIG_NLS_CODEPAGE_860=y
|
||||
CONFIG_NLS_CODEPAGE_861=y
|
||||
CONFIG_NLS_CODEPAGE_862=y
|
||||
CONFIG_NLS_CODEPAGE_863=y
|
||||
CONFIG_NLS_CODEPAGE_864=y
|
||||
CONFIG_NLS_CODEPAGE_865=y
|
||||
CONFIG_NLS_CODEPAGE_866=y
|
||||
CONFIG_NLS_CODEPAGE_869=y
|
||||
CONFIG_NLS_ISO8859_1=y
|
||||
CONFIG_NLS_ISO8859_2=y
|
||||
CONFIG_NLS_ISO8859_3=y
|
||||
CONFIG_NLS_ISO8859_4=y
|
||||
CONFIG_NLS_ISO8859_5=y
|
||||
CONFIG_NLS_ISO8859_6=y
|
||||
CONFIG_NLS_ISO8859_7=y
|
||||
CONFIG_NLS_ISO8859_9=y
|
||||
CONFIG_NLS_ISO8859_13=y
|
||||
CONFIG_NLS_ISO8859_14=y
|
||||
CONFIG_NLS_ISO8859_15=y
|
||||
CONFIG_NLS_KOI8_R=y
|
||||
CONFIG_NLS_KOI8_U=y
|
||||
CONFIG_NLS_UTF8=y
|
||||
# CONFIG_ENABLE_WARN_DEPRECATED is not set
|
||||
# CONFIG_ENABLE_MUST_CHECK is not set
|
||||
# CONFIG_ARM_UNWIND is not set
|
||||
CONFIG_CRYPTO=y
|
||||
CONFIG_CRYPTO_ANSI_CPRNG=y
|
|
@ -1,138 +0,0 @@
|
|||
CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_POSIX_MQUEUE=y
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
CONFIG_SLAB=y
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
# CONFIG_BLK_DEV_BSG is not set
|
||||
# CONFIG_IOSCHED_DEADLINE is not set
|
||||
CONFIG_ARCH_OMAP=y
|
||||
CONFIG_ARCH_OMAP1=y
|
||||
CONFIG_OMAP_RESET_CLOCKS=y
|
||||
# CONFIG_OMAP_MUX is not set
|
||||
CONFIG_OMAP_MBOX_FWK=y
|
||||
CONFIG_OMAP_32K_TIMER=y
|
||||
CONFIG_OMAP_DM_TIMER=y
|
||||
# CONFIG_ARCH_OMAP15XX is not set
|
||||
CONFIG_ARCH_OMAP16XX=y
|
||||
CONFIG_MACH_NOKIA770=y
|
||||
CONFIG_OMAP_CLOCKS_SET_BY_BOOTLOADER=y
|
||||
CONFIG_OMAP_ARM_216MHZ=y
|
||||
# CONFIG_OMAP_ARM_60MHZ is not set
|
||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
||||
CONFIG_CMDLINE="root=1f03 rootfstype=jffs2 time"
|
||||
CONFIG_FPE_NWFPE=y
|
||||
CONFIG_PM=y
|
||||
CONFIG_PM_RUNTIME=y
|
||||
CONFIG_NET=y
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_INET=y
|
||||
CONFIG_IP_MULTICAST=y
|
||||
CONFIG_IP_PNP=y
|
||||
CONFIG_IP_PNP_DHCP=y
|
||||
CONFIG_IP_PNP_BOOTP=y
|
||||
# CONFIG_INET_LRO is not set
|
||||
# CONFIG_INET_DIAG is not set
|
||||
# CONFIG_IPV6 is not set
|
||||
CONFIG_NETFILTER=y
|
||||
CONFIG_BT=y
|
||||
CONFIG_BT_L2CAP=y
|
||||
CONFIG_BT_SCO=y
|
||||
CONFIG_BT_RFCOMM=y
|
||||
CONFIG_BT_RFCOMM_TTY=y
|
||||
CONFIG_BT_BNEP=y
|
||||
CONFIG_BT_HIDP=y
|
||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||
CONFIG_CONNECTOR=y
|
||||
# CONFIG_PROC_EVENTS is not set
|
||||
CONFIG_MTD=y
|
||||
CONFIG_MTD_PARTITIONS=y
|
||||
CONFIG_MTD_CMDLINE_PARTS=y
|
||||
CONFIG_MTD_CHAR=y
|
||||
CONFIG_MTD_BLOCK=y
|
||||
CONFIG_MTD_NAND=y
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
CONFIG_SCSI=y
|
||||
# CONFIG_SCSI_PROC_FS is not set
|
||||
CONFIG_BLK_DEV_SD=y
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_TUN=y
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_USB_USBNET=y
|
||||
# CONFIG_USB_NET_AX8817X is not set
|
||||
# CONFIG_USB_NET_CDC_SUBSET is not set
|
||||
CONFIG_PPP=y
|
||||
CONFIG_PPP_FILTER=y
|
||||
CONFIG_PPP_ASYNC=y
|
||||
CONFIG_PPP_DEFLATE=y
|
||||
CONFIG_PPP_BSDCOMP=y
|
||||
# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
|
||||
CONFIG_INPUT_EVDEV=y
|
||||
# CONFIG_KEYBOARD_ATKBD is not set
|
||||
CONFIG_KEYBOARD_OMAP=y
|
||||
# CONFIG_INPUT_MOUSE is not set
|
||||
CONFIG_INPUT_TOUCHSCREEN=y
|
||||
CONFIG_TOUCHSCREEN_ADS7846=y
|
||||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
CONFIG_I2C=y
|
||||
CONFIG_I2C_OMAP=y
|
||||
CONFIG_SPI=y
|
||||
CONFIG_SPI_OMAP_UWIRE=y
|
||||
# CONFIG_HWMON is not set
|
||||
CONFIG_WATCHDOG=y
|
||||
CONFIG_WATCHDOG_NOWAYOUT=y
|
||||
CONFIG_OMAP_WATCHDOG=y
|
||||
CONFIG_FB=y
|
||||
CONFIG_FB_OMAP=y
|
||||
CONFIG_FB_OMAP_LCDC_EXTERNAL=y
|
||||
CONFIG_FB_OMAP_LCDC_HWA742=y
|
||||
CONFIG_FB_OMAP_MANUAL_UPDATE=y
|
||||
CONFIG_FB_OMAP_LCD_MIPID=y
|
||||
# CONFIG_VGA_CONSOLE is not set
|
||||
CONFIG_SOUND=y
|
||||
CONFIG_SND=y
|
||||
# CONFIG_SND_SUPPORT_OLD_API is not set
|
||||
CONFIG_SND_DUMMY=y
|
||||
CONFIG_SND_USB_AUDIO=y
|
||||
CONFIG_USB=y
|
||||
CONFIG_USB_DEVICEFS=y
|
||||
CONFIG_USB_SUSPEND=y
|
||||
CONFIG_USB_OTG=y
|
||||
# CONFIG_USB_OTG_WHITELIST is not set
|
||||
CONFIG_USB_OHCI_HCD=y
|
||||
CONFIG_USB_STORAGE=y
|
||||
CONFIG_USB_SERIAL=y
|
||||
CONFIG_USB_SERIAL_CONSOLE=y
|
||||
CONFIG_USB_SERIAL_PL2303=y
|
||||
CONFIG_USB_GADGET=y
|
||||
CONFIG_USB_ETH=m
|
||||
CONFIG_USB_FILE_STORAGE=m
|
||||
CONFIG_USB_FILE_STORAGE_TEST=y
|
||||
CONFIG_MMC=y
|
||||
CONFIG_MMC_OMAP=y
|
||||
CONFIG_EXT2_FS=y
|
||||
CONFIG_EXT3_FS=y
|
||||
CONFIG_MSDOS_FS=y
|
||||
CONFIG_VFAT_FS=y
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_JFFS2_FS=y
|
||||
CONFIG_JFFS2_SUMMARY=y
|
||||
CONFIG_JFFS2_COMPRESSION_OPTIONS=y
|
||||
CONFIG_NFS_FS=y
|
||||
CONFIG_NFS_V3=y
|
||||
CONFIG_PARTITION_ADVANCED=y
|
||||
CONFIG_NLS_CODEPAGE_437=y
|
||||
CONFIG_NLS_CODEPAGE_852=y
|
||||
CONFIG_NLS_ISO8859_1=y
|
||||
CONFIG_NLS_ISO8859_15=y
|
||||
CONFIG_NLS_UTF8=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_DEBUG_MUTEXES=y
|
||||
CONFIG_DEBUG_ERRORS=y
|
||||
CONFIG_SECURITY=y
|
|
@ -0,0 +1,286 @@
|
|||
CONFIG_EXPERIMENTAL=y
|
||||
# CONFIG_SWAP is not set
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_POSIX_MQUEUE=y
|
||||
CONFIG_BSD_PROCESS_ACCT=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_EMBEDDED=y
|
||||
# CONFIG_KALLSYMS is not set
|
||||
# CONFIG_ELF_CORE is not set
|
||||
# CONFIG_BASE_FULL is not set
|
||||
# CONFIG_SHMEM is not set
|
||||
# CONFIG_VM_EVENT_COUNTERS is not set
|
||||
CONFIG_SLOB=y
|
||||
CONFIG_PROFILING=y
|
||||
CONFIG_OPROFILE=y
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_MODULE_FORCE_UNLOAD=y
|
||||
# CONFIG_LBDAF is not set
|
||||
# CONFIG_BLK_DEV_BSG is not set
|
||||
# CONFIG_IOSCHED_DEADLINE is not set
|
||||
# CONFIG_IOSCHED_CFQ is not set
|
||||
CONFIG_ARCH_OMAP=y
|
||||
CONFIG_ARCH_OMAP1=y
|
||||
CONFIG_OMAP_RESET_CLOCKS=y
|
||||
# CONFIG_OMAP_MUX is not set
|
||||
CONFIG_OMAP_MBOX_FWK=y
|
||||
CONFIG_OMAP_32K_TIMER=y
|
||||
CONFIG_OMAP_DM_TIMER=y
|
||||
CONFIG_ARCH_OMAP730=y
|
||||
CONFIG_ARCH_OMAP850=y
|
||||
CONFIG_ARCH_OMAP16XX=y
|
||||
CONFIG_MACH_OMAP_INNOVATOR=y
|
||||
CONFIG_MACH_OMAP_H2=y
|
||||
CONFIG_MACH_OMAP_H3=y
|
||||
CONFIG_MACH_OMAP_HTCWIZARD=y
|
||||
CONFIG_MACH_HERALD=y
|
||||
CONFIG_MACH_OMAP_OSK=y
|
||||
CONFIG_MACH_OMAP_PERSEUS2=y
|
||||
CONFIG_MACH_OMAP_FSAMPLE=y
|
||||
CONFIG_MACH_VOICEBLUE=y
|
||||
CONFIG_MACH_OMAP_PALMTE=y
|
||||
CONFIG_MACH_OMAP_PALMZ71=y
|
||||
CONFIG_MACH_OMAP_PALMTT=y
|
||||
CONFIG_MACH_SX1=y
|
||||
CONFIG_MACH_NOKIA770=y
|
||||
CONFIG_MACH_AMS_DELTA=y
|
||||
CONFIG_MACH_OMAP_GENERIC=y
|
||||
CONFIG_OMAP_CLOCKS_SET_BY_BOOTLOADER=y
|
||||
CONFIG_OMAP_ARM_216MHZ=y
|
||||
CONFIG_OMAP_ARM_195MHZ=y
|
||||
CONFIG_OMAP_ARM_192MHZ=y
|
||||
CONFIG_OMAP_ARM_182MHZ=y
|
||||
CONFIG_OMAP_ARM_168MHZ=y
|
||||
# CONFIG_OMAP_ARM_60MHZ is not set
|
||||
# CONFIG_ARM_THUMB is not set
|
||||
CONFIG_PCCARD=y
|
||||
CONFIG_OMAP_CF=y
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_HIGH_RES_TIMERS=y
|
||||
CONFIG_PREEMPT=y
|
||||
CONFIG_AEABI=y
|
||||
CONFIG_LEDS=y
|
||||
CONFIG_LEDS_CPU=y
|
||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
||||
CONFIG_CMDLINE="root=1f03 rootfstype=jffs2"
|
||||
CONFIG_FPE_NWFPE=y
|
||||
CONFIG_BINFMT_MISC=y
|
||||
CONFIG_PM=y
|
||||
# CONFIG_SUSPEND is not set
|
||||
CONFIG_PM_RUNTIME=y
|
||||
CONFIG_NET=y
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_NET_KEY=y
|
||||
CONFIG_INET=y
|
||||
CONFIG_IP_MULTICAST=y
|
||||
CONFIG_IP_PNP=y
|
||||
CONFIG_IP_PNP_DHCP=y
|
||||
CONFIG_IP_PNP_BOOTP=y
|
||||
# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
|
||||
# CONFIG_INET_XFRM_MODE_TUNNEL is not set
|
||||
# CONFIG_INET_XFRM_MODE_BEET is not set
|
||||
# CONFIG_INET_LRO is not set
|
||||
# CONFIG_INET_DIAG is not set
|
||||
CONFIG_IPV6=y
|
||||
CONFIG_NETFILTER=y
|
||||
CONFIG_BT=y
|
||||
CONFIG_BT_L2CAP=y
|
||||
CONFIG_BT_SCO=y
|
||||
CONFIG_BT_RFCOMM=y
|
||||
CONFIG_BT_RFCOMM_TTY=y
|
||||
CONFIG_BT_BNEP=y
|
||||
CONFIG_BT_HIDP=y
|
||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||
# CONFIG_STANDALONE is not set
|
||||
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
||||
CONFIG_CONNECTOR=y
|
||||
# CONFIG_PROC_EVENTS is not set
|
||||
CONFIG_MTD=y
|
||||
CONFIG_MTD_DEBUG=y
|
||||
CONFIG_MTD_DEBUG_VERBOSE=3
|
||||
CONFIG_MTD_PARTITIONS=y
|
||||
CONFIG_MTD_CMDLINE_PARTS=y
|
||||
CONFIG_MTD_CHAR=y
|
||||
CONFIG_MTD_BLOCK=y
|
||||
CONFIG_MTD_CFI=y
|
||||
CONFIG_MTD_CFI_INTELEXT=y
|
||||
CONFIG_MTD_NAND=y
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_COUNT=2
|
||||
CONFIG_BLK_DEV_RAM_SIZE=8192
|
||||
CONFIG_IDE=m
|
||||
CONFIG_BLK_DEV_IDECS=m
|
||||
CONFIG_SCSI=y
|
||||
# CONFIG_SCSI_PROC_FS is not set
|
||||
CONFIG_BLK_DEV_SD=y
|
||||
CONFIG_CHR_DEV_ST=y
|
||||
CONFIG_BLK_DEV_SR=y
|
||||
CONFIG_CHR_DEV_SG=y
|
||||
CONFIG_SCSI_MULTI_LUN=y
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_TUN=y
|
||||
CONFIG_PHYLIB=y
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_SMC91X=y
|
||||
CONFIG_USB_CATC=y
|
||||
CONFIG_USB_KAWETH=y
|
||||
CONFIG_USB_PEGASUS=y
|
||||
CONFIG_USB_RTL8150=y
|
||||
CONFIG_USB_USBNET=y
|
||||
# CONFIG_USB_NET_AX8817X is not set
|
||||
# CONFIG_USB_NET_CDC_SUBSET is not set
|
||||
CONFIG_PPP=y
|
||||
CONFIG_PPP_MULTILINK=y
|
||||
CONFIG_PPP_FILTER=y
|
||||
CONFIG_PPP_ASYNC=y
|
||||
CONFIG_PPP_DEFLATE=y
|
||||
CONFIG_PPP_BSDCOMP=y
|
||||
CONFIG_SLIP=y
|
||||
CONFIG_SLIP_COMPRESSED=y
|
||||
# CONFIG_INPUT_MOUSEDEV is not set
|
||||
CONFIG_INPUT_EVDEV=y
|
||||
CONFIG_INPUT_EVBUG=y
|
||||
# CONFIG_INPUT_KEYBOARD is not set
|
||||
# CONFIG_INPUT_MOUSE is not set
|
||||
CONFIG_INPUT_TOUCHSCREEN=y
|
||||
CONFIG_TOUCHSCREEN_ADS7846=y
|
||||
CONFIG_INPUT_MISC=y
|
||||
CONFIG_INPUT_UINPUT=y
|
||||
# CONFIG_SERIO is not set
|
||||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
CONFIG_SERIAL_8250_NR_UARTS=3
|
||||
CONFIG_SERIAL_8250_RUNTIME_UARTS=3
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
CONFIG_HW_RANDOM=y
|
||||
CONFIG_I2C=y
|
||||
CONFIG_I2C_CHARDEV=y
|
||||
CONFIG_SPI=y
|
||||
CONFIG_SPI_OMAP_UWIRE=y
|
||||
# CONFIG_HWMON is not set
|
||||
CONFIG_WATCHDOG=y
|
||||
CONFIG_WATCHDOG_NOWAYOUT=y
|
||||
CONFIG_OMAP_WATCHDOG=y
|
||||
CONFIG_VIDEO_OUTPUT_CONTROL=y
|
||||
CONFIG_FB=y
|
||||
CONFIG_FIRMWARE_EDID=y
|
||||
CONFIG_FB_MODE_HELPERS=y
|
||||
CONFIG_FB_VIRTUAL=y
|
||||
CONFIG_FB_OMAP=y
|
||||
CONFIG_FB_OMAP_LCDC_EXTERNAL=y
|
||||
CONFIG_FB_OMAP_LCDC_HWA742=y
|
||||
CONFIG_FB_OMAP_MANUAL_UPDATE=y
|
||||
CONFIG_FB_OMAP_LCD_MIPID=y
|
||||
CONFIG_FB_OMAP_BOOTLOADER_INIT=y
|
||||
CONFIG_BACKLIGHT_LCD_SUPPORT=y
|
||||
CONFIG_LCD_CLASS_DEVICE=y
|
||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
|
||||
CONFIG_FONTS=y
|
||||
CONFIG_FONT_8x8=y
|
||||
CONFIG_FONT_8x16=y
|
||||
CONFIG_FONT_6x11=y
|
||||
CONFIG_FONT_MINI_4x6=y
|
||||
CONFIG_LOGO=y
|
||||
# CONFIG_LOGO_LINUX_MONO is not set
|
||||
# CONFIG_LOGO_LINUX_VGA16 is not set
|
||||
CONFIG_SOUND=y
|
||||
CONFIG_SND=y
|
||||
CONFIG_SND_MIXER_OSS=y
|
||||
CONFIG_SND_PCM_OSS=y
|
||||
# CONFIG_SND_SUPPORT_OLD_API is not set
|
||||
# CONFIG_SND_VERBOSE_PROCFS is not set
|
||||
CONFIG_SND_DUMMY=y
|
||||
CONFIG_SND_USB_AUDIO=y
|
||||
CONFIG_SND_SOC=y
|
||||
CONFIG_SND_OMAP_SOC=y
|
||||
# CONFIG_USB_HID is not set
|
||||
CONFIG_USB=y
|
||||
CONFIG_USB_DEBUG=y
|
||||
CONFIG_USB_DEVICEFS=y
|
||||
# CONFIG_USB_DEVICE_CLASS is not set
|
||||
CONFIG_USB_SUSPEND=y
|
||||
CONFIG_USB_MON=y
|
||||
CONFIG_USB_OHCI_HCD=y
|
||||
CONFIG_USB_STORAGE=y
|
||||
CONFIG_USB_STORAGE_DATAFAB=y
|
||||
CONFIG_USB_STORAGE_FREECOM=y
|
||||
CONFIG_USB_STORAGE_SDDR09=y
|
||||
CONFIG_USB_STORAGE_SDDR55=y
|
||||
CONFIG_USB_STORAGE_JUMPSHOT=y
|
||||
CONFIG_USB_SERIAL=y
|
||||
CONFIG_USB_SERIAL_CONSOLE=y
|
||||
CONFIG_USB_SERIAL_PL2303=y
|
||||
CONFIG_USB_TEST=y
|
||||
CONFIG_USB_GADGET=y
|
||||
CONFIG_USB_ETH=m
|
||||
# CONFIG_USB_ETH_RNDIS is not set
|
||||
CONFIG_USB_FILE_STORAGE=m
|
||||
CONFIG_USB_FILE_STORAGE_TEST=y
|
||||
CONFIG_MMC=y
|
||||
CONFIG_MMC_SDHCI=y
|
||||
CONFIG_MMC_SDHCI_PLTFM=y
|
||||
CONFIG_MMC_OMAP=y
|
||||
CONFIG_NEW_LEDS=y
|
||||
CONFIG_LEDS_CLASS=y
|
||||
CONFIG_LEDS_TRIGGERS=y
|
||||
CONFIG_LEDS_TRIGGER_TIMER=y
|
||||
CONFIG_LEDS_TRIGGER_HEARTBEAT=y
|
||||
CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
|
||||
CONFIG_RTC_CLASS=y
|
||||
CONFIG_RTC_DRV_OMAP=y
|
||||
CONFIG_EXT2_FS=y
|
||||
CONFIG_EXT3_FS=y
|
||||
# CONFIG_DNOTIFY is not set
|
||||
CONFIG_AUTOFS4_FS=y
|
||||
CONFIG_ISO9660_FS=y
|
||||
CONFIG_JOLIET=y
|
||||
CONFIG_MSDOS_FS=y
|
||||
CONFIG_VFAT_FS=y
|
||||
CONFIG_FAT_DEFAULT_CODEPAGE=866
|
||||
CONFIG_FAT_DEFAULT_IOCHARSET="koi8-r"
|
||||
CONFIG_JFFS2_FS=y
|
||||
CONFIG_JFFS2_SUMMARY=y
|
||||
CONFIG_JFFS2_COMPRESSION_OPTIONS=y
|
||||
CONFIG_CRAMFS=y
|
||||
CONFIG_ROMFS_FS=y
|
||||
CONFIG_NFS_FS=y
|
||||
CONFIG_NFS_V3=y
|
||||
CONFIG_NFS_V4=y
|
||||
CONFIG_ROOT_NFS=y
|
||||
CONFIG_PARTITION_ADVANCED=y
|
||||
CONFIG_NLS_CODEPAGE_437=y
|
||||
CONFIG_NLS_CODEPAGE_850=y
|
||||
CONFIG_NLS_CODEPAGE_852=y
|
||||
CONFIG_NLS_CODEPAGE_866=y
|
||||
CONFIG_NLS_CODEPAGE_1251=y
|
||||
CONFIG_NLS_ISO8859_1=y
|
||||
CONFIG_NLS_ISO8859_2=y
|
||||
CONFIG_NLS_ISO8859_5=y
|
||||
CONFIG_NLS_ISO8859_15=y
|
||||
CONFIG_NLS_KOI8_R=y
|
||||
CONFIG_NLS_UTF8=y
|
||||
# CONFIG_ENABLE_MUST_CHECK is not set
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_DEBUG_SPINLOCK=y
|
||||
CONFIG_DEBUG_MUTEXES=y
|
||||
# CONFIG_DEBUG_BUGVERBOSE is not set
|
||||
CONFIG_DEBUG_INFO=y
|
||||
# CONFIG_RCU_CPU_STALL_DETECTOR is not set
|
||||
CONFIG_DEBUG_USER=y
|
||||
CONFIG_DEBUG_ERRORS=y
|
||||
CONFIG_SECURITY=y
|
||||
CONFIG_CRYPTO_ECB=y
|
||||
CONFIG_CRYPTO_PCBC=y
|
||||
CONFIG_CRYPTO_DEFLATE=y
|
||||
CONFIG_CRYPTO_ZLIB=y
|
||||
CONFIG_CRYPTO_LZO=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
CONFIG_LIBCRC32C=y
|
|
@ -1,84 +0,0 @@
|
|||
CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_SLAB=y
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_MODULE_FORCE_UNLOAD=y
|
||||
# CONFIG_BLK_DEV_BSG is not set
|
||||
CONFIG_ARCH_OMAP=y
|
||||
CONFIG_ARCH_OMAP1=y
|
||||
CONFIG_MACH_OMAP_GENERIC=y
|
||||
CONFIG_OMAP_ARM_168MHZ=y
|
||||
# CONFIG_OMAP_ARM_60MHZ is not set
|
||||
# CONFIG_ARM_THUMB is not set
|
||||
CONFIG_PREEMPT=y
|
||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
||||
CONFIG_CMDLINE="mem=64M console=ttyS2,115200 root=0803 ro init=/bin/sh"
|
||||
CONFIG_FPE_NWFPE=y
|
||||
CONFIG_PM=y
|
||||
CONFIG_NET=y
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_INET=y
|
||||
CONFIG_IP_MULTICAST=y
|
||||
CONFIG_IP_PNP=y
|
||||
CONFIG_IP_PNP_DHCP=y
|
||||
CONFIG_IP_PNP_BOOTP=y
|
||||
# CONFIG_IPV6 is not set
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_SIZE=8192
|
||||
CONFIG_SCSI=y
|
||||
CONFIG_BLK_DEV_SD=y
|
||||
CONFIG_BLK_DEV_SR=y
|
||||
CONFIG_CHR_DEV_SG=y
|
||||
CONFIG_SCSI_MULTI_LUN=y
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_USB_RTL8150=y
|
||||
CONFIG_USB_USBNET=y
|
||||
CONFIG_USB_AN2720=y
|
||||
CONFIG_USB_EPSON2888=y
|
||||
CONFIG_PPP=y
|
||||
CONFIG_PPP_MULTILINK=y
|
||||
CONFIG_KEYBOARD_OMAP=y
|
||||
# CONFIG_INPUT_MOUSE is not set
|
||||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
CONFIG_I2C=y
|
||||
CONFIG_I2C_CHARDEV=y
|
||||
CONFIG_VIDEO_OUTPUT_CONTROL=m
|
||||
# CONFIG_VGA_CONSOLE is not set
|
||||
CONFIG_USB=y
|
||||
CONFIG_USB_DEBUG=y
|
||||
CONFIG_USB_DEVICEFS=y
|
||||
# CONFIG_USB_DEVICE_CLASS is not set
|
||||
CONFIG_USB_MON=y
|
||||
CONFIG_USB_OHCI_HCD=y
|
||||
CONFIG_USB_STORAGE=y
|
||||
CONFIG_USB_STORAGE_DATAFAB=y
|
||||
CONFIG_USB_STORAGE_FREECOM=y
|
||||
CONFIG_USB_STORAGE_SDDR09=y
|
||||
CONFIG_USB_STORAGE_SDDR55=y
|
||||
CONFIG_USB_STORAGE_JUMPSHOT=y
|
||||
CONFIG_MMC=y
|
||||
CONFIG_MMC_OMAP=y
|
||||
CONFIG_RTC_CLASS=y
|
||||
CONFIG_RTC_DRV_OMAP=y
|
||||
CONFIG_EXT2_FS=y
|
||||
CONFIG_EXT3_FS=y
|
||||
CONFIG_INOTIFY=y
|
||||
CONFIG_AUTOFS_FS=y
|
||||
CONFIG_AUTOFS4_FS=y
|
||||
CONFIG_ISO9660_FS=y
|
||||
CONFIG_JOLIET=y
|
||||
CONFIG_MSDOS_FS=m
|
||||
CONFIG_VFAT_FS=m
|
||||
CONFIG_NFS_FS=y
|
||||
CONFIG_PARTITION_ADVANCED=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
|
@ -1,87 +0,0 @@
|
|||
CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_SLAB=y
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_MODULE_FORCE_UNLOAD=y
|
||||
# CONFIG_BLK_DEV_BSG is not set
|
||||
CONFIG_ARCH_OMAP=y
|
||||
CONFIG_ARCH_OMAP1=y
|
||||
# CONFIG_ARCH_OMAP15XX is not set
|
||||
CONFIG_ARCH_OMAP16XX=y
|
||||
CONFIG_MACH_OMAP_GENERIC=y
|
||||
CONFIG_OMAP_ARM_192MHZ=y
|
||||
# CONFIG_OMAP_ARM_60MHZ is not set
|
||||
# CONFIG_ARM_THUMB is not set
|
||||
CONFIG_PREEMPT=y
|
||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
||||
CONFIG_CMDLINE="mem=64M console=ttyS2,115200 root=0803 ro init=/bin/sh"
|
||||
CONFIG_FPE_NWFPE=y
|
||||
CONFIG_PM=y
|
||||
CONFIG_NET=y
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_INET=y
|
||||
CONFIG_IP_MULTICAST=y
|
||||
CONFIG_IP_PNP=y
|
||||
CONFIG_IP_PNP_DHCP=y
|
||||
CONFIG_IP_PNP_BOOTP=y
|
||||
# CONFIG_IPV6 is not set
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_SIZE=8192
|
||||
CONFIG_SCSI=y
|
||||
CONFIG_BLK_DEV_SD=y
|
||||
CONFIG_BLK_DEV_SR=y
|
||||
CONFIG_CHR_DEV_SG=y
|
||||
CONFIG_SCSI_MULTI_LUN=y
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_USB_RTL8150=y
|
||||
CONFIG_USB_USBNET=y
|
||||
CONFIG_USB_ALI_M5632=y
|
||||
CONFIG_USB_AN2720=y
|
||||
CONFIG_USB_EPSON2888=y
|
||||
CONFIG_PPP=y
|
||||
CONFIG_PPP_MULTILINK=y
|
||||
CONFIG_KEYBOARD_OMAP=y
|
||||
# CONFIG_INPUT_MOUSE is not set
|
||||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
CONFIG_I2C=y
|
||||
CONFIG_I2C_CHARDEV=y
|
||||
CONFIG_VIDEO_OUTPUT_CONTROL=m
|
||||
# CONFIG_VGA_CONSOLE is not set
|
||||
CONFIG_USB=y
|
||||
CONFIG_USB_DEBUG=y
|
||||
CONFIG_USB_DEVICEFS=y
|
||||
# CONFIG_USB_DEVICE_CLASS is not set
|
||||
CONFIG_USB_MON=y
|
||||
CONFIG_USB_OHCI_HCD=y
|
||||
CONFIG_USB_STORAGE=y
|
||||
CONFIG_USB_STORAGE_DATAFAB=y
|
||||
CONFIG_USB_STORAGE_FREECOM=y
|
||||
CONFIG_USB_STORAGE_SDDR09=y
|
||||
CONFIG_USB_STORAGE_SDDR55=y
|
||||
CONFIG_USB_STORAGE_JUMPSHOT=y
|
||||
CONFIG_MMC=y
|
||||
CONFIG_MMC_OMAP=y
|
||||
CONFIG_RTC_CLASS=y
|
||||
CONFIG_RTC_DRV_OMAP=y
|
||||
CONFIG_EXT2_FS=y
|
||||
CONFIG_EXT3_FS=y
|
||||
CONFIG_INOTIFY=y
|
||||
CONFIG_AUTOFS_FS=y
|
||||
CONFIG_AUTOFS4_FS=y
|
||||
CONFIG_ISO9660_FS=y
|
||||
CONFIG_JOLIET=y
|
||||
CONFIG_MSDOS_FS=m
|
||||
CONFIG_VFAT_FS=m
|
||||
CONFIG_NFS_FS=y
|
||||
CONFIG_PARTITION_ADVANCED=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
|
@ -1,75 +0,0 @@
|
|||
CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
# CONFIG_BLK_DEV_BSG is not set
|
||||
CONFIG_ARCH_OMAP=y
|
||||
CONFIG_ARCH_OMAP1=y
|
||||
# CONFIG_OMAP_MUX is not set
|
||||
# CONFIG_ARCH_OMAP15XX is not set
|
||||
CONFIG_ARCH_OMAP16XX=y
|
||||
CONFIG_MACH_OMAP_GENERIC=y
|
||||
CONFIG_OMAP_ARM_192MHZ=y
|
||||
# CONFIG_OMAP_ARM_60MHZ is not set
|
||||
# CONFIG_ARM_THUMB is not set
|
||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
||||
CONFIG_CMDLINE="mem=64M console=tty0 console=ttyS2,115200 root=0801"
|
||||
CONFIG_FPE_NWFPE=y
|
||||
CONFIG_ARTHUR=y
|
||||
CONFIG_PM=y
|
||||
CONFIG_NET=y
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_INET=y
|
||||
CONFIG_IP_MULTICAST=y
|
||||
CONFIG_IP_PNP=y
|
||||
CONFIG_IP_PNP_DHCP=y
|
||||
CONFIG_IP_PNP_BOOTP=y
|
||||
# CONFIG_IPV6 is not set
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_SIZE=8192
|
||||
CONFIG_SCSI=y
|
||||
CONFIG_BLK_DEV_SD=y
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_USB_USBNET=y
|
||||
CONFIG_USB_ALI_M5632=y
|
||||
# CONFIG_USB_BELKIN is not set
|
||||
# CONFIG_USB_ARMLINUX is not set
|
||||
CONFIG_PPP=y
|
||||
CONFIG_INPUT_EVDEV=y
|
||||
CONFIG_KEYBOARD_OMAP=y
|
||||
# CONFIG_INPUT_MOUSE is not set
|
||||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
CONFIG_VIDEO_OUTPUT_CONTROL=y
|
||||
# CONFIG_VGA_CONSOLE is not set
|
||||
CONFIG_USB=y
|
||||
CONFIG_USB_DEBUG=y
|
||||
CONFIG_USB_DEVICEFS=y
|
||||
CONFIG_USB_MON=y
|
||||
CONFIG_USB_OHCI_HCD=y
|
||||
CONFIG_USB_STORAGE=y
|
||||
CONFIG_MMC=y
|
||||
CONFIG_MMC_OMAP=y
|
||||
CONFIG_EXT2_FS=y
|
||||
CONFIG_EXT3_FS=y
|
||||
CONFIG_INOTIFY=y
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_NFS_FS=y
|
||||
CONFIG_NFS_V3=y
|
||||
CONFIG_NFS_V4=y
|
||||
CONFIG_PARTITION_ADVANCED=y
|
||||
CONFIG_NLS_CODEPAGE_437=y
|
||||
CONFIG_NLS_CODEPAGE_852=y
|
||||
CONFIG_NLS_ISO8859_1=y
|
||||
CONFIG_NLS_ISO8859_15=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_DEBUG_SPINLOCK=y
|
||||
CONFIG_DEBUG_ERRORS=y
|
||||
CONFIG_SECURITY=y
|
||||
CONFIG_CRYPTO_ECB=y
|
||||
CONFIG_CRYPTO_PCBC=y
|
|
@ -1,109 +0,0 @@
|
|||
CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_SLAB=y
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
# CONFIG_BLK_DEV_BSG is not set
|
||||
CONFIG_ARCH_OMAP=y
|
||||
CONFIG_ARCH_OMAP1=y
|
||||
CONFIG_OMAP_MUX_DEBUG=y
|
||||
CONFIG_OMAP_32K_TIMER=y
|
||||
CONFIG_OMAP_DM_TIMER=y
|
||||
# CONFIG_ARCH_OMAP15XX is not set
|
||||
CONFIG_ARCH_OMAP16XX=y
|
||||
CONFIG_MACH_OMAP_H2=y
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_HIGH_RES_TIMERS=y
|
||||
CONFIG_LEDS=y
|
||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
||||
CONFIG_CMDLINE="mem=32M console=ttyS0,115200n8 root=/dev/ram0 rw initrd=0x10600000,8M ramdisk_size=8192"
|
||||
CONFIG_FPE_NWFPE=y
|
||||
CONFIG_PM=y
|
||||
CONFIG_PM_RUNTIME=y
|
||||
CONFIG_NET=y
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_INET=y
|
||||
CONFIG_IP_PNP=y
|
||||
CONFIG_IP_PNP_DHCP=y
|
||||
CONFIG_IP_PNP_BOOTP=y
|
||||
# CONFIG_INET_LRO is not set
|
||||
# CONFIG_IPV6 is not set
|
||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||
CONFIG_DEBUG_DRIVER=y
|
||||
CONFIG_MTD=y
|
||||
CONFIG_MTD_DEBUG=y
|
||||
CONFIG_MTD_DEBUG_VERBOSE=3
|
||||
CONFIG_MTD_PARTITIONS=y
|
||||
CONFIG_MTD_CMDLINE_PARTS=y
|
||||
CONFIG_MTD_CHAR=y
|
||||
CONFIG_MTD_BLOCK=y
|
||||
CONFIG_MTD_CFI=y
|
||||
CONFIG_MTD_CFI_INTELEXT=y
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_SIZE=8192
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_SMC91X=y
|
||||
CONFIG_PPP=y
|
||||
CONFIG_SLIP=y
|
||||
CONFIG_SLIP_COMPRESSED=y
|
||||
CONFIG_INPUT_EVDEV=y
|
||||
CONFIG_INPUT_EVBUG=y
|
||||
# CONFIG_INPUT_KEYBOARD is not set
|
||||
# CONFIG_INPUT_MOUSE is not set
|
||||
CONFIG_INPUT_MISC=y
|
||||
CONFIG_INPUT_UINPUT=y
|
||||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
CONFIG_I2C=y
|
||||
CONFIG_I2C_OMAP=y
|
||||
CONFIG_SPI=y
|
||||
CONFIG_SPI_OMAP_UWIRE=y
|
||||
CONFIG_WATCHDOG=y
|
||||
CONFIG_WATCHDOG_NOWAYOUT=y
|
||||
CONFIG_VIDEO_OUTPUT_CONTROL=m
|
||||
CONFIG_FB=y
|
||||
CONFIG_FIRMWARE_EDID=y
|
||||
CONFIG_FB_MODE_HELPERS=y
|
||||
CONFIG_FB_OMAP=y
|
||||
# CONFIG_VGA_CONSOLE is not set
|
||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
CONFIG_LOGO=y
|
||||
# CONFIG_LOGO_LINUX_MONO is not set
|
||||
# CONFIG_LOGO_LINUX_VGA16 is not set
|
||||
# CONFIG_USB_HID is not set
|
||||
CONFIG_USB=y
|
||||
CONFIG_USB_DEVICEFS=y
|
||||
# CONFIG_USB_DEVICE_CLASS is not set
|
||||
CONFIG_USB_SUSPEND=y
|
||||
CONFIG_USB_OTG=y
|
||||
CONFIG_USB_MON=y
|
||||
CONFIG_USB_OHCI_HCD=y
|
||||
CONFIG_USB_TEST=y
|
||||
CONFIG_USB_GADGET=y
|
||||
CONFIG_USB_ETH=m
|
||||
CONFIG_MMC=y
|
||||
CONFIG_MMC_OMAP=y
|
||||
CONFIG_RTC_CLASS=y
|
||||
CONFIG_RTC_DRV_OMAP=y
|
||||
CONFIG_EXT2_FS=y
|
||||
CONFIG_INOTIFY=y
|
||||
CONFIG_MSDOS_FS=y
|
||||
CONFIG_VFAT_FS=y
|
||||
CONFIG_JFFS2_FS=y
|
||||
CONFIG_CRAMFS=y
|
||||
CONFIG_ROMFS_FS=y
|
||||
CONFIG_NFS_FS=y
|
||||
CONFIG_ROOT_NFS=y
|
||||
CONFIG_NLS_CODEPAGE_437=y
|
||||
CONFIG_NLS_ISO8859_1=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_DEBUG_INFO=y
|
||||
CONFIG_DEBUG_USER=y
|
||||
CONFIG_DEBUG_ERRORS=y
|
|
@ -1,102 +0,0 @@
|
|||
CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_SLAB=y
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
# CONFIG_BLK_DEV_BSG is not set
|
||||
CONFIG_ARCH_OMAP=y
|
||||
CONFIG_ARCH_OMAP1=y
|
||||
CONFIG_MACH_OMAP_INNOVATOR=y
|
||||
CONFIG_OMAP_ARM_168MHZ=y
|
||||
# CONFIG_OMAP_ARM_60MHZ is not set
|
||||
CONFIG_PREEMPT=y
|
||||
CONFIG_LEDS=y
|
||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
||||
CONFIG_CMDLINE="console=ttyS0,115200n8 root=/dev/nfs ip=bootp noinitrd"
|
||||
CONFIG_FPE_NWFPE=y
|
||||
CONFIG_PM=y
|
||||
CONFIG_NET=y
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_INET=y
|
||||
CONFIG_IP_MULTICAST=y
|
||||
CONFIG_IP_PNP=y
|
||||
CONFIG_IP_PNP_DHCP=y
|
||||
CONFIG_IP_PNP_BOOTP=y
|
||||
# CONFIG_IPV6 is not set
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_SIZE=8192
|
||||
CONFIG_SCSI=y
|
||||
CONFIG_BLK_DEV_SD=y
|
||||
CONFIG_CHR_DEV_ST=y
|
||||
CONFIG_BLK_DEV_SR=y
|
||||
CONFIG_CHR_DEV_SG=y
|
||||
CONFIG_SCSI_MULTI_LUN=y
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_SMC91X=y
|
||||
CONFIG_USB_RTL8150=y
|
||||
CONFIG_USB_USBNET=y
|
||||
# CONFIG_USB_NET_CDC_SUBSET is not set
|
||||
CONFIG_PPP=y
|
||||
CONFIG_PPP_MULTILINK=y
|
||||
CONFIG_PPP_ASYNC=y
|
||||
CONFIG_PPP_DEFLATE=y
|
||||
CONFIG_PPP_BSDCOMP=y
|
||||
CONFIG_INPUT_MOUSEDEV_SCREEN_X=240
|
||||
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=320
|
||||
# CONFIG_KEYBOARD_ATKBD is not set
|
||||
CONFIG_KEYBOARD_OMAP=y
|
||||
# CONFIG_INPUT_MOUSE is not set
|
||||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
CONFIG_I2C=y
|
||||
CONFIG_VIDEO_OUTPUT_CONTROL=m
|
||||
CONFIG_FB=y
|
||||
CONFIG_FB_OMAP=y
|
||||
# CONFIG_VGA_CONSOLE is not set
|
||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
CONFIG_FONTS=y
|
||||
CONFIG_FONT_8x8=y
|
||||
CONFIG_FONT_8x16=y
|
||||
CONFIG_LOGO=y
|
||||
CONFIG_USB=y
|
||||
CONFIG_USB_DEBUG=y
|
||||
CONFIG_USB_DEVICEFS=y
|
||||
# CONFIG_USB_DEVICE_CLASS is not set
|
||||
CONFIG_USB_MON=y
|
||||
CONFIG_USB_OHCI_HCD=y
|
||||
CONFIG_USB_STORAGE=y
|
||||
CONFIG_USB_STORAGE_DATAFAB=y
|
||||
CONFIG_USB_STORAGE_FREECOM=y
|
||||
CONFIG_USB_STORAGE_SDDR09=y
|
||||
CONFIG_USB_STORAGE_SDDR55=y
|
||||
CONFIG_USB_STORAGE_JUMPSHOT=y
|
||||
CONFIG_MMC=y
|
||||
CONFIG_MMC_OMAP=y
|
||||
CONFIG_RTC_CLASS=y
|
||||
CONFIG_RTC_DRV_OMAP=y
|
||||
CONFIG_EXT2_FS=y
|
||||
CONFIG_EXT3_FS=y
|
||||
CONFIG_INOTIFY=y
|
||||
CONFIG_AUTOFS_FS=y
|
||||
CONFIG_AUTOFS4_FS=y
|
||||
CONFIG_ISO9660_FS=y
|
||||
CONFIG_JOLIET=y
|
||||
CONFIG_MSDOS_FS=m
|
||||
CONFIG_VFAT_FS=m
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_NFS_FS=y
|
||||
CONFIG_NFS_V3=y
|
||||
CONFIG_NFS_V4=y
|
||||
CONFIG_ROOT_NFS=y
|
||||
CONFIG_PARTITION_ADVANCED=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_CRYPTO_ECB=m
|
||||
CONFIG_CRYPTO_PCBC=m
|
|
@ -1,58 +0,0 @@
|
|||
CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
# CONFIG_BLK_DEV_BSG is not set
|
||||
CONFIG_ARCH_OMAP=y
|
||||
CONFIG_ARCH_OMAP1=y
|
||||
# CONFIG_ARCH_OMAP15XX is not set
|
||||
CONFIG_ARCH_OMAP16XX=y
|
||||
CONFIG_MACH_OMAP_INNOVATOR=y
|
||||
CONFIG_OMAP_ARM_192MHZ=y
|
||||
# CONFIG_OMAP_ARM_60MHZ is not set
|
||||
# CONFIG_ARM_THUMB is not set
|
||||
CONFIG_CPU_DCACHE_WRITETHROUGH=y
|
||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
||||
CONFIG_CMDLINE="mem=32M console=tty0 console=ttyS0,115200 initrd=0x10200000,8M root=/dev/ram0 rw"
|
||||
CONFIG_FPE_NWFPE=y
|
||||
CONFIG_NET=y
|
||||
CONFIG_PACKET=m
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_INET=y
|
||||
CONFIG_IP_MULTICAST=y
|
||||
CONFIG_IP_PNP=y
|
||||
CONFIG_IP_PNP_DHCP=y
|
||||
CONFIG_IP_PNP_BOOTP=y
|
||||
# CONFIG_IPV6 is not set
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_SIZE=8192
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_SMC91X=y
|
||||
CONFIG_PPP=y
|
||||
CONFIG_PPP_MULTILINK=y
|
||||
# CONFIG_KEYBOARD_ATKBD is not set
|
||||
CONFIG_KEYBOARD_OMAP=y
|
||||
# CONFIG_INPUT_MOUSE is not set
|
||||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
CONFIG_VIDEO_OUTPUT_CONTROL=m
|
||||
CONFIG_FB=y
|
||||
CONFIG_FB_MODE_HELPERS=y
|
||||
CONFIG_FB_OMAP=y
|
||||
# CONFIG_VGA_CONSOLE is not set
|
||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
CONFIG_FONTS=y
|
||||
CONFIG_FONT_8x8=y
|
||||
CONFIG_FONT_8x16=y
|
||||
CONFIG_LOGO=y
|
||||
CONFIG_EXT2_FS=y
|
||||
CONFIG_INOTIFY=y
|
||||
CONFIG_AUTOFS_FS=y
|
||||
CONFIG_AUTOFS4_FS=y
|
||||
CONFIG_NFS_FS=y
|
||||
CONFIG_NFS_V3=y
|
|
@ -1,87 +0,0 @@
|
|||
CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
# CONFIG_BLK_DEV_BSG is not set
|
||||
CONFIG_ARCH_OMAP=y
|
||||
CONFIG_ARCH_OMAP1=y
|
||||
CONFIG_OMAP_RESET_CLOCKS=y
|
||||
CONFIG_OMAP_32K_TIMER=y
|
||||
# CONFIG_ARCH_OMAP15XX is not set
|
||||
CONFIG_ARCH_OMAP16XX=y
|
||||
CONFIG_MACH_OMAP_OSK=y
|
||||
CONFIG_OMAP_ARM_192MHZ=y
|
||||
# CONFIG_OMAP_ARM_60MHZ is not set
|
||||
# CONFIG_ARM_THUMB is not set
|
||||
CONFIG_PCCARD=y
|
||||
CONFIG_OMAP_CF=y
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
||||
CONFIG_CMDLINE="mem=32M console=ttyS0,115200 initrd=0x10400000,8M root=/dev/ram0 rw"
|
||||
CONFIG_FPE_NWFPE=y
|
||||
CONFIG_PM=y
|
||||
CONFIG_NET=y
|
||||
CONFIG_PACKET=m
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_INET=y
|
||||
CONFIG_IP_MULTICAST=y
|
||||
CONFIG_IP_PNP=y
|
||||
CONFIG_IP_PNP_DHCP=y
|
||||
CONFIG_IP_PNP_BOOTP=y
|
||||
# CONFIG_INET_LRO is not set
|
||||
# CONFIG_IPV6 is not set
|
||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||
CONFIG_MTD=y
|
||||
CONFIG_MTD_PARTITIONS=y
|
||||
CONFIG_MTD_CMDLINE_PARTS=y
|
||||
CONFIG_MTD_CHAR=y
|
||||
CONFIG_MTD_BLOCK=y
|
||||
CONFIG_MTD_CFI=y
|
||||
CONFIG_MTD_CFI_INTELEXT=y
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_SIZE=8192
|
||||
CONFIG_IDE=m
|
||||
CONFIG_BLK_DEV_IDECS=m
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_SMC91X=y
|
||||
CONFIG_PPP=y
|
||||
CONFIG_PPP_MULTILINK=y
|
||||
# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
|
||||
CONFIG_INPUT_EVDEV=y
|
||||
# CONFIG_KEYBOARD_ATKBD is not set
|
||||
CONFIG_KEYBOARD_OMAP=y
|
||||
# CONFIG_INPUT_MOUSE is not set
|
||||
CONFIG_INPUT_TOUCHSCREEN=y
|
||||
# CONFIG_SERIO is not set
|
||||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
CONFIG_I2C=y
|
||||
CONFIG_I2C_CHARDEV=y
|
||||
CONFIG_VIDEO_OUTPUT_CONTROL=m
|
||||
CONFIG_FB=y
|
||||
CONFIG_FB_MODE_HELPERS=y
|
||||
CONFIG_FB_OMAP=y
|
||||
# CONFIG_VGA_CONSOLE is not set
|
||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
CONFIG_FONTS=y
|
||||
CONFIG_FONT_8x8=y
|
||||
CONFIG_LOGO=y
|
||||
# CONFIG_LOGO_LINUX_MONO is not set
|
||||
# CONFIG_LOGO_LINUX_VGA16 is not set
|
||||
CONFIG_EXT2_FS=y
|
||||
CONFIG_INOTIFY=y
|
||||
CONFIG_AUTOFS_FS=y
|
||||
CONFIG_AUTOFS4_FS=y
|
||||
CONFIG_MSDOS_FS=m
|
||||
CONFIG_VFAT_FS=m
|
||||
CONFIG_JFFS2_FS=y
|
||||
CONFIG_NFS_FS=y
|
||||
CONFIG_NFS_V3=y
|
||||
CONFIG_ROOT_NFS=y
|
||||
CONFIG_NLS_CODEPAGE_437=m
|
||||
CONFIG_NLS_ISO8859_1=m
|
|
@ -1,65 +0,0 @@
|
|||
CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_SLAB=y
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
# CONFIG_BLK_DEV_BSG is not set
|
||||
CONFIG_ARCH_OMAP=y
|
||||
CONFIG_ARCH_OMAP1=y
|
||||
CONFIG_ARCH_OMAP730=y
|
||||
# CONFIG_ARCH_OMAP15XX is not set
|
||||
CONFIG_MACH_OMAP_PERSEUS2=y
|
||||
CONFIG_OMAP_ARM_182MHZ=y
|
||||
# CONFIG_OMAP_ARM_60MHZ is not set
|
||||
# CONFIG_ARM_THUMB is not set
|
||||
CONFIG_PREEMPT=y
|
||||
CONFIG_LEDS=y
|
||||
CONFIG_LEDS_CPU=y
|
||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
||||
CONFIG_CMDLINE="mem=32M console=ttyS0,115200 ip=dhcp"
|
||||
CONFIG_FPE_NWFPE=y
|
||||
CONFIG_PM=y
|
||||
CONFIG_NET=y
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_INET=y
|
||||
CONFIG_IP_MULTICAST=y
|
||||
CONFIG_IP_PNP=y
|
||||
CONFIG_IP_PNP_DHCP=y
|
||||
CONFIG_IP_PNP_BOOTP=y
|
||||
# CONFIG_IPV6 is not set
|
||||
CONFIG_MTD=y
|
||||
CONFIG_MTD_PARTITIONS=y
|
||||
CONFIG_MTD_CMDLINE_PARTS=y
|
||||
CONFIG_MTD_CHAR=y
|
||||
CONFIG_MTD_BLOCK=y
|
||||
CONFIG_MTD_CFI=y
|
||||
CONFIG_MTD_CFI_INTELEXT=y
|
||||
CONFIG_MTD_NAND=y
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_SIZE=8192
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_SMC91X=y
|
||||
# CONFIG_KEYBOARD_ATKBD is not set
|
||||
CONFIG_KEYBOARD_OMAP=y
|
||||
# CONFIG_INPUT_MOUSE is not set
|
||||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
CONFIG_VIDEO_OUTPUT_CONTROL=m
|
||||
CONFIG_FB=y
|
||||
CONFIG_FB_MODE_HELPERS=y
|
||||
CONFIG_FB_VIRTUAL=y
|
||||
# CONFIG_VGA_CONSOLE is not set
|
||||
CONFIG_RTC_CLASS=y
|
||||
CONFIG_RTC_DRV_OMAP=y
|
||||
CONFIG_EXT2_FS=y
|
||||
CONFIG_INOTIFY=y
|
||||
CONFIG_JFFS2_FS=y
|
||||
CONFIG_NFS_FS=y
|
||||
CONFIG_ROOT_NFS=y
|
|
@ -1,48 +0,0 @@
|
|||
CONFIG_EXPERIMENTAL=y
|
||||
# CONFIG_SWAP is not set
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_BSD_PROCESS_ACCT=y
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
CONFIG_SLAB=y
|
||||
# CONFIG_IOSCHED_DEADLINE is not set
|
||||
# CONFIG_IOSCHED_CFQ is not set
|
||||
CONFIG_ARCH_OMAP=y
|
||||
CONFIG_ARCH_OMAP1=y
|
||||
CONFIG_MACH_OMAP_PALMTE=y
|
||||
CONFIG_OMAP_CLOCKS_SET_BY_BOOTLOADER=y
|
||||
# CONFIG_OMAP_ARM_60MHZ is not set
|
||||
# CONFIG_ARM_THUMB is not set
|
||||
# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
|
||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
||||
CONFIG_FPE_NWFPE=y
|
||||
# CONFIG_STANDALONE is not set
|
||||
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
||||
# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
|
||||
CONFIG_INPUT_MOUSEDEV_SCREEN_X=320
|
||||
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=320
|
||||
# CONFIG_INPUT_KEYBOARD is not set
|
||||
# CONFIG_INPUT_MOUSE is not set
|
||||
# CONFIG_SERIO is not set
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
# CONFIG_HWMON is not set
|
||||
CONFIG_FB=y
|
||||
CONFIG_FB_OMAP=y
|
||||
# CONFIG_VGA_CONSOLE is not set
|
||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
CONFIG_LOGO=y
|
||||
# CONFIG_LOGO_LINUX_MONO is not set
|
||||
# CONFIG_LOGO_LINUX_VGA16 is not set
|
||||
CONFIG_USB_GADGET=y
|
||||
CONFIG_MMC=y
|
||||
CONFIG_MMC_OMAP=y
|
||||
CONFIG_EXT2_FS=y
|
||||
CONFIG_MSDOS_FS=y
|
||||
CONFIG_VFAT_FS=y
|
||||
CONFIG_FAT_DEFAULT_CODEPAGE=850
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_CRAMFS=y
|
||||
CONFIG_PARTITION_ADVANCED=y
|
||||
CONFIG_NLS_CODEPAGE_850=y
|
||||
CONFIG_NLS_ISO8859_1=y
|
||||
CONFIG_CRC_CCITT=y
|
|
@ -1,56 +0,0 @@
|
|||
CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_BSD_PROCESS_ACCT=y
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
CONFIG_SLAB=y
|
||||
# CONFIG_IOSCHED_DEADLINE is not set
|
||||
# CONFIG_IOSCHED_CFQ is not set
|
||||
CONFIG_ARCH_OMAP=y
|
||||
CONFIG_ARCH_OMAP1=y
|
||||
CONFIG_MACH_OMAP_PALMTT=y
|
||||
CONFIG_OMAP_CLOCKS_SET_BY_BOOTLOADER=y
|
||||
# CONFIG_OMAP_ARM_60MHZ is not set
|
||||
# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
|
||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
||||
CONFIG_CMDLINE="root=/dev/mmcblk0p2 rw init=/init"
|
||||
CONFIG_FPE_NWFPE=y
|
||||
CONFIG_NET=y
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_NET_KEY=y
|
||||
CONFIG_INET=y
|
||||
# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
|
||||
# CONFIG_INET_XFRM_MODE_TUNNEL is not set
|
||||
# CONFIG_INET_XFRM_MODE_BEET is not set
|
||||
# CONFIG_INET_DIAG is not set
|
||||
# CONFIG_IPV6 is not set
|
||||
CONFIG_INPUT_MOUSEDEV_SCREEN_X=320
|
||||
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=320
|
||||
CONFIG_INPUT_EVDEV=y
|
||||
# CONFIG_INPUT_KEYBOARD is not set
|
||||
# CONFIG_INPUT_MOUSE is not set
|
||||
CONFIG_INPUT_TOUCHSCREEN=y
|
||||
CONFIG_TOUCHSCREEN_ADS7846=y
|
||||
# CONFIG_SERIO is not set
|
||||
CONFIG_SPI=y
|
||||
CONFIG_SPI_OMAP_UWIRE=y
|
||||
CONFIG_FB=y
|
||||
CONFIG_FIRMWARE_EDID=y
|
||||
CONFIG_FB_OMAP=y
|
||||
CONFIG_BACKLIGHT_LCD_SUPPORT=y
|
||||
# CONFIG_VGA_CONSOLE is not set
|
||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
CONFIG_NEW_LEDS=y
|
||||
CONFIG_LEDS_CLASS=y
|
||||
CONFIG_LEDS_TRIGGERS=y
|
||||
CONFIG_LEDS_TRIGGER_TIMER=y
|
||||
CONFIG_LEDS_TRIGGER_HEARTBEAT=y
|
||||
CONFIG_RTC_CLASS=y
|
||||
CONFIG_RTC_DRV_OMAP=y
|
||||
CONFIG_EXT2_FS=y
|
||||
CONFIG_PARTITION_ADVANCED=y
|
||||
# CONFIG_ENABLE_MUST_CHECK is not set
|
||||
CONFIG_CRC_CCITT=y
|
||||
CONFIG_CRC16=y
|
||||
CONFIG_LIBCRC32C=y
|
|
@ -1,53 +0,0 @@
|
|||
CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_LOCALVERSION="-z71"
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_BSD_PROCESS_ACCT=y
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
CONFIG_SLAB=y
|
||||
# CONFIG_IOSCHED_DEADLINE is not set
|
||||
# CONFIG_IOSCHED_CFQ is not set
|
||||
CONFIG_ARCH_OMAP=y
|
||||
CONFIG_ARCH_OMAP1=y
|
||||
CONFIG_MACH_OMAP_PALMZ71=y
|
||||
CONFIG_OMAP_CLOCKS_SET_BY_BOOTLOADER=y
|
||||
# CONFIG_OMAP_ARM_60MHZ is not set
|
||||
# CONFIG_ARM_THUMB is not set
|
||||
# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
|
||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
||||
CONFIG_FPE_NWFPE=y
|
||||
CONFIG_NET=y
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_NET_KEY=y
|
||||
CONFIG_INET=y
|
||||
# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
|
||||
# CONFIG_INET_XFRM_MODE_TUNNEL is not set
|
||||
# CONFIG_INET_DIAG is not set
|
||||
# CONFIG_IPV6 is not set
|
||||
CONFIG_INPUT_MOUSEDEV_SCREEN_X=320
|
||||
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=320
|
||||
# CONFIG_INPUT_KEYBOARD is not set
|
||||
# CONFIG_INPUT_MOUSE is not set
|
||||
CONFIG_INPUT_TOUCHSCREEN=y
|
||||
CONFIG_TOUCHSCREEN_ADS7846=y
|
||||
# CONFIG_SERIO is not set
|
||||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
CONFIG_LEGACY_PTY_COUNT=16
|
||||
CONFIG_SPI=y
|
||||
CONFIG_SPI_OMAP_UWIRE=y
|
||||
CONFIG_FB=y
|
||||
CONFIG_FIRMWARE_EDID=y
|
||||
CONFIG_FB_OMAP=y
|
||||
CONFIG_BACKLIGHT_LCD_SUPPORT=y
|
||||
# CONFIG_VGA_CONSOLE is not set
|
||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
CONFIG_MMC=y
|
||||
CONFIG_MMC_OMAP=y
|
||||
CONFIG_RTC_CLASS=y
|
||||
CONFIG_RTC_DRV_OMAP=y
|
||||
CONFIG_EXT2_FS=y
|
||||
CONFIG_CRC_CCITT=y
|
||||
CONFIG_CRC16=y
|
||||
CONFIG_LIBCRC32C=y
|
|
@ -1,110 +0,0 @@
|
|||
CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_POSIX_MQUEUE=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
CONFIG_EMBEDDED=y
|
||||
# CONFIG_KALLSYMS is not set
|
||||
# CONFIG_ELF_CORE is not set
|
||||
# CONFIG_BASE_FULL is not set
|
||||
# CONFIG_SHMEM is not set
|
||||
# CONFIG_VM_EVENT_COUNTERS is not set
|
||||
CONFIG_SLOB=y
|
||||
CONFIG_PROFILING=y
|
||||
CONFIG_OPROFILE=y
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
# CONFIG_IOSCHED_CFQ is not set
|
||||
CONFIG_ARCH_OMAP=y
|
||||
CONFIG_ARCH_OMAP1=y
|
||||
CONFIG_OMAP_MBOX_FWK=y
|
||||
CONFIG_MACH_SX1=y
|
||||
CONFIG_OMAP_ARM_168MHZ=y
|
||||
# CONFIG_OMAP_ARM_60MHZ is not set
|
||||
# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
|
||||
CONFIG_PREEMPT=y
|
||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
||||
CONFIG_FPE_NWFPE=y
|
||||
CONFIG_BINFMT_MISC=y
|
||||
CONFIG_NET=y
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_INET=y
|
||||
CONFIG_IP_PNP=y
|
||||
# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
|
||||
# CONFIG_INET_XFRM_MODE_TUNNEL is not set
|
||||
# CONFIG_INET_XFRM_MODE_BEET is not set
|
||||
# CONFIG_INET_DIAG is not set
|
||||
# CONFIG_IPV6 is not set
|
||||
# CONFIG_FW_LOADER is not set
|
||||
CONFIG_CONNECTOR=y
|
||||
# CONFIG_PROC_EVENTS is not set
|
||||
CONFIG_BLK_DEV_LOOP=m
|
||||
CONFIG_BLK_DEV_RAM=m
|
||||
CONFIG_BLK_DEV_RAM_COUNT=2
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_PHYLIB=y
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_MII=y
|
||||
# CONFIG_INPUT_MOUSEDEV is not set
|
||||
CONFIG_INPUT_EVDEV=y
|
||||
# CONFIG_KEYBOARD_ATKBD is not set
|
||||
CONFIG_KEYBOARD_OMAP=y
|
||||
# CONFIG_INPUT_MOUSE is not set
|
||||
# CONFIG_SERIO is not set
|
||||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_8250_NR_UARTS=3
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
CONFIG_I2C=y
|
||||
CONFIG_I2C_CHARDEV=y
|
||||
CONFIG_I2C_OMAP=y
|
||||
# CONFIG_HWMON is not set
|
||||
CONFIG_FB=y
|
||||
CONFIG_FB_OMAP=y
|
||||
CONFIG_FB_OMAP_BOOTLOADER_INIT=y
|
||||
# CONFIG_VGA_CONSOLE is not set
|
||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
CONFIG_FONTS=y
|
||||
CONFIG_FONT_MINI_4x6=y
|
||||
CONFIG_LOGO=y
|
||||
# CONFIG_LOGO_LINUX_MONO is not set
|
||||
# CONFIG_LOGO_LINUX_VGA16 is not set
|
||||
CONFIG_SOUND=y
|
||||
CONFIG_SND=y
|
||||
CONFIG_SND_MIXER_OSS=y
|
||||
CONFIG_SND_PCM_OSS=y
|
||||
# CONFIG_SND_SUPPORT_OLD_API is not set
|
||||
# CONFIG_SND_VERBOSE_PROCFS is not set
|
||||
CONFIG_USB_GADGET=y
|
||||
CONFIG_USB_ETH=m
|
||||
CONFIG_MMC=y
|
||||
CONFIG_MMC_OMAP=y
|
||||
CONFIG_RTC_CLASS=y
|
||||
CONFIG_RTC_DRV_OMAP=y
|
||||
CONFIG_EXT2_FS=y
|
||||
# CONFIG_DNOTIFY is not set
|
||||
CONFIG_INOTIFY=y
|
||||
CONFIG_MSDOS_FS=y
|
||||
CONFIG_VFAT_FS=y
|
||||
CONFIG_FAT_DEFAULT_CODEPAGE=866
|
||||
CONFIG_FAT_DEFAULT_IOCHARSET="koi8-r"
|
||||
CONFIG_CRAMFS=y
|
||||
CONFIG_NFS_FS=y
|
||||
CONFIG_ROOT_NFS=y
|
||||
CONFIG_PARTITION_ADVANCED=y
|
||||
CONFIG_NLS_CODEPAGE_437=y
|
||||
CONFIG_NLS_CODEPAGE_866=y
|
||||
CONFIG_NLS_CODEPAGE_1251=y
|
||||
CONFIG_NLS_ISO8859_1=y
|
||||
CONFIG_NLS_ISO8859_5=y
|
||||
CONFIG_NLS_KOI8_R=y
|
||||
CONFIG_NLS_UTF8=y
|
||||
# CONFIG_ENABLE_MUST_CHECK is not set
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
# CONFIG_DETECT_SOFTLOCKUP is not set
|
||||
# CONFIG_DEBUG_BUGVERBOSE is not set
|
||||
CONFIG_CRC_CCITT=y
|
||||
CONFIG_CRC16=y
|
||||
CONFIG_LIBCRC32C=y
|
|
@ -9,6 +9,10 @@ CONFIG_MODULE_UNLOAD=y
|
|||
# CONFIG_LBDAF is not set
|
||||
# CONFIG_BLK_DEV_BSG is not set
|
||||
CONFIG_ARCH_U8500=y
|
||||
CONFIG_UX500_SOC_DB5500=y
|
||||
CONFIG_UX500_SOC_DB8500=y
|
||||
CONFIG_MACH_U8500=y
|
||||
CONFIG_MACH_U5500=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_NR_CPUS=2
|
||||
CONFIG_PREEMPT=y
|
||||
|
|
|
@ -59,7 +59,17 @@
|
|||
#define L2X0_CACHE_ID_PART_MASK (0xf << 6)
|
||||
#define L2X0_CACHE_ID_PART_L210 (1 << 6)
|
||||
#define L2X0_CACHE_ID_PART_L310 (3 << 6)
|
||||
#define L2X0_AUX_CTRL_WAY_SIZE_MASK (0x3 << 17)
|
||||
|
||||
#define L2X0_AUX_CTRL_MASK 0xc0000fff
|
||||
#define L2X0_AUX_CTRL_ASSOCIATIVITY_SHIFT 16
|
||||
#define L2X0_AUX_CTRL_WAY_SIZE_SHIFT 17
|
||||
#define L2X0_AUX_CTRL_WAY_SIZE_MASK (0x3 << 17)
|
||||
#define L2X0_AUX_CTRL_SHARE_OVERRIDE_SHIFT 22
|
||||
#define L2X0_AUX_CTRL_NS_LOCKDOWN_SHIFT 26
|
||||
#define L2X0_AUX_CTRL_NS_INT_CTRL_SHIFT 27
|
||||
#define L2X0_AUX_CTRL_DATA_PREFETCH_SHIFT 28
|
||||
#define L2X0_AUX_CTRL_INSTR_PREFETCH_SHIFT 29
|
||||
#define L2X0_AUX_CTRL_EARLY_BRESP_SHIFT 30
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
extern void __init l2x0_init(void __iomem *base, __u32 aux_val, __u32 aux_mask);
|
||||
|
|
|
@ -412,12 +412,7 @@ static struct resource dm355_spi0_resources[] = {
|
|||
static struct davinci_spi_platform_data dm355_spi0_pdata = {
|
||||
.version = SPI_VERSION_1,
|
||||
.num_chipselect = 2,
|
||||
.clk_internal = 1,
|
||||
.cs_hold = 1,
|
||||
.intr_level = 0,
|
||||
.poll_mode = 1, /* 0 -> interrupt mode 1-> polling mode */
|
||||
.c2tdelay = 0,
|
||||
.t2cdelay = 0,
|
||||
.cshold_bug = true,
|
||||
};
|
||||
static struct platform_device dm355_spi0_device = {
|
||||
.name = "spi_davinci",
|
||||
|
|
|
@ -625,12 +625,6 @@ static u64 dm365_spi0_dma_mask = DMA_BIT_MASK(32);
|
|||
static struct davinci_spi_platform_data dm365_spi0_pdata = {
|
||||
.version = SPI_VERSION_1,
|
||||
.num_chipselect = 2,
|
||||
.clk_internal = 1,
|
||||
.cs_hold = 1,
|
||||
.intr_level = 0,
|
||||
.poll_mode = 1, /* 0 -> interrupt mode 1-> polling mode */
|
||||
.c2tdelay = 0,
|
||||
.t2cdelay = 0,
|
||||
};
|
||||
|
||||
static struct resource dm365_spi0_resources[] = {
|
||||
|
|
|
@ -19,26 +19,66 @@
|
|||
#ifndef __ARCH_ARM_DAVINCI_SPI_H
|
||||
#define __ARCH_ARM_DAVINCI_SPI_H
|
||||
|
||||
#define SPI_INTERN_CS 0xFF
|
||||
|
||||
enum {
|
||||
SPI_VERSION_1, /* For DM355/DM365/DM6467 */
|
||||
SPI_VERSION_2, /* For DA8xx */
|
||||
};
|
||||
|
||||
/**
|
||||
* davinci_spi_platform_data - Platform data for SPI master device on DaVinci
|
||||
*
|
||||
* @version: version of the SPI IP. Different DaVinci devices have slightly
|
||||
* varying versions of the same IP.
|
||||
* @num_chipselect: number of chipselects supported by this SPI master
|
||||
* @intr_line: interrupt line used to connect the SPI IP to the ARM interrupt
|
||||
* controller withn the SoC. Possible values are 0 and 1.
|
||||
* @chip_sel: list of GPIOs which can act as chip-selects for the SPI.
|
||||
* SPI_INTERN_CS denotes internal SPI chip-select. Not necessary
|
||||
* to populate if all chip-selects are internal.
|
||||
* @cshold_bug: set this to true if the SPI controller on your chip requires
|
||||
* a write to CSHOLD bit in between transfers (like in DM355).
|
||||
*/
|
||||
struct davinci_spi_platform_data {
|
||||
u8 version;
|
||||
u8 num_chipselect;
|
||||
u8 intr_line;
|
||||
u8 *chip_sel;
|
||||
bool cshold_bug;
|
||||
};
|
||||
|
||||
/**
|
||||
* davinci_spi_config - Per-chip-select configuration for SPI slave devices
|
||||
*
|
||||
* @wdelay: amount of delay between transmissions. Measured in number of
|
||||
* SPI module clocks.
|
||||
* @odd_parity: polarity of parity flag at the end of transmit data stream.
|
||||
* 0 - odd parity, 1 - even parity.
|
||||
* @parity_enable: enable transmission of parity at end of each transmit
|
||||
* data stream.
|
||||
* @io_type: type of IO transfer. Choose between polled, interrupt and DMA.
|
||||
* @timer_disable: disable chip-select timers (setup and hold)
|
||||
* @c2tdelay: chip-select setup time. Measured in number of SPI module clocks.
|
||||
* @t2cdelay: chip-select hold time. Measured in number of SPI module clocks.
|
||||
* @t2edelay: transmit data finished to SPI ENAn pin inactive time. Measured
|
||||
* in number of SPI clocks.
|
||||
* @c2edelay: chip-select active to SPI ENAn signal active time. Measured in
|
||||
* number of SPI clocks.
|
||||
*/
|
||||
struct davinci_spi_config {
|
||||
u8 wdelay;
|
||||
u8 odd_parity;
|
||||
u8 parity_enable;
|
||||
u8 wait_enable;
|
||||
#define SPI_IO_TYPE_INTR 0
|
||||
#define SPI_IO_TYPE_POLL 1
|
||||
#define SPI_IO_TYPE_DMA 2
|
||||
u8 io_type;
|
||||
u8 timer_disable;
|
||||
u8 clk_internal;
|
||||
u8 cs_hold;
|
||||
u8 intr_level;
|
||||
u8 poll_mode;
|
||||
u8 use_dma;
|
||||
u8 c2tdelay;
|
||||
u8 t2cdelay;
|
||||
u8 t2edelay;
|
||||
u8 c2edelay;
|
||||
};
|
||||
|
||||
#endif /* __ARCH_ARM_DAVINCI_SPI_H */
|
||||
|
|
|
@ -64,17 +64,19 @@ static struct resource usb_resources[] = {
|
|||
{
|
||||
.start = IRQ_USBINT,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
.name = "mc"
|
||||
},
|
||||
{
|
||||
/* placeholder for the dedicated CPPI IRQ */
|
||||
.flags = IORESOURCE_IRQ,
|
||||
.name = "dma"
|
||||
},
|
||||
};
|
||||
|
||||
static u64 usb_dmamask = DMA_BIT_MASK(32);
|
||||
|
||||
static struct platform_device usb_dev = {
|
||||
.name = "musb_hdrc",
|
||||
.name = "musb-davinci",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &usb_data,
|
||||
|
@ -110,6 +112,7 @@ static struct resource da8xx_usb20_resources[] = {
|
|||
{
|
||||
.start = IRQ_DA8XX_USB_INT,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
.name = "mc",
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -121,6 +124,7 @@ int __init da8xx_register_usb20(unsigned mA, unsigned potpgt)
|
|||
|
||||
usb_dev.resource = da8xx_usb20_resources;
|
||||
usb_dev.num_resources = ARRAY_SIZE(da8xx_usb20_resources);
|
||||
usb_dev.name = "musb-da8xx";
|
||||
|
||||
return platform_device_register(&usb_dev);
|
||||
}
|
||||
|
|
|
@ -40,11 +40,13 @@ config ARCH_MSM8X60
|
|||
bool "MSM8X60"
|
||||
select MACH_MSM8X60_SURF if (!MACH_MSM8X60_RUMI3 && !MACH_MSM8X60_SIM \
|
||||
&& !MACH_MSM8X60_FFA)
|
||||
select ARCH_MSM_SCORPIONMP
|
||||
select ARM_GIC
|
||||
select CPU_V7
|
||||
select MSM_V2_TLMM
|
||||
select MSM_GPIOMUX
|
||||
select IOMMU_API
|
||||
select MSM_SCM if SMP
|
||||
|
||||
endchoice
|
||||
|
||||
|
@ -172,4 +174,7 @@ config MSM_V2_TLMM
|
|||
|
||||
config IOMMU_API
|
||||
bool
|
||||
|
||||
config MSM_SCM
|
||||
bool
|
||||
endif
|
||||
|
|
|
@ -18,6 +18,10 @@ obj-$(CONFIG_MSM_PROC_COMM) += clock.o
|
|||
obj-$(CONFIG_ARCH_QSD8X50) += sirc.o
|
||||
obj-$(CONFIG_MSM_SMD) += smd.o smd_debug.o
|
||||
obj-$(CONFIG_MSM_SMD) += last_radio_log.o
|
||||
obj-$(CONFIG_MSM_SCM) += scm.o scm-boot.o
|
||||
|
||||
obj-$(CONFIG_HOTPLUG_CPU) += hotplug.o
|
||||
obj-$(CONFIG_SMP) += headsmp.o platsmp.o
|
||||
|
||||
obj-$(CONFIG_MACH_TROUT) += board-trout.o board-trout-gpio.o board-trout-mmc.o devices-msm7x00.o
|
||||
obj-$(CONFIG_MACH_TROUT) += board-trout.o board-trout-gpio.o board-trout-mmc.o board-trout-panel.o devices-msm7x00.o
|
||||
|
|
|
@ -0,0 +1,40 @@
|
|||
/*
|
||||
* linux/arch/arm/mach-realview/headsmp.S
|
||||
*
|
||||
* Copyright (c) 2003 ARM Limited
|
||||
* All Rights Reserved
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
#include <linux/linkage.h>
|
||||
#include <linux/init.h>
|
||||
|
||||
__INIT
|
||||
|
||||
/*
|
||||
* MSM specific entry point for secondary CPUs. This provides
|
||||
* a "holding pen" into which all secondary cores are held until we're
|
||||
* ready for them to initialise.
|
||||
*/
|
||||
ENTRY(msm_secondary_startup)
|
||||
mrc p15, 0, r0, c0, c0, 5
|
||||
and r0, r0, #15
|
||||
adr r4, 1f
|
||||
ldmia r4, {r5, r6}
|
||||
sub r4, r4, r5
|
||||
add r6, r6, r4
|
||||
pen: ldr r7, [r6]
|
||||
cmp r7, r0
|
||||
bne pen
|
||||
|
||||
/*
|
||||
* we've been released from the holding pen: secondary_stack
|
||||
* should now contain the SVC stack for this core
|
||||
*/
|
||||
b secondary_startup
|
||||
|
||||
.align
|
||||
1: .long .
|
||||
.long pen_release
|
|
@ -0,0 +1,91 @@
|
|||
/*
|
||||
* Copyright (C) 2002 ARM Ltd.
|
||||
* All Rights Reserved
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/smp.h>
|
||||
|
||||
#include <asm/cacheflush.h>
|
||||
|
||||
extern volatile int pen_release;
|
||||
|
||||
static inline void cpu_enter_lowpower(void)
|
||||
{
|
||||
/* Just flush the cache. Changing the coherency is not yet
|
||||
* available on msm. */
|
||||
flush_cache_all();
|
||||
}
|
||||
|
||||
static inline void cpu_leave_lowpower(void)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void platform_do_lowpower(unsigned int cpu)
|
||||
{
|
||||
/* Just enter wfi for now. TODO: Properly shut off the cpu. */
|
||||
for (;;) {
|
||||
/*
|
||||
* here's the WFI
|
||||
*/
|
||||
asm("wfi"
|
||||
:
|
||||
:
|
||||
: "memory", "cc");
|
||||
|
||||
if (pen_release == cpu) {
|
||||
/*
|
||||
* OK, proper wakeup, we're done
|
||||
*/
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* getting here, means that we have come out of WFI without
|
||||
* having been woken up - this shouldn't happen
|
||||
*
|
||||
* The trouble is, letting people know about this is not really
|
||||
* possible, since we are currently running incoherently, and
|
||||
* therefore cannot safely call printk() or anything else
|
||||
*/
|
||||
pr_debug("CPU%u: spurious wakeup call\n", cpu);
|
||||
}
|
||||
}
|
||||
|
||||
int platform_cpu_kill(unsigned int cpu)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* platform-specific code to shutdown a CPU
|
||||
*
|
||||
* Called with IRQs disabled
|
||||
*/
|
||||
void platform_cpu_die(unsigned int cpu)
|
||||
{
|
||||
/*
|
||||
* we're ready for shutdown now, so do it
|
||||
*/
|
||||
cpu_enter_lowpower();
|
||||
platform_do_lowpower(cpu);
|
||||
|
||||
/*
|
||||
* bring this CPU back into the world of cache
|
||||
* coherency, and then restore interrupts
|
||||
*/
|
||||
cpu_leave_lowpower();
|
||||
}
|
||||
|
||||
int platform_cpu_disable(unsigned int cpu)
|
||||
{
|
||||
/*
|
||||
* we don't allow CPU 0 to be shutdown (it is still too special
|
||||
* e.g. clock tick interrupts)
|
||||
*/
|
||||
return cpu == 0 ? -EPERM : 0;
|
||||
}
|
|
@ -60,7 +60,11 @@
|
|||
|
||||
#define MSM_TMR_BASE IOMEM(0xF0200000)
|
||||
#define MSM_TMR_PHYS 0x02000000
|
||||
#define MSM_TMR_SIZE (SZ_1M)
|
||||
#define MSM_TMR_SIZE SZ_4K
|
||||
|
||||
#define MSM_TMR0_BASE IOMEM(0xF0201000)
|
||||
#define MSM_TMR0_PHYS 0x02040000
|
||||
#define MSM_TMR0_SIZE SZ_4K
|
||||
|
||||
#define MSM_GPT_BASE (MSM_TMR_BASE + 0x4)
|
||||
#define MSM_DGT_BASE (MSM_TMR_BASE + 0x24)
|
||||
|
|
|
@ -105,6 +105,7 @@ static struct map_desc msm8x60_io_desc[] __initdata = {
|
|||
MSM_DEVICE(QGIC_DIST),
|
||||
MSM_DEVICE(QGIC_CPU),
|
||||
MSM_DEVICE(TMR),
|
||||
MSM_DEVICE(TMR0),
|
||||
MSM_DEVICE(ACC),
|
||||
MSM_DEVICE(GCC),
|
||||
};
|
||||
|
|
|
@ -0,0 +1,166 @@
|
|||
/*
|
||||
* Copyright (C) 2002 ARM Ltd.
|
||||
* All Rights Reserved
|
||||
* Copyright (c) 2010, Code Aurora Forum. All rights reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/jiffies.h>
|
||||
#include <linux/smp.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
#include <asm/hardware/gic.h>
|
||||
#include <asm/cacheflush.h>
|
||||
#include <asm/mach-types.h>
|
||||
|
||||
#include <mach/msm_iomap.h>
|
||||
|
||||
#include "scm-boot.h"
|
||||
|
||||
#define VDD_SC1_ARRAY_CLAMP_GFS_CTL 0x15A0
|
||||
#define SCSS_CPU1CORE_RESET 0xD80
|
||||
#define SCSS_DBG_STATUS_CORE_PWRDUP 0xE64
|
||||
|
||||
/* Mask for edge trigger PPIs except AVS_SVICINT and AVS_SVICINTSWDONE */
|
||||
#define GIC_PPI_EDGE_MASK 0xFFFFD7FF
|
||||
|
||||
extern void msm_secondary_startup(void);
|
||||
/*
|
||||
* control for which core is the next to come out of the secondary
|
||||
* boot "holding pen".
|
||||
*/
|
||||
volatile int pen_release = -1;
|
||||
|
||||
static DEFINE_SPINLOCK(boot_lock);
|
||||
|
||||
void __cpuinit platform_secondary_init(unsigned int cpu)
|
||||
{
|
||||
/* Configure edge-triggered PPIs */
|
||||
writel(GIC_PPI_EDGE_MASK, MSM_QGIC_DIST_BASE + GIC_DIST_CONFIG + 4);
|
||||
|
||||
/*
|
||||
* if any interrupts are already enabled for the primary
|
||||
* core (e.g. timer irq), then they will not have been enabled
|
||||
* for us: do so
|
||||
*/
|
||||
gic_secondary_init(0);
|
||||
|
||||
/*
|
||||
* let the primary processor know we're out of the
|
||||
* pen, then head off into the C entry point
|
||||
*/
|
||||
pen_release = -1;
|
||||
smp_wmb();
|
||||
|
||||
/*
|
||||
* Synchronise with the boot thread.
|
||||
*/
|
||||
spin_lock(&boot_lock);
|
||||
spin_unlock(&boot_lock);
|
||||
}
|
||||
|
||||
static __cpuinit void prepare_cold_cpu(unsigned int cpu)
|
||||
{
|
||||
int ret;
|
||||
ret = scm_set_boot_addr(virt_to_phys(msm_secondary_startup),
|
||||
SCM_FLAG_COLDBOOT_CPU1);
|
||||
if (ret == 0) {
|
||||
void *sc1_base_ptr;
|
||||
sc1_base_ptr = ioremap_nocache(0x00902000, SZ_4K*2);
|
||||
if (sc1_base_ptr) {
|
||||
writel(0, sc1_base_ptr + VDD_SC1_ARRAY_CLAMP_GFS_CTL);
|
||||
writel(0, sc1_base_ptr + SCSS_CPU1CORE_RESET);
|
||||
writel(3, sc1_base_ptr + SCSS_DBG_STATUS_CORE_PWRDUP);
|
||||
iounmap(sc1_base_ptr);
|
||||
}
|
||||
} else
|
||||
printk(KERN_DEBUG "Failed to set secondary core boot "
|
||||
"address\n");
|
||||
}
|
||||
|
||||
int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
|
||||
{
|
||||
unsigned long timeout;
|
||||
static int cold_boot_done;
|
||||
|
||||
/* Only need to bring cpu out of reset this way once */
|
||||
if (cold_boot_done == false) {
|
||||
prepare_cold_cpu(cpu);
|
||||
cold_boot_done = true;
|
||||
}
|
||||
|
||||
/*
|
||||
* set synchronisation state between this boot processor
|
||||
* and the secondary one
|
||||
*/
|
||||
spin_lock(&boot_lock);
|
||||
|
||||
/*
|
||||
* The secondary processor is waiting to be released from
|
||||
* the holding pen - release it, then wait for it to flag
|
||||
* that it has been released by resetting pen_release.
|
||||
*
|
||||
* Note that "pen_release" is the hardware CPU ID, whereas
|
||||
* "cpu" is Linux's internal ID.
|
||||
*/
|
||||
pen_release = cpu;
|
||||
__cpuc_flush_dcache_area((void *)&pen_release, sizeof(pen_release));
|
||||
outer_clean_range(__pa(&pen_release), __pa(&pen_release + 1));
|
||||
|
||||
/*
|
||||
* Send the secondary CPU a soft interrupt, thereby causing
|
||||
* the boot monitor to read the system wide flags register,
|
||||
* and branch to the address found there.
|
||||
*/
|
||||
smp_cross_call(cpumask_of(cpu), 1);
|
||||
|
||||
timeout = jiffies + (1 * HZ);
|
||||
while (time_before(jiffies, timeout)) {
|
||||
smp_rmb();
|
||||
if (pen_release == -1)
|
||||
break;
|
||||
|
||||
udelay(10);
|
||||
}
|
||||
|
||||
/*
|
||||
* now the secondary core is starting up let it run its
|
||||
* calibrations, then wait for it to finish
|
||||
*/
|
||||
spin_unlock(&boot_lock);
|
||||
|
||||
return pen_release != -1 ? -ENOSYS : 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Initialise the CPU possible map early - this describes the CPUs
|
||||
* which may be present or become present in the system. The msm8x60
|
||||
* does not support the ARM SCU, so just set the possible cpu mask to
|
||||
* NR_CPUS.
|
||||
*/
|
||||
void __init smp_init_cpus(void)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0; i < NR_CPUS; i++)
|
||||
set_cpu_possible(i, true);
|
||||
}
|
||||
|
||||
void __init platform_smp_prepare_cpus(unsigned int max_cpus)
|
||||
{
|
||||
int i;
|
||||
|
||||
/*
|
||||
* Initialise the present map, which describes the set of CPUs
|
||||
* actually populated at the present time.
|
||||
*/
|
||||
for (i = 0; i < max_cpus; i++)
|
||||
set_cpu_present(i, true);
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
/* Copyright (c) 2010, Code Aurora Forum. All rights reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 and
|
||||
* only version 2 as published by the Free Software Foundation.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/slab.h>
|
||||
|
||||
#include "scm.h"
|
||||
#include "scm-boot.h"
|
||||
|
||||
/*
|
||||
* Set the cold/warm boot address for one of the CPU cores.
|
||||
*/
|
||||
int scm_set_boot_addr(phys_addr_t addr, int flags)
|
||||
{
|
||||
struct {
|
||||
unsigned int flags;
|
||||
phys_addr_t addr;
|
||||
} cmd;
|
||||
|
||||
cmd.addr = addr;
|
||||
cmd.flags = flags;
|
||||
return scm_call(SCM_SVC_BOOT, SCM_BOOT_ADDR,
|
||||
&cmd, sizeof(cmd), NULL, 0);
|
||||
}
|
||||
EXPORT_SYMBOL(scm_set_boot_addr);
|
|
@ -0,0 +1,38 @@
|
|||
/* Copyright (c) 2010, Code Aurora Forum. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following
|
||||
* disclaimer in the documentation and/or other materials provided
|
||||
* with the distribution.
|
||||
* * Neither the name of Code Aurora Forum, Inc. nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
|
||||
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
||||
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
||||
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
|
||||
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
#ifndef __MACH_SCM_BOOT_H
|
||||
#define __MACH_SCM_BOOT_H
|
||||
|
||||
#define SCM_BOOT_ADDR 0x1
|
||||
#define SCM_FLAG_COLDBOOT_CPU1 0x1
|
||||
#define SCM_FLAG_WARMBOOT_CPU1 0x2
|
||||
#define SCM_FLAG_WARMBOOT_CPU0 0x4
|
||||
|
||||
int scm_set_boot_addr(phys_addr_t addr, int flags);
|
||||
|
||||
#endif
|
|
@ -0,0 +1,287 @@
|
|||
/* Copyright (c) 2010, Code Aurora Forum. All rights reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 and
|
||||
* only version 2 as published by the Free Software Foundation.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#include <linux/slab.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/err.h>
|
||||
|
||||
#include <asm/cacheflush.h>
|
||||
|
||||
#include "scm.h"
|
||||
|
||||
/* Cache line size for msm8x60 */
|
||||
#define CACHELINESIZE 32
|
||||
|
||||
#define SCM_ENOMEM -5
|
||||
#define SCM_EOPNOTSUPP -4
|
||||
#define SCM_EINVAL_ADDR -3
|
||||
#define SCM_EINVAL_ARG -2
|
||||
#define SCM_ERROR -1
|
||||
#define SCM_INTERRUPTED 1
|
||||
|
||||
static DEFINE_MUTEX(scm_lock);
|
||||
|
||||
/**
|
||||
* struct scm_command - one SCM command buffer
|
||||
* @len: total available memory for command and response
|
||||
* @buf_offset: start of command buffer
|
||||
* @resp_hdr_offset: start of response buffer
|
||||
* @id: command to be executed
|
||||
* @buf: buffer returned from scm_get_command_buffer()
|
||||
*
|
||||
* An SCM command is layed out in memory as follows:
|
||||
*
|
||||
* ------------------- <--- struct scm_command
|
||||
* | command header |
|
||||
* ------------------- <--- scm_get_command_buffer()
|
||||
* | command buffer |
|
||||
* ------------------- <--- struct scm_response and
|
||||
* | response header | scm_command_to_response()
|
||||
* ------------------- <--- scm_get_response_buffer()
|
||||
* | response buffer |
|
||||
* -------------------
|
||||
*
|
||||
* There can be arbitrary padding between the headers and buffers so
|
||||
* you should always use the appropriate scm_get_*_buffer() routines
|
||||
* to access the buffers in a safe manner.
|
||||
*/
|
||||
struct scm_command {
|
||||
u32 len;
|
||||
u32 buf_offset;
|
||||
u32 resp_hdr_offset;
|
||||
u32 id;
|
||||
u32 buf[0];
|
||||
};
|
||||
|
||||
/**
|
||||
* struct scm_response - one SCM response buffer
|
||||
* @len: total available memory for response
|
||||
* @buf_offset: start of response data relative to start of scm_response
|
||||
* @is_complete: indicates if the command has finished processing
|
||||
*/
|
||||
struct scm_response {
|
||||
u32 len;
|
||||
u32 buf_offset;
|
||||
u32 is_complete;
|
||||
};
|
||||
|
||||
/**
|
||||
* alloc_scm_command() - Allocate an SCM command
|
||||
* @cmd_size: size of the command buffer
|
||||
* @resp_size: size of the response buffer
|
||||
*
|
||||
* Allocate an SCM command, including enough room for the command
|
||||
* and response headers as well as the command and response buffers.
|
||||
*
|
||||
* Returns a valid &scm_command on success or %NULL if the allocation fails.
|
||||
*/
|
||||
static struct scm_command *alloc_scm_command(size_t cmd_size, size_t resp_size)
|
||||
{
|
||||
struct scm_command *cmd;
|
||||
size_t len = sizeof(*cmd) + sizeof(struct scm_response) + cmd_size +
|
||||
resp_size;
|
||||
|
||||
cmd = kzalloc(PAGE_ALIGN(len), GFP_KERNEL);
|
||||
if (cmd) {
|
||||
cmd->len = len;
|
||||
cmd->buf_offset = offsetof(struct scm_command, buf);
|
||||
cmd->resp_hdr_offset = cmd->buf_offset + cmd_size;
|
||||
}
|
||||
return cmd;
|
||||
}
|
||||
|
||||
/**
|
||||
* free_scm_command() - Free an SCM command
|
||||
* @cmd: command to free
|
||||
*
|
||||
* Free an SCM command.
|
||||
*/
|
||||
static inline void free_scm_command(struct scm_command *cmd)
|
||||
{
|
||||
kfree(cmd);
|
||||
}
|
||||
|
||||
/**
|
||||
* scm_command_to_response() - Get a pointer to a scm_response
|
||||
* @cmd: command
|
||||
*
|
||||
* Returns a pointer to a response for a command.
|
||||
*/
|
||||
static inline struct scm_response *scm_command_to_response(
|
||||
const struct scm_command *cmd)
|
||||
{
|
||||
return (void *)cmd + cmd->resp_hdr_offset;
|
||||
}
|
||||
|
||||
/**
|
||||
* scm_get_command_buffer() - Get a pointer to a command buffer
|
||||
* @cmd: command
|
||||
*
|
||||
* Returns a pointer to the command buffer of a command.
|
||||
*/
|
||||
static inline void *scm_get_command_buffer(const struct scm_command *cmd)
|
||||
{
|
||||
return (void *)cmd->buf;
|
||||
}
|
||||
|
||||
/**
|
||||
* scm_get_response_buffer() - Get a pointer to a response buffer
|
||||
* @rsp: response
|
||||
*
|
||||
* Returns a pointer to a response buffer of a response.
|
||||
*/
|
||||
static inline void *scm_get_response_buffer(const struct scm_response *rsp)
|
||||
{
|
||||
return (void *)rsp + rsp->buf_offset;
|
||||
}
|
||||
|
||||
static int scm_remap_error(int err)
|
||||
{
|
||||
switch (err) {
|
||||
case SCM_ERROR:
|
||||
return -EIO;
|
||||
case SCM_EINVAL_ADDR:
|
||||
case SCM_EINVAL_ARG:
|
||||
return -EINVAL;
|
||||
case SCM_EOPNOTSUPP:
|
||||
return -EOPNOTSUPP;
|
||||
case SCM_ENOMEM:
|
||||
return -ENOMEM;
|
||||
}
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static u32 smc(u32 cmd_addr)
|
||||
{
|
||||
int context_id;
|
||||
register u32 r0 asm("r0") = 1;
|
||||
register u32 r1 asm("r1") = (u32)&context_id;
|
||||
register u32 r2 asm("r2") = cmd_addr;
|
||||
asm(
|
||||
__asmeq("%0", "r0")
|
||||
__asmeq("%1", "r0")
|
||||
__asmeq("%2", "r1")
|
||||
__asmeq("%3", "r2")
|
||||
"smc #0 @ switch to secure world\n"
|
||||
: "=r" (r0)
|
||||
: "r" (r0), "r" (r1), "r" (r2)
|
||||
: "r3");
|
||||
return r0;
|
||||
}
|
||||
|
||||
static int __scm_call(const struct scm_command *cmd)
|
||||
{
|
||||
int ret;
|
||||
u32 cmd_addr = virt_to_phys(cmd);
|
||||
|
||||
/*
|
||||
* Flush the entire cache here so callers don't have to remember
|
||||
* to flush the cache when passing physical addresses to the secure
|
||||
* side in the buffer.
|
||||
*/
|
||||
flush_cache_all();
|
||||
do {
|
||||
ret = smc(cmd_addr);
|
||||
if (ret < 0) {
|
||||
ret = scm_remap_error(ret);
|
||||
break;
|
||||
}
|
||||
} while (ret == SCM_INTERRUPTED);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* scm_call() - Send an SCM command
|
||||
* @svc_id: service identifier
|
||||
* @cmd_id: command identifier
|
||||
* @cmd_buf: command buffer
|
||||
* @cmd_len: length of the command buffer
|
||||
* @resp_buf: response buffer
|
||||
* @resp_len: length of the response buffer
|
||||
*
|
||||
* Sends a command to the SCM and waits for the command to finish processing.
|
||||
*/
|
||||
int scm_call(u32 svc_id, u32 cmd_id, const void *cmd_buf, size_t cmd_len,
|
||||
void *resp_buf, size_t resp_len)
|
||||
{
|
||||
int ret;
|
||||
struct scm_command *cmd;
|
||||
struct scm_response *rsp;
|
||||
|
||||
cmd = alloc_scm_command(cmd_len, resp_len);
|
||||
if (!cmd)
|
||||
return -ENOMEM;
|
||||
|
||||
cmd->id = (svc_id << 10) | cmd_id;
|
||||
if (cmd_buf)
|
||||
memcpy(scm_get_command_buffer(cmd), cmd_buf, cmd_len);
|
||||
|
||||
mutex_lock(&scm_lock);
|
||||
ret = __scm_call(cmd);
|
||||
mutex_unlock(&scm_lock);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
rsp = scm_command_to_response(cmd);
|
||||
do {
|
||||
u32 start = (u32)rsp;
|
||||
u32 end = (u32)scm_get_response_buffer(rsp) + resp_len;
|
||||
start &= ~(CACHELINESIZE - 1);
|
||||
while (start < end) {
|
||||
asm ("mcr p15, 0, %0, c7, c6, 1" : : "r" (start)
|
||||
: "memory");
|
||||
start += CACHELINESIZE;
|
||||
}
|
||||
} while (!rsp->is_complete);
|
||||
|
||||
if (resp_buf)
|
||||
memcpy(resp_buf, scm_get_response_buffer(rsp), resp_len);
|
||||
out:
|
||||
free_scm_command(cmd);
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL(scm_call);
|
||||
|
||||
u32 scm_get_version(void)
|
||||
{
|
||||
int context_id;
|
||||
static u32 version = -1;
|
||||
register u32 r0 asm("r0") = 0x1 << 8;
|
||||
register u32 r1 asm("r1") = (u32)&context_id;
|
||||
|
||||
if (version != -1)
|
||||
return version;
|
||||
|
||||
mutex_lock(&scm_lock);
|
||||
asm(
|
||||
__asmeq("%0", "r1")
|
||||
__asmeq("%1", "r0")
|
||||
__asmeq("%2", "r1")
|
||||
"smc #0 @ switch to secure world\n"
|
||||
: "=r" (r1)
|
||||
: "r" (r0), "r" (r1)
|
||||
: "r2", "r3");
|
||||
version = r1;
|
||||
mutex_unlock(&scm_lock);
|
||||
|
||||
return version;
|
||||
}
|
||||
EXPORT_SYMBOL(scm_get_version);
|
|
@ -0,0 +1,41 @@
|
|||
/* Copyright (c) 2010, Code Aurora Forum. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following
|
||||
* disclaimer in the documentation and/or other materials provided
|
||||
* with the distribution.
|
||||
* * Neither the name of Code Aurora Forum, Inc. nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
|
||||
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
||||
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
||||
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
|
||||
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
#ifndef __MACH_SCM_H
|
||||
#define __MACH_SCM_H
|
||||
|
||||
#define SCM_SVC_BOOT 0x1
|
||||
#define SCM_SVC_PIL 0x2
|
||||
|
||||
extern int scm_call(u32 svc_id, u32 cmd_id, const void *cmd_buf, size_t cmd_len,
|
||||
void *resp_buf, size_t resp_len);
|
||||
|
||||
#define SCM_VERSION(major, minor) (((major) << 16) | ((minor) & 0xFF))
|
||||
|
||||
extern u32 scm_get_version(void);
|
||||
|
||||
#endif
|
|
@ -47,6 +47,19 @@ enum {
|
|||
|
||||
#define GPT_HZ 32768
|
||||
|
||||
enum timer_location {
|
||||
LOCAL_TIMER = 0,
|
||||
GLOBAL_TIMER = 1,
|
||||
};
|
||||
|
||||
#ifdef MSM_TMR0_BASE
|
||||
#define MSM_TMR_GLOBAL (MSM_TMR0_BASE - MSM_TMR_BASE)
|
||||
#else
|
||||
#define MSM_TMR_GLOBAL 0
|
||||
#endif
|
||||
|
||||
#define MSM_GLOBAL_TIMER MSM_CLOCK_DGT
|
||||
|
||||
#if defined(CONFIG_ARCH_QSD8X50)
|
||||
#define DGT_HZ (19200000 / 4) /* 19.2 MHz / 4 by default */
|
||||
#define MSM_DGT_SHIFT (0)
|
||||
|
@ -65,49 +78,67 @@ struct msm_clock {
|
|||
void __iomem *regbase;
|
||||
uint32_t freq;
|
||||
uint32_t shift;
|
||||
void __iomem *global_counter;
|
||||
void __iomem *local_counter;
|
||||
};
|
||||
|
||||
enum {
|
||||
MSM_CLOCK_GPT,
|
||||
MSM_CLOCK_DGT,
|
||||
NR_TIMERS,
|
||||
};
|
||||
|
||||
|
||||
static struct msm_clock msm_clocks[];
|
||||
static struct clock_event_device *local_clock_event;
|
||||
|
||||
static irqreturn_t msm_timer_interrupt(int irq, void *dev_id)
|
||||
{
|
||||
struct clock_event_device *evt = dev_id;
|
||||
if (smp_processor_id() != 0)
|
||||
evt = local_clock_event;
|
||||
if (evt->event_handler == NULL)
|
||||
return IRQ_HANDLED;
|
||||
evt->event_handler(evt);
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
static cycle_t msm_gpt_read(struct clocksource *cs)
|
||||
static cycle_t msm_read_timer_count(struct clocksource *cs)
|
||||
{
|
||||
return readl(MSM_GPT_BASE + TIMER_COUNT_VAL);
|
||||
struct msm_clock *clk = container_of(cs, struct msm_clock, clocksource);
|
||||
|
||||
return readl(clk->global_counter);
|
||||
}
|
||||
|
||||
static cycle_t msm_dgt_read(struct clocksource *cs)
|
||||
static struct msm_clock *clockevent_to_clock(struct clock_event_device *evt)
|
||||
{
|
||||
return readl(MSM_DGT_BASE + TIMER_COUNT_VAL) >> MSM_DGT_SHIFT;
|
||||
#ifdef CONFIG_SMP
|
||||
int i;
|
||||
for (i = 0; i < NR_TIMERS; i++)
|
||||
if (evt == &(msm_clocks[i].clockevent))
|
||||
return &msm_clocks[i];
|
||||
return &msm_clocks[MSM_GLOBAL_TIMER];
|
||||
#else
|
||||
return container_of(evt, struct msm_clock, clockevent);
|
||||
#endif
|
||||
}
|
||||
|
||||
static int msm_timer_set_next_event(unsigned long cycles,
|
||||
struct clock_event_device *evt)
|
||||
{
|
||||
struct msm_clock *clock = container_of(evt, struct msm_clock, clockevent);
|
||||
uint32_t now = readl(clock->regbase + TIMER_COUNT_VAL);
|
||||
struct msm_clock *clock = clockevent_to_clock(evt);
|
||||
uint32_t now = readl(clock->local_counter);
|
||||
uint32_t alarm = now + (cycles << clock->shift);
|
||||
int late;
|
||||
|
||||
writel(alarm, clock->regbase + TIMER_MATCH_VAL);
|
||||
now = readl(clock->regbase + TIMER_COUNT_VAL);
|
||||
late = now - alarm;
|
||||
if (late >= (-2 << clock->shift) && late < DGT_HZ*5) {
|
||||
printk(KERN_NOTICE "msm_timer_set_next_event(%lu) clock %s, "
|
||||
"alarm already expired, now %x, alarm %x, late %d\n",
|
||||
cycles, clock->clockevent.name, now, alarm, late);
|
||||
return -ETIME;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void msm_timer_set_mode(enum clock_event_mode mode,
|
||||
struct clock_event_device *evt)
|
||||
{
|
||||
struct msm_clock *clock = container_of(evt, struct msm_clock, clockevent);
|
||||
struct msm_clock *clock = clockevent_to_clock(evt);
|
||||
|
||||
switch (mode) {
|
||||
case CLOCK_EVT_MODE_RESUME:
|
||||
case CLOCK_EVT_MODE_PERIODIC:
|
||||
|
@ -123,7 +154,7 @@ static void msm_timer_set_mode(enum clock_event_mode mode,
|
|||
}
|
||||
|
||||
static struct msm_clock msm_clocks[] = {
|
||||
{
|
||||
[MSM_CLOCK_GPT] = {
|
||||
.clockevent = {
|
||||
.name = "gp_timer",
|
||||
.features = CLOCK_EVT_FEAT_ONESHOT,
|
||||
|
@ -135,7 +166,7 @@ static struct msm_clock msm_clocks[] = {
|
|||
.clocksource = {
|
||||
.name = "gp_timer",
|
||||
.rating = 200,
|
||||
.read = msm_gpt_read,
|
||||
.read = msm_read_timer_count,
|
||||
.mask = CLOCKSOURCE_MASK(32),
|
||||
.flags = CLOCK_SOURCE_IS_CONTINUOUS,
|
||||
},
|
||||
|
@ -147,9 +178,12 @@ static struct msm_clock msm_clocks[] = {
|
|||
.irq = INT_GP_TIMER_EXP
|
||||
},
|
||||
.regbase = MSM_GPT_BASE,
|
||||
.freq = GPT_HZ
|
||||
.freq = GPT_HZ,
|
||||
.local_counter = MSM_GPT_BASE + TIMER_COUNT_VAL,
|
||||
.global_counter = MSM_GPT_BASE + TIMER_COUNT_VAL +
|
||||
MSM_TMR_GLOBAL,
|
||||
},
|
||||
{
|
||||
[MSM_CLOCK_DGT] = {
|
||||
.clockevent = {
|
||||
.name = "dg_timer",
|
||||
.features = CLOCK_EVT_FEAT_ONESHOT,
|
||||
|
@ -161,7 +195,7 @@ static struct msm_clock msm_clocks[] = {
|
|||
.clocksource = {
|
||||
.name = "dg_timer",
|
||||
.rating = 300,
|
||||
.read = msm_dgt_read,
|
||||
.read = msm_read_timer_count,
|
||||
.mask = CLOCKSOURCE_MASK((32 - MSM_DGT_SHIFT)),
|
||||
.flags = CLOCK_SOURCE_IS_CONTINUOUS,
|
||||
},
|
||||
|
@ -174,7 +208,10 @@ static struct msm_clock msm_clocks[] = {
|
|||
},
|
||||
.regbase = MSM_DGT_BASE,
|
||||
.freq = DGT_HZ >> MSM_DGT_SHIFT,
|
||||
.shift = MSM_DGT_SHIFT
|
||||
.shift = MSM_DGT_SHIFT,
|
||||
.local_counter = MSM_DGT_BASE + TIMER_COUNT_VAL,
|
||||
.global_counter = MSM_DGT_BASE + TIMER_COUNT_VAL +
|
||||
MSM_TMR_GLOBAL,
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -183,7 +220,7 @@ static void __init msm_timer_init(void)
|
|||
int i;
|
||||
int res;
|
||||
|
||||
#ifdef CONFIG_ARCH_MSM8X60
|
||||
#ifdef CONFIG_ARCH_MSM_SCORPIONMP
|
||||
writel(DGT_CLK_CTL_DIV_4, MSM_TMR_BASE + DGT_CLK_CTL);
|
||||
#endif
|
||||
|
||||
|
@ -217,6 +254,48 @@ static void __init msm_timer_init(void)
|
|||
}
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
void __cpuinit local_timer_setup(struct clock_event_device *evt)
|
||||
{
|
||||
struct msm_clock *clock = &msm_clocks[MSM_GLOBAL_TIMER];
|
||||
|
||||
/* Use existing clock_event for cpu 0 */
|
||||
if (!smp_processor_id())
|
||||
return;
|
||||
|
||||
writel(DGT_CLK_CTL_DIV_4, MSM_TMR_BASE + DGT_CLK_CTL);
|
||||
|
||||
if (!local_clock_event) {
|
||||
writel(0, clock->regbase + TIMER_ENABLE);
|
||||
writel(0, clock->regbase + TIMER_CLEAR);
|
||||
writel(~0, clock->regbase + TIMER_MATCH_VAL);
|
||||
}
|
||||
evt->irq = clock->irq.irq;
|
||||
evt->name = "local_timer";
|
||||
evt->features = CLOCK_EVT_FEAT_ONESHOT;
|
||||
evt->rating = clock->clockevent.rating;
|
||||
evt->set_mode = msm_timer_set_mode;
|
||||
evt->set_next_event = msm_timer_set_next_event;
|
||||
evt->shift = clock->clockevent.shift;
|
||||
evt->mult = div_sc(clock->freq, NSEC_PER_SEC, evt->shift);
|
||||
evt->max_delta_ns =
|
||||
clockevent_delta2ns(0xf0000000 >> clock->shift, evt);
|
||||
evt->min_delta_ns = clockevent_delta2ns(4, evt);
|
||||
|
||||
local_clock_event = evt;
|
||||
|
||||
gic_enable_ppi(clock->irq.irq);
|
||||
|
||||
clockevents_register_device(evt);
|
||||
}
|
||||
|
||||
inline int local_timer_ack(void)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
struct sys_timer msm_timer = {
|
||||
.init = msm_timer_init
|
||||
};
|
||||
|
|
|
@ -152,20 +152,11 @@ config MACH_NOKIA770
|
|||
config MACH_AMS_DELTA
|
||||
bool "Amstrad E3 (Delta)"
|
||||
depends on ARCH_OMAP1 && ARCH_OMAP15XX
|
||||
select FIQ
|
||||
help
|
||||
Support for the Amstrad E3 (codename Delta) videophone. Say Y here
|
||||
if you have such a device.
|
||||
|
||||
config AMS_DELTA_FIQ
|
||||
bool "Fast Interrupt Request (FIQ) support for the E3"
|
||||
depends on MACH_AMS_DELTA
|
||||
select FIQ
|
||||
help
|
||||
Provide a FIQ handler for the E3.
|
||||
This allows for fast handling of interrupts generated
|
||||
by the clock line of the E3 mailboard (or a PS/2 keyboard)
|
||||
connected to the GPIO based external keyboard port.
|
||||
|
||||
config MACH_OMAP_GENERIC
|
||||
bool "Generic OMAP board"
|
||||
depends on ARCH_OMAP1 && (ARCH_OMAP15XX || ARCH_OMAP16XX)
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
#
|
||||
|
||||
# Common support
|
||||
obj-y := io.o id.o sram.o irq.o mux.o flash.o serial.o devices.o
|
||||
obj-y := io.o id.o sram.o irq.o mux.o flash.o serial.o devices.o dma.o
|
||||
obj-y += clock.o clock_data.o opp_data.o
|
||||
|
||||
obj-$(CONFIG_OMAP_MCBSP) += mcbsp.o
|
||||
|
@ -39,8 +39,8 @@ obj-$(CONFIG_MACH_OMAP_PALMTE) += board-palmte.o
|
|||
obj-$(CONFIG_MACH_OMAP_PALMZ71) += board-palmz71.o
|
||||
obj-$(CONFIG_MACH_OMAP_PALMTT) += board-palmtt.o
|
||||
obj-$(CONFIG_MACH_NOKIA770) += board-nokia770.o
|
||||
obj-$(CONFIG_MACH_AMS_DELTA) += board-ams-delta.o
|
||||
obj-$(CONFIG_AMS_DELTA_FIQ) += ams-delta-fiq.o ams-delta-fiq-handler.o
|
||||
obj-$(CONFIG_MACH_AMS_DELTA) += board-ams-delta.o ams-delta-fiq.o \
|
||||
ams-delta-fiq-handler.o
|
||||
obj-$(CONFIG_MACH_SX1) += board-sx1.o board-sx1-mmc.o
|
||||
obj-$(CONFIG_MACH_HERALD) += board-htcherald.o
|
||||
|
||||
|
@ -49,6 +49,12 @@ ifeq ($(CONFIG_ARCH_OMAP15XX),y)
|
|||
obj-$(CONFIG_MACH_OMAP_INNOVATOR) += fpga.o
|
||||
endif
|
||||
|
||||
# GPIO
|
||||
obj-$(CONFIG_ARCH_OMAP730) += gpio7xx.o
|
||||
obj-$(CONFIG_ARCH_OMAP850) += gpio7xx.o
|
||||
obj-$(CONFIG_ARCH_OMAP15XX) += gpio15xx.o
|
||||
obj-$(CONFIG_ARCH_OMAP16XX) += gpio16xx.o
|
||||
|
||||
# LEDs support
|
||||
led-$(CONFIG_MACH_OMAP_H2) += leds-h2p2-debug.o
|
||||
led-$(CONFIG_MACH_OMAP_H3) += leds-h2p2-debug.o
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/map.h>
|
||||
|
||||
#include <plat/io.h>
|
||||
#include <plat/board-ams-delta.h>
|
||||
#include <mach/gpio.h>
|
||||
#include <plat/keypad.h>
|
||||
|
@ -42,84 +43,82 @@
|
|||
static u8 ams_delta_latch1_reg;
|
||||
static u16 ams_delta_latch2_reg;
|
||||
|
||||
static int ams_delta_keymap[] = {
|
||||
static const unsigned int ams_delta_keymap[] = {
|
||||
KEY(0, 0, KEY_F1), /* Advert */
|
||||
|
||||
KEY(3, 0, KEY_COFFEE), /* Games */
|
||||
KEY(2, 0, KEY_QUESTION), /* Directory */
|
||||
KEY(3, 2, KEY_CONNECT), /* Internet */
|
||||
KEY(2, 1, KEY_SHOP), /* Services */
|
||||
KEY(0, 3, KEY_COFFEE), /* Games */
|
||||
KEY(0, 2, KEY_QUESTION), /* Directory */
|
||||
KEY(2, 3, KEY_CONNECT), /* Internet */
|
||||
KEY(1, 2, KEY_SHOP), /* Services */
|
||||
KEY(1, 1, KEY_PHONE), /* VoiceMail */
|
||||
|
||||
KEY(1, 0, KEY_DELETE), /* Delete */
|
||||
KEY(0, 1, KEY_DELETE), /* Delete */
|
||||
KEY(2, 2, KEY_PLAY), /* Play */
|
||||
KEY(0, 1, KEY_PAGEUP), /* Up */
|
||||
KEY(3, 1, KEY_PAGEDOWN), /* Down */
|
||||
KEY(0, 2, KEY_EMAIL), /* ReadEmail */
|
||||
KEY(1, 2, KEY_STOP), /* Stop */
|
||||
KEY(1, 0, KEY_PAGEUP), /* Up */
|
||||
KEY(1, 3, KEY_PAGEDOWN), /* Down */
|
||||
KEY(2, 0, KEY_EMAIL), /* ReadEmail */
|
||||
KEY(2, 1, KEY_STOP), /* Stop */
|
||||
|
||||
/* Numeric keypad portion */
|
||||
KEY(7, 0, KEY_KP1),
|
||||
KEY(6, 0, KEY_KP2),
|
||||
KEY(5, 0, KEY_KP3),
|
||||
KEY(7, 1, KEY_KP4),
|
||||
KEY(6, 1, KEY_KP5),
|
||||
KEY(5, 1, KEY_KP6),
|
||||
KEY(7, 2, KEY_KP7),
|
||||
KEY(6, 2, KEY_KP8),
|
||||
KEY(5, 2, KEY_KP9),
|
||||
KEY(6, 3, KEY_KP0),
|
||||
KEY(7, 3, KEY_KPASTERISK),
|
||||
KEY(5, 3, KEY_KPDOT), /* # key */
|
||||
KEY(2, 7, KEY_NUMLOCK), /* Mute */
|
||||
KEY(1, 7, KEY_KPMINUS), /* Recall */
|
||||
KEY(1, 6, KEY_KPPLUS), /* Redial */
|
||||
KEY(6, 7, KEY_KPSLASH), /* Handsfree */
|
||||
KEY(0, 6, KEY_ENTER), /* Video */
|
||||
KEY(0, 7, KEY_KP1),
|
||||
KEY(0, 6, KEY_KP2),
|
||||
KEY(0, 5, KEY_KP3),
|
||||
KEY(1, 7, KEY_KP4),
|
||||
KEY(1, 6, KEY_KP5),
|
||||
KEY(1, 5, KEY_KP6),
|
||||
KEY(2, 7, KEY_KP7),
|
||||
KEY(2, 6, KEY_KP8),
|
||||
KEY(2, 5, KEY_KP9),
|
||||
KEY(3, 6, KEY_KP0),
|
||||
KEY(3, 7, KEY_KPASTERISK),
|
||||
KEY(3, 5, KEY_KPDOT), /* # key */
|
||||
KEY(7, 2, KEY_NUMLOCK), /* Mute */
|
||||
KEY(7, 1, KEY_KPMINUS), /* Recall */
|
||||
KEY(6, 1, KEY_KPPLUS), /* Redial */
|
||||
KEY(7, 6, KEY_KPSLASH), /* Handsfree */
|
||||
KEY(6, 0, KEY_ENTER), /* Video */
|
||||
|
||||
KEY(4, 7, KEY_CAMERA), /* Photo */
|
||||
KEY(7, 4, KEY_CAMERA), /* Photo */
|
||||
|
||||
KEY(4, 0, KEY_F2), /* Home */
|
||||
KEY(4, 1, KEY_F3), /* Office */
|
||||
KEY(4, 2, KEY_F4), /* Mobile */
|
||||
KEY(0, 4, KEY_F2), /* Home */
|
||||
KEY(1, 4, KEY_F3), /* Office */
|
||||
KEY(2, 4, KEY_F4), /* Mobile */
|
||||
KEY(7, 7, KEY_F5), /* SMS */
|
||||
KEY(5, 7, KEY_F6), /* Email */
|
||||
KEY(7, 5, KEY_F6), /* Email */
|
||||
|
||||
/* QWERTY portion of keypad */
|
||||
KEY(4, 3, KEY_Q),
|
||||
KEY(3, 4, KEY_Q),
|
||||
KEY(3, 3, KEY_W),
|
||||
KEY(2, 3, KEY_E),
|
||||
KEY(1, 3, KEY_R),
|
||||
KEY(0, 3, KEY_T),
|
||||
KEY(7, 4, KEY_Y),
|
||||
KEY(6, 4, KEY_U),
|
||||
KEY(5, 4, KEY_I),
|
||||
KEY(3, 2, KEY_E),
|
||||
KEY(3, 1, KEY_R),
|
||||
KEY(3, 0, KEY_T),
|
||||
KEY(4, 7, KEY_Y),
|
||||
KEY(4, 6, KEY_U),
|
||||
KEY(4, 5, KEY_I),
|
||||
KEY(4, 4, KEY_O),
|
||||
KEY(3, 4, KEY_P),
|
||||
KEY(4, 3, KEY_P),
|
||||
|
||||
KEY(2, 4, KEY_A),
|
||||
KEY(1, 4, KEY_S),
|
||||
KEY(0, 4, KEY_D),
|
||||
KEY(7, 5, KEY_F),
|
||||
KEY(6, 5, KEY_G),
|
||||
KEY(4, 2, KEY_A),
|
||||
KEY(4, 1, KEY_S),
|
||||
KEY(4, 0, KEY_D),
|
||||
KEY(5, 7, KEY_F),
|
||||
KEY(5, 6, KEY_G),
|
||||
KEY(5, 5, KEY_H),
|
||||
KEY(4, 5, KEY_J),
|
||||
KEY(3, 5, KEY_K),
|
||||
KEY(2, 5, KEY_L),
|
||||
KEY(5, 4, KEY_J),
|
||||
KEY(5, 3, KEY_K),
|
||||
KEY(5, 2, KEY_L),
|
||||
|
||||
KEY(1, 5, KEY_Z),
|
||||
KEY(0, 5, KEY_X),
|
||||
KEY(7, 6, KEY_C),
|
||||
KEY(5, 1, KEY_Z),
|
||||
KEY(5, 0, KEY_X),
|
||||
KEY(6, 7, KEY_C),
|
||||
KEY(6, 6, KEY_V),
|
||||
KEY(5, 6, KEY_B),
|
||||
KEY(4, 6, KEY_N),
|
||||
KEY(3, 6, KEY_M),
|
||||
KEY(2, 6, KEY_SPACE),
|
||||
KEY(6, 5, KEY_B),
|
||||
KEY(6, 4, KEY_N),
|
||||
KEY(6, 3, KEY_M),
|
||||
KEY(6, 2, KEY_SPACE),
|
||||
|
||||
KEY(0, 7, KEY_LEFTSHIFT), /* Vol up */
|
||||
KEY(3, 7, KEY_LEFTCTRL), /* Vol down */
|
||||
|
||||
0
|
||||
KEY(7, 0, KEY_LEFTSHIFT), /* Vol up */
|
||||
KEY(7, 3, KEY_LEFTCTRL), /* Vol down */
|
||||
};
|
||||
|
||||
void ams_delta_latch1_write(u8 mask, u8 value)
|
||||
|
@ -140,7 +139,6 @@ static void __init ams_delta_init_irq(void)
|
|||
{
|
||||
omap1_init_common_hw();
|
||||
omap_init_irq();
|
||||
omap_gpio_init();
|
||||
}
|
||||
|
||||
static struct map_desc ams_delta_io_desc[] __initdata = {
|
||||
|
@ -189,11 +187,15 @@ static struct resource ams_delta_kp_resources[] = {
|
|||
},
|
||||
};
|
||||
|
||||
static const struct matrix_keymap_data ams_delta_keymap_data = {
|
||||
.keymap = ams_delta_keymap,
|
||||
.keymap_size = ARRAY_SIZE(ams_delta_keymap),
|
||||
};
|
||||
|
||||
static struct omap_kp_platform_data ams_delta_kp_data = {
|
||||
.rows = 8,
|
||||
.cols = 8,
|
||||
.keymap = ams_delta_keymap,
|
||||
.keymapsize = ARRAY_SIZE(ams_delta_keymap),
|
||||
.keymap_data = &ams_delta_keymap_data,
|
||||
.delay = 9,
|
||||
};
|
||||
|
||||
|
@ -307,16 +309,14 @@ static void __init ams_delta_init(void)
|
|||
#endif
|
||||
platform_add_devices(ams_delta_devices, ARRAY_SIZE(ams_delta_devices));
|
||||
|
||||
#ifdef CONFIG_AMS_DELTA_FIQ
|
||||
ams_delta_init_fiq();
|
||||
#endif
|
||||
|
||||
omap_writew(omap_readw(ARM_RSTCT1) | 0x0004, ARM_RSTCT1);
|
||||
}
|
||||
|
||||
static struct plat_serial8250_port ams_delta_modem_ports[] = {
|
||||
{
|
||||
.membase = (void *) AMS_DELTA_MODEM_VIRT,
|
||||
.membase = IOMEM(AMS_DELTA_MODEM_VIRT),
|
||||
.mapbase = AMS_DELTA_MODEM_PHYS,
|
||||
.irq = -EINVAL, /* changed later */
|
||||
.flags = UPF_BOOT_AUTOCONF,
|
||||
|
@ -340,6 +340,9 @@ static int __init ams_delta_modem_init(void)
|
|||
{
|
||||
int err;
|
||||
|
||||
if (!machine_is_ams_delta())
|
||||
return -ENODEV;
|
||||
|
||||
omap_cfg_reg(M14_1510_GPIO2);
|
||||
ams_delta_modem_ports[0].irq =
|
||||
gpio_to_irq(AMS_DELTA_GPIO_PIN_MODEM_IRQ);
|
||||
|
|
|
@ -69,36 +69,35 @@
|
|||
#define fsample_cpld_clear(bit) \
|
||||
fsample_cpld_write(0xf0 | ((bit) & 15), FSAMPLE_CPLD_SET_CLR)
|
||||
|
||||
static int fsample_keymap[] = {
|
||||
KEY(0,0,KEY_UP),
|
||||
KEY(0,1,KEY_RIGHT),
|
||||
KEY(0,2,KEY_LEFT),
|
||||
KEY(0,3,KEY_DOWN),
|
||||
KEY(0,4,KEY_ENTER),
|
||||
KEY(1,0,KEY_F10),
|
||||
KEY(1,1,KEY_SEND),
|
||||
KEY(1,2,KEY_END),
|
||||
KEY(1,3,KEY_VOLUMEDOWN),
|
||||
KEY(1,4,KEY_VOLUMEUP),
|
||||
KEY(1,5,KEY_RECORD),
|
||||
KEY(2,0,KEY_F9),
|
||||
KEY(2,1,KEY_3),
|
||||
KEY(2,2,KEY_6),
|
||||
KEY(2,3,KEY_9),
|
||||
KEY(2,4,KEY_KPDOT),
|
||||
KEY(3,0,KEY_BACK),
|
||||
KEY(3,1,KEY_2),
|
||||
KEY(3,2,KEY_5),
|
||||
KEY(3,3,KEY_8),
|
||||
KEY(3,4,KEY_0),
|
||||
KEY(3,5,KEY_KPSLASH),
|
||||
KEY(4,0,KEY_HOME),
|
||||
KEY(4,1,KEY_1),
|
||||
KEY(4,2,KEY_4),
|
||||
KEY(4,3,KEY_7),
|
||||
KEY(4,4,KEY_KPASTERISK),
|
||||
KEY(4,5,KEY_POWER),
|
||||
0
|
||||
static const unsigned int fsample_keymap[] = {
|
||||
KEY(0, 0, KEY_UP),
|
||||
KEY(1, 0, KEY_RIGHT),
|
||||
KEY(2, 0, KEY_LEFT),
|
||||
KEY(3, 0, KEY_DOWN),
|
||||
KEY(4, 0, KEY_ENTER),
|
||||
KEY(0, 1, KEY_F10),
|
||||
KEY(1, 1, KEY_SEND),
|
||||
KEY(2, 1, KEY_END),
|
||||
KEY(3, 1, KEY_VOLUMEDOWN),
|
||||
KEY(4, 1, KEY_VOLUMEUP),
|
||||
KEY(5, 1, KEY_RECORD),
|
||||
KEY(0, 2, KEY_F9),
|
||||
KEY(1, 2, KEY_3),
|
||||
KEY(2, 2, KEY_6),
|
||||
KEY(3, 2, KEY_9),
|
||||
KEY(4, 2, KEY_KPDOT),
|
||||
KEY(0, 3, KEY_BACK),
|
||||
KEY(1, 3, KEY_2),
|
||||
KEY(2, 3, KEY_5),
|
||||
KEY(3, 3, KEY_8),
|
||||
KEY(4, 3, KEY_0),
|
||||
KEY(5, 3, KEY_KPSLASH),
|
||||
KEY(0, 4, KEY_HOME),
|
||||
KEY(1, 4, KEY_1),
|
||||
KEY(2, 4, KEY_4),
|
||||
KEY(3, 4, KEY_7),
|
||||
KEY(4, 4, KEY_KPASTERISK),
|
||||
KEY(5, 4, KEY_POWER),
|
||||
};
|
||||
|
||||
static struct smc91x_platdata smc91x_info = {
|
||||
|
@ -120,6 +119,15 @@ static struct resource smc91x_resources[] = {
|
|||
},
|
||||
};
|
||||
|
||||
static void __init fsample_init_smc91x(void)
|
||||
{
|
||||
fpga_write(1, H2P2_DBG_FPGA_LAN_RESET);
|
||||
mdelay(50);
|
||||
fpga_write(fpga_read(H2P2_DBG_FPGA_LAN_RESET) & ~1,
|
||||
H2P2_DBG_FPGA_LAN_RESET);
|
||||
mdelay(50);
|
||||
}
|
||||
|
||||
static struct mtd_partition nor_partitions[] = {
|
||||
/* bootloader (U-Boot, etc) in first sector */
|
||||
{
|
||||
|
@ -244,11 +252,15 @@ static struct resource kp_resources[] = {
|
|||
},
|
||||
};
|
||||
|
||||
static const struct matrix_keymap_data fsample_keymap_data = {
|
||||
.keymap = fsample_keymap,
|
||||
.keymap_size = ARRAY_SIZE(fsample_keymap),
|
||||
};
|
||||
|
||||
static struct omap_kp_platform_data kp_data = {
|
||||
.rows = 8,
|
||||
.cols = 8,
|
||||
.keymap = fsample_keymap,
|
||||
.keymapsize = ARRAY_SIZE(fsample_keymap),
|
||||
.keymap_data = &fsample_keymap_data,
|
||||
.delay = 4,
|
||||
};
|
||||
|
||||
|
@ -285,6 +297,8 @@ static struct omap_board_config_kernel fsample_config[] = {
|
|||
|
||||
static void __init omap_fsample_init(void)
|
||||
{
|
||||
fsample_init_smc91x();
|
||||
|
||||
if (gpio_request(FSAMPLE_NAND_RB_GPIO_PIN, "NAND ready") < 0)
|
||||
BUG();
|
||||
gpio_direction_input(FSAMPLE_NAND_RB_GPIO_PIN);
|
||||
|
@ -312,21 +326,10 @@ static void __init omap_fsample_init(void)
|
|||
omap_register_i2c_bus(1, 100, NULL, 0);
|
||||
}
|
||||
|
||||
static void __init fsample_init_smc91x(void)
|
||||
{
|
||||
fpga_write(1, H2P2_DBG_FPGA_LAN_RESET);
|
||||
mdelay(50);
|
||||
fpga_write(fpga_read(H2P2_DBG_FPGA_LAN_RESET) & ~1,
|
||||
H2P2_DBG_FPGA_LAN_RESET);
|
||||
mdelay(50);
|
||||
}
|
||||
|
||||
static void __init omap_fsample_init_irq(void)
|
||||
{
|
||||
omap1_init_common_hw();
|
||||
omap_init_irq();
|
||||
omap_gpio_init();
|
||||
fsample_init_smc91x();
|
||||
}
|
||||
|
||||
/* Only FPGA needs to be mapped here. All others are done with ioremap */
|
||||
|
|
|
@ -52,43 +52,42 @@
|
|||
/* At OMAP1610 Innovator the Ethernet is directly connected to CS1 */
|
||||
#define OMAP1610_ETHR_START 0x04000300
|
||||
|
||||
static int h2_keymap[] = {
|
||||
static const unsigned int h2_keymap[] = {
|
||||
KEY(0, 0, KEY_LEFT),
|
||||
KEY(0, 1, KEY_RIGHT),
|
||||
KEY(0, 2, KEY_3),
|
||||
KEY(0, 3, KEY_F10),
|
||||
KEY(0, 4, KEY_F5),
|
||||
KEY(0, 5, KEY_9),
|
||||
KEY(1, 0, KEY_DOWN),
|
||||
KEY(1, 0, KEY_RIGHT),
|
||||
KEY(2, 0, KEY_3),
|
||||
KEY(3, 0, KEY_F10),
|
||||
KEY(4, 0, KEY_F5),
|
||||
KEY(5, 0, KEY_9),
|
||||
KEY(0, 1, KEY_DOWN),
|
||||
KEY(1, 1, KEY_UP),
|
||||
KEY(1, 2, KEY_2),
|
||||
KEY(1, 3, KEY_F9),
|
||||
KEY(1, 4, KEY_F7),
|
||||
KEY(1, 5, KEY_0),
|
||||
KEY(2, 0, KEY_ENTER),
|
||||
KEY(2, 1, KEY_6),
|
||||
KEY(2, 1, KEY_2),
|
||||
KEY(3, 1, KEY_F9),
|
||||
KEY(4, 1, KEY_F7),
|
||||
KEY(5, 1, KEY_0),
|
||||
KEY(0, 2, KEY_ENTER),
|
||||
KEY(1, 2, KEY_6),
|
||||
KEY(2, 2, KEY_1),
|
||||
KEY(2, 3, KEY_F2),
|
||||
KEY(2, 4, KEY_F6),
|
||||
KEY(2, 5, KEY_HOME),
|
||||
KEY(3, 0, KEY_8),
|
||||
KEY(3, 1, KEY_5),
|
||||
KEY(3, 2, KEY_F12),
|
||||
KEY(3, 2, KEY_F2),
|
||||
KEY(4, 2, KEY_F6),
|
||||
KEY(5, 2, KEY_HOME),
|
||||
KEY(0, 3, KEY_8),
|
||||
KEY(1, 3, KEY_5),
|
||||
KEY(2, 3, KEY_F12),
|
||||
KEY(3, 3, KEY_F3),
|
||||
KEY(3, 4, KEY_F8),
|
||||
KEY(3, 5, KEY_END),
|
||||
KEY(4, 0, KEY_7),
|
||||
KEY(4, 1, KEY_4),
|
||||
KEY(4, 2, KEY_F11),
|
||||
KEY(4, 3, KEY_F1),
|
||||
KEY(4, 3, KEY_F8),
|
||||
KEY(5, 3, KEY_END),
|
||||
KEY(0, 4, KEY_7),
|
||||
KEY(1, 4, KEY_4),
|
||||
KEY(2, 4, KEY_F11),
|
||||
KEY(3, 4, KEY_F1),
|
||||
KEY(4, 4, KEY_F4),
|
||||
KEY(4, 5, KEY_ESC),
|
||||
KEY(5, 0, KEY_F13),
|
||||
KEY(5, 1, KEY_F14),
|
||||
KEY(5, 2, KEY_F15),
|
||||
KEY(5, 3, KEY_F16),
|
||||
KEY(5, 4, KEY_SLEEP),
|
||||
0
|
||||
KEY(5, 4, KEY_ESC),
|
||||
KEY(0, 5, KEY_F13),
|
||||
KEY(1, 5, KEY_F14),
|
||||
KEY(2, 5, KEY_F15),
|
||||
KEY(3, 5, KEY_F16),
|
||||
KEY(4, 5, KEY_SLEEP),
|
||||
};
|
||||
|
||||
static struct mtd_partition h2_nor_partitions[] = {
|
||||
|
@ -270,14 +269,18 @@ static struct resource h2_kp_resources[] = {
|
|||
},
|
||||
};
|
||||
|
||||
static const struct matrix_keymap_data h2_keymap_data = {
|
||||
.keymap = h2_keymap,
|
||||
.keymap_size = ARRAY_SIZE(h2_keymap),
|
||||
};
|
||||
|
||||
static struct omap_kp_platform_data h2_kp_data = {
|
||||
.rows = 8,
|
||||
.cols = 8,
|
||||
.keymap = h2_keymap,
|
||||
.keymapsize = ARRAY_SIZE(h2_keymap),
|
||||
.rep = 1,
|
||||
.keymap_data = &h2_keymap_data,
|
||||
.rep = true,
|
||||
.delay = 9,
|
||||
.dbounce = 1,
|
||||
.dbounce = true,
|
||||
};
|
||||
|
||||
static struct platform_device h2_kp_device = {
|
||||
|
@ -374,8 +377,6 @@ static void __init h2_init_irq(void)
|
|||
{
|
||||
omap1_init_common_hw();
|
||||
omap_init_irq();
|
||||
omap_gpio_init();
|
||||
h2_init_smc91x();
|
||||
}
|
||||
|
||||
static struct omap_usb_config h2_usb_config __initdata = {
|
||||
|
@ -403,6 +404,8 @@ static struct omap_board_config_kernel h2_config[] __initdata = {
|
|||
|
||||
static void __init h2_init(void)
|
||||
{
|
||||
h2_init_smc91x();
|
||||
|
||||
/* Here we assume the NOR boot config: NOR on CS3 (possibly swapped
|
||||
* to address 0 by a dip switch), NAND on CS2B. The NAND driver will
|
||||
* notice whether a NAND chip is enabled at probe time.
|
||||
|
|
|
@ -56,43 +56,42 @@
|
|||
|
||||
#define H3_TS_GPIO 48
|
||||
|
||||
static int h3_keymap[] = {
|
||||
static const unsigned int h3_keymap[] = {
|
||||
KEY(0, 0, KEY_LEFT),
|
||||
KEY(0, 1, KEY_RIGHT),
|
||||
KEY(0, 2, KEY_3),
|
||||
KEY(0, 3, KEY_F10),
|
||||
KEY(0, 4, KEY_F5),
|
||||
KEY(0, 5, KEY_9),
|
||||
KEY(1, 0, KEY_DOWN),
|
||||
KEY(1, 0, KEY_RIGHT),
|
||||
KEY(2, 0, KEY_3),
|
||||
KEY(3, 0, KEY_F10),
|
||||
KEY(4, 0, KEY_F5),
|
||||
KEY(5, 0, KEY_9),
|
||||
KEY(0, 1, KEY_DOWN),
|
||||
KEY(1, 1, KEY_UP),
|
||||
KEY(1, 2, KEY_2),
|
||||
KEY(1, 3, KEY_F9),
|
||||
KEY(1, 4, KEY_F7),
|
||||
KEY(1, 5, KEY_0),
|
||||
KEY(2, 0, KEY_ENTER),
|
||||
KEY(2, 1, KEY_6),
|
||||
KEY(2, 1, KEY_2),
|
||||
KEY(3, 1, KEY_F9),
|
||||
KEY(4, 1, KEY_F7),
|
||||
KEY(5, 1, KEY_0),
|
||||
KEY(0, 2, KEY_ENTER),
|
||||
KEY(1, 2, KEY_6),
|
||||
KEY(2, 2, KEY_1),
|
||||
KEY(2, 3, KEY_F2),
|
||||
KEY(2, 4, KEY_F6),
|
||||
KEY(2, 5, KEY_HOME),
|
||||
KEY(3, 0, KEY_8),
|
||||
KEY(3, 1, KEY_5),
|
||||
KEY(3, 2, KEY_F12),
|
||||
KEY(3, 2, KEY_F2),
|
||||
KEY(4, 2, KEY_F6),
|
||||
KEY(5, 2, KEY_HOME),
|
||||
KEY(0, 3, KEY_8),
|
||||
KEY(1, 3, KEY_5),
|
||||
KEY(2, 3, KEY_F12),
|
||||
KEY(3, 3, KEY_F3),
|
||||
KEY(3, 4, KEY_F8),
|
||||
KEY(3, 5, KEY_END),
|
||||
KEY(4, 0, KEY_7),
|
||||
KEY(4, 1, KEY_4),
|
||||
KEY(4, 2, KEY_F11),
|
||||
KEY(4, 3, KEY_F1),
|
||||
KEY(4, 3, KEY_F8),
|
||||
KEY(5, 3, KEY_END),
|
||||
KEY(0, 4, KEY_7),
|
||||
KEY(1, 4, KEY_4),
|
||||
KEY(2, 4, KEY_F11),
|
||||
KEY(3, 4, KEY_F1),
|
||||
KEY(4, 4, KEY_F4),
|
||||
KEY(4, 5, KEY_ESC),
|
||||
KEY(5, 0, KEY_F13),
|
||||
KEY(5, 1, KEY_F14),
|
||||
KEY(5, 2, KEY_F15),
|
||||
KEY(5, 3, KEY_F16),
|
||||
KEY(5, 4, KEY_SLEEP),
|
||||
0
|
||||
KEY(5, 4, KEY_ESC),
|
||||
KEY(0, 5, KEY_F13),
|
||||
KEY(1, 5, KEY_F14),
|
||||
KEY(2, 5, KEY_F15),
|
||||
KEY(3, 5, KEY_F16),
|
||||
KEY(4, 5, KEY_SLEEP),
|
||||
};
|
||||
|
||||
|
||||
|
@ -264,6 +263,15 @@ static struct platform_device smc91x_device = {
|
|||
.resource = smc91x_resources,
|
||||
};
|
||||
|
||||
static void __init h3_init_smc91x(void)
|
||||
{
|
||||
omap_cfg_reg(W15_1710_GPIO40);
|
||||
if (gpio_request(40, "SMC91x irq") < 0) {
|
||||
printk("Error requesting gpio 40 for smc91x irq\n");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
#define GPTIMER_BASE 0xFFFB1400
|
||||
#define GPTIMER_REGS(x) (0xFFFB1400 + (x * 0x800))
|
||||
#define GPTIMER_REGS_SIZE 0x46
|
||||
|
@ -296,14 +304,18 @@ static struct resource h3_kp_resources[] = {
|
|||
},
|
||||
};
|
||||
|
||||
static const struct matrix_keymap_data h3_keymap_data = {
|
||||
.keymap = h3_keymap,
|
||||
.keymap_size = ARRAY_SIZE(h3_keymap),
|
||||
};
|
||||
|
||||
static struct omap_kp_platform_data h3_kp_data = {
|
||||
.rows = 8,
|
||||
.cols = 8,
|
||||
.keymap = h3_keymap,
|
||||
.keymapsize = ARRAY_SIZE(h3_keymap),
|
||||
.rep = 1,
|
||||
.keymap_data = &h3_keymap_data,
|
||||
.rep = true,
|
||||
.delay = 9,
|
||||
.dbounce = 1,
|
||||
.dbounce = true,
|
||||
};
|
||||
|
||||
static struct platform_device h3_kp_device = {
|
||||
|
@ -376,6 +388,8 @@ static struct i2c_board_info __initdata h3_i2c_board_info[] = {
|
|||
|
||||
static void __init h3_init(void)
|
||||
{
|
||||
h3_init_smc91x();
|
||||
|
||||
/* Here we assume the NOR boot config: NOR on CS3 (possibly swapped
|
||||
* to address 0 by a dip switch), NAND on CS2B. The NAND driver will
|
||||
* notice whether a NAND chip is enabled at probe time.
|
||||
|
@ -422,21 +436,10 @@ static void __init h3_init(void)
|
|||
h3_mmc_init();
|
||||
}
|
||||
|
||||
static void __init h3_init_smc91x(void)
|
||||
{
|
||||
omap_cfg_reg(W15_1710_GPIO40);
|
||||
if (gpio_request(40, "SMC91x irq") < 0) {
|
||||
printk("Error requesting gpio 40 for smc91x irq\n");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
static void __init h3_init_irq(void)
|
||||
{
|
||||
omap1_init_common_hw();
|
||||
omap_init_irq();
|
||||
omap_gpio_init();
|
||||
h3_init_smc91x();
|
||||
}
|
||||
|
||||
static void __init h3_map_io(void)
|
||||
|
|
|
@ -180,64 +180,68 @@
|
|||
|
||||
/* Keyboard definition */
|
||||
|
||||
static int htc_herald_keymap[] = {
|
||||
static const unsigned int htc_herald_keymap[] = {
|
||||
KEY(0, 0, KEY_RECORD), /* Mail button */
|
||||
KEY(0, 1, KEY_CAMERA), /* Camera */
|
||||
KEY(0, 2, KEY_PHONE), /* Send key */
|
||||
KEY(0, 3, KEY_VOLUMEUP), /* Volume up */
|
||||
KEY(0, 4, KEY_F2), /* Right bar (landscape) */
|
||||
KEY(0, 5, KEY_MAIL), /* Win key (portrait) */
|
||||
KEY(0, 6, KEY_DIRECTORY), /* Right bar (protrait) */
|
||||
KEY(1, 0, KEY_LEFTCTRL), /* Windows key */
|
||||
KEY(1, 0, KEY_CAMERA), /* Camera */
|
||||
KEY(2, 0, KEY_PHONE), /* Send key */
|
||||
KEY(3, 0, KEY_VOLUMEUP), /* Volume up */
|
||||
KEY(4, 0, KEY_F2), /* Right bar (landscape) */
|
||||
KEY(5, 0, KEY_MAIL), /* Win key (portrait) */
|
||||
KEY(6, 0, KEY_DIRECTORY), /* Right bar (protrait) */
|
||||
KEY(0, 1, KEY_LEFTCTRL), /* Windows key */
|
||||
KEY(1, 1, KEY_COMMA),
|
||||
KEY(1, 2, KEY_M),
|
||||
KEY(1, 3, KEY_K),
|
||||
KEY(1, 4, KEY_SLASH), /* OK key */
|
||||
KEY(1, 5, KEY_I),
|
||||
KEY(1, 6, KEY_U),
|
||||
KEY(2, 0, KEY_LEFTALT),
|
||||
KEY(2, 1, KEY_TAB),
|
||||
KEY(2, 1, KEY_M),
|
||||
KEY(3, 1, KEY_K),
|
||||
KEY(4, 1, KEY_SLASH), /* OK key */
|
||||
KEY(5, 1, KEY_I),
|
||||
KEY(6, 1, KEY_U),
|
||||
KEY(0, 2, KEY_LEFTALT),
|
||||
KEY(1, 2, KEY_TAB),
|
||||
KEY(2, 2, KEY_N),
|
||||
KEY(2, 3, KEY_J),
|
||||
KEY(2, 4, KEY_ENTER),
|
||||
KEY(2, 5, KEY_H),
|
||||
KEY(2, 6, KEY_Y),
|
||||
KEY(3, 0, KEY_SPACE),
|
||||
KEY(3, 1, KEY_L),
|
||||
KEY(3, 2, KEY_B),
|
||||
KEY(3, 2, KEY_J),
|
||||
KEY(4, 2, KEY_ENTER),
|
||||
KEY(5, 2, KEY_H),
|
||||
KEY(6, 2, KEY_Y),
|
||||
KEY(0, 3, KEY_SPACE),
|
||||
KEY(1, 3, KEY_L),
|
||||
KEY(2, 3, KEY_B),
|
||||
KEY(3, 3, KEY_V),
|
||||
KEY(3, 4, KEY_BACKSPACE),
|
||||
KEY(3, 5, KEY_G),
|
||||
KEY(3, 6, KEY_T),
|
||||
KEY(4, 0, KEY_CAPSLOCK), /* Shift */
|
||||
KEY(4, 1, KEY_C),
|
||||
KEY(4, 2, KEY_F),
|
||||
KEY(4, 3, KEY_R),
|
||||
KEY(4, 3, KEY_BACKSPACE),
|
||||
KEY(5, 3, KEY_G),
|
||||
KEY(6, 3, KEY_T),
|
||||
KEY(0, 4, KEY_CAPSLOCK), /* Shift */
|
||||
KEY(1, 4, KEY_C),
|
||||
KEY(2, 4, KEY_F),
|
||||
KEY(3, 4, KEY_R),
|
||||
KEY(4, 4, KEY_O),
|
||||
KEY(4, 5, KEY_E),
|
||||
KEY(4, 6, KEY_D),
|
||||
KEY(5, 0, KEY_X),
|
||||
KEY(5, 1, KEY_Z),
|
||||
KEY(5, 2, KEY_S),
|
||||
KEY(5, 3, KEY_W),
|
||||
KEY(5, 4, KEY_P),
|
||||
KEY(5, 4, KEY_E),
|
||||
KEY(6, 4, KEY_D),
|
||||
KEY(0, 5, KEY_X),
|
||||
KEY(1, 5, KEY_Z),
|
||||
KEY(2, 5, KEY_S),
|
||||
KEY(3, 5, KEY_W),
|
||||
KEY(4, 5, KEY_P),
|
||||
KEY(5, 5, KEY_Q),
|
||||
KEY(5, 6, KEY_A),
|
||||
KEY(6, 0, KEY_CONNECT), /* Voice button */
|
||||
KEY(6, 2, KEY_CANCEL), /* End key */
|
||||
KEY(6, 3, KEY_VOLUMEDOWN), /* Volume down */
|
||||
KEY(6, 4, KEY_F1), /* Left bar (landscape) */
|
||||
KEY(6, 5, KEY_WWW), /* OK button (portrait) */
|
||||
KEY(6, 5, KEY_A),
|
||||
KEY(0, 6, KEY_CONNECT), /* Voice button */
|
||||
KEY(2, 6, KEY_CANCEL), /* End key */
|
||||
KEY(3, 6, KEY_VOLUMEDOWN), /* Volume down */
|
||||
KEY(4, 6, KEY_F1), /* Left bar (landscape) */
|
||||
KEY(5, 6, KEY_WWW), /* OK button (portrait) */
|
||||
KEY(6, 6, KEY_CALENDAR), /* Left bar (portrait) */
|
||||
0
|
||||
};
|
||||
|
||||
struct omap_kp_platform_data htcherald_kp_data = {
|
||||
static const struct matrix_keymap_data htc_herald_keymap_data = {
|
||||
.keymap = htc_herald_keymap,
|
||||
.keymap_size = ARRAY_SIZE(htc_herald_keymap),
|
||||
};
|
||||
|
||||
static struct omap_kp_platform_data htcherald_kp_data = {
|
||||
.rows = 7,
|
||||
.cols = 7,
|
||||
.delay = 20,
|
||||
.rep = 1,
|
||||
.keymap = htc_herald_keymap,
|
||||
.rep = true,
|
||||
.keymap_data = &htc_herald_keymap_data,
|
||||
};
|
||||
|
||||
static struct resource kp_resources[] = {
|
||||
|
@ -278,7 +282,7 @@ static struct gpio_keys_button herald_gpio_keys_table[] = {
|
|||
static struct gpio_keys_platform_data herald_gpio_keys_data = {
|
||||
.buttons = herald_gpio_keys_table,
|
||||
.nbuttons = ARRAY_SIZE(herald_gpio_keys_table),
|
||||
.rep = 1,
|
||||
.rep = true,
|
||||
};
|
||||
|
||||
static struct platform_device herald_gpiokeys_device = {
|
||||
|
@ -439,7 +443,7 @@ static const struct ads7846_platform_data htcherald_ts_platform_data = {
|
|||
.keep_vref_on = 1,
|
||||
.x_plate_ohms = 496,
|
||||
.gpio_pendown = HTCHERALD_GPIO_TS,
|
||||
.pressure_max = 100000,
|
||||
.pressure_max = 10000,
|
||||
.pressure_min = 5000,
|
||||
.x_min = 528,
|
||||
.x_max = 3760,
|
||||
|
@ -577,8 +581,6 @@ static void __init htcherald_init(void)
|
|||
printk(KERN_INFO "HTC Herald init.\n");
|
||||
|
||||
/* Do board initialization before we register all the devices */
|
||||
omap_gpio_init();
|
||||
|
||||
omap_board_config = htcherald_config;
|
||||
omap_board_config_size = ARRAY_SIZE(htcherald_config);
|
||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||
|
|
|
@ -44,17 +44,16 @@
|
|||
/* At OMAP1610 Innovator the Ethernet is directly connected to CS1 */
|
||||
#define INNOVATOR1610_ETHR_START 0x04000300
|
||||
|
||||
static int innovator_keymap[] = {
|
||||
static const unsigned int innovator_keymap[] = {
|
||||
KEY(0, 0, KEY_F1),
|
||||
KEY(0, 3, KEY_DOWN),
|
||||
KEY(3, 0, KEY_DOWN),
|
||||
KEY(1, 1, KEY_F2),
|
||||
KEY(1, 2, KEY_RIGHT),
|
||||
KEY(2, 0, KEY_F3),
|
||||
KEY(2, 1, KEY_F4),
|
||||
KEY(2, 1, KEY_RIGHT),
|
||||
KEY(0, 2, KEY_F3),
|
||||
KEY(1, 2, KEY_F4),
|
||||
KEY(2, 2, KEY_UP),
|
||||
KEY(3, 2, KEY_ENTER),
|
||||
KEY(2, 3, KEY_ENTER),
|
||||
KEY(3, 3, KEY_LEFT),
|
||||
0
|
||||
};
|
||||
|
||||
static struct mtd_partition innovator_partitions[] = {
|
||||
|
@ -126,11 +125,15 @@ static struct resource innovator_kp_resources[] = {
|
|||
},
|
||||
};
|
||||
|
||||
static const struct matrix_keymap_data innovator_keymap_data = {
|
||||
.keymap = innovator_keymap,
|
||||
.keymap_size = ARRAY_SIZE(innovator_keymap),
|
||||
};
|
||||
|
||||
static struct omap_kp_platform_data innovator_kp_data = {
|
||||
.rows = 8,
|
||||
.cols = 8,
|
||||
.keymap = innovator_keymap,
|
||||
.keymapsize = ARRAY_SIZE(innovator_keymap),
|
||||
.keymap_data = &innovator_keymap_data,
|
||||
.delay = 4,
|
||||
};
|
||||
|
||||
|
@ -290,13 +293,6 @@ static void __init innovator_init_irq(void)
|
|||
{
|
||||
omap1_init_common_hw();
|
||||
omap_init_irq();
|
||||
omap_gpio_init();
|
||||
#ifdef CONFIG_ARCH_OMAP15XX
|
||||
if (cpu_is_omap1510()) {
|
||||
omap1510_fpga_init_irq();
|
||||
}
|
||||
#endif
|
||||
innovator_init_smc91x();
|
||||
}
|
||||
|
||||
#ifdef CONFIG_ARCH_OMAP15XX
|
||||
|
@ -387,6 +383,10 @@ static struct omap_board_config_kernel innovator_config[] = {
|
|||
|
||||
static void __init innovator_init(void)
|
||||
{
|
||||
if (cpu_is_omap1510())
|
||||
omap1510_fpga_init_irq();
|
||||
innovator_init_smc91x();
|
||||
|
||||
#ifdef CONFIG_ARCH_OMAP15XX
|
||||
if (cpu_is_omap1510()) {
|
||||
unsigned char reg;
|
||||
|
|
|
@ -54,19 +54,18 @@ static void __init omap_nokia770_init_irq(void)
|
|||
omap_init_irq();
|
||||
}
|
||||
|
||||
static int nokia770_keymap[] = {
|
||||
KEY(0, 1, GROUP_0 | KEY_UP),
|
||||
KEY(0, 2, GROUP_1 | KEY_F5),
|
||||
KEY(1, 0, GROUP_0 | KEY_LEFT),
|
||||
static const unsigned int nokia770_keymap[] = {
|
||||
KEY(1, 0, GROUP_0 | KEY_UP),
|
||||
KEY(2, 0, GROUP_1 | KEY_F5),
|
||||
KEY(0, 1, GROUP_0 | KEY_LEFT),
|
||||
KEY(1, 1, GROUP_0 | KEY_ENTER),
|
||||
KEY(1, 2, GROUP_0 | KEY_RIGHT),
|
||||
KEY(2, 0, GROUP_1 | KEY_ESC),
|
||||
KEY(2, 1, GROUP_0 | KEY_DOWN),
|
||||
KEY(2, 1, GROUP_0 | KEY_RIGHT),
|
||||
KEY(0, 2, GROUP_1 | KEY_ESC),
|
||||
KEY(1, 2, GROUP_0 | KEY_DOWN),
|
||||
KEY(2, 2, GROUP_1 | KEY_F4),
|
||||
KEY(3, 0, GROUP_2 | KEY_F7),
|
||||
KEY(3, 1, GROUP_2 | KEY_F8),
|
||||
KEY(3, 2, GROUP_2 | KEY_F6),
|
||||
0
|
||||
KEY(0, 3, GROUP_2 | KEY_F7),
|
||||
KEY(1, 3, GROUP_2 | KEY_F8),
|
||||
KEY(2, 3, GROUP_2 | KEY_F6),
|
||||
};
|
||||
|
||||
static struct resource nokia770_kp_resources[] = {
|
||||
|
@ -77,11 +76,15 @@ static struct resource nokia770_kp_resources[] = {
|
|||
},
|
||||
};
|
||||
|
||||
static const struct matrix_keymap_data nokia770_keymap_data = {
|
||||
.keymap = nokia770_keymap,
|
||||
.keymap_size = ARRAY_SIZE(nokia770_keymap),
|
||||
};
|
||||
|
||||
static struct omap_kp_platform_data nokia770_kp_data = {
|
||||
.rows = 8,
|
||||
.cols = 8,
|
||||
.keymap = nokia770_keymap,
|
||||
.keymapsize = ARRAY_SIZE(nokia770_keymap),
|
||||
.keymap_data = &nokia770_keymap_data,
|
||||
.delay = 4,
|
||||
};
|
||||
|
||||
|
@ -246,7 +249,6 @@ static void __init omap_nokia770_init(void)
|
|||
platform_add_devices(nokia770_devices, ARRAY_SIZE(nokia770_devices));
|
||||
spi_register_board_info(nokia770_spi_board_info,
|
||||
ARRAY_SIZE(nokia770_spi_board_info));
|
||||
omap_gpio_init();
|
||||
omap_serial_init();
|
||||
omap_register_i2c_bus(1, 100, NULL, 0);
|
||||
hwa742_dev_init();
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue