FftD Keypad driver androidkeypadc

* l inux/drivers/input/keyboard/android_keypad.c

* Modified from driver for the pxa27x matrix keyboard controller.

* Modified from linux/drivers/input/keyboard/pxa27x_keypad.c

* Modified: April 6, 2009

* Author: Mask <[email protected]>

* Author: Rodolfo Giometti <[email protected]>

* Based on a previous implementations by Kevin O'Connor

* <kevin_at_koconnor.net> and Alex Osborne <[email protected]> and

* on some suggestions by Nicolas Pitre <[email protected]>.

* 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/module.h> #include <linux/init.h> #include <linux/interrupt.h> #include <linux/input.h> #include <linux/device.h> #include <linux/platform_device.h> #include <linux/clk.h> #include <linux/err.h> #include <linux/delay.h>

#include <asm/mach-types.h> #include <asm/mach/arch.h>

#include <asm/mach/map.h>

#include <asm/arch/hardware.h> #include <asm/arch/android_keypad.h>

#include <linux/kthread.h> #include <linux/freezer.h>

#define MAX_MATRIX_KEY_NUM (4 * 4) #define LOG_LEVEL KERN_ALERT

struct android_keypad {

struct android_keypad_platform_data *pdata;// maybe take off struct input_dev *input_dev;

unsigned long jiffy;

unsigned long jiffy_diff;

unsigned long jiffy_start_polling;

struct task_struct *polling_thread;

wait_queue_head_t keypad_wq;

struct mutex mutex;

spinlock_t spinlock;

unsigned long idle_period;

int polling;

static DEFINE_MUTEX(mutex_io_reg2);

void io_reg2_write(unsigned short val)

mutex_unlock(&mutex_io_reg2);

static DEFINE_MUTEX(mutex_io_reg1);

unsigned short io_reg1_read(void) {

unsigned short val; mutex_lock(&mutex_io_reg 1);

mutex_unlock(&mutex_io_reg 1); return val;

* 4(KEY_LEFT) 5 (KEY_RE SERVED) 6(KEY_RIGHT) B (KE Y_HOME)

* *(KEY_LEFTSHIFT)0(KEY_DOT) #(KEY_SLASH) D(KEY_SPACE)

struct android_keymap { unsigned int hw_key; unsigned int keycode; unsigned int shift_keycode;

( (r3<<7)|(r2<<6)|(r1<<5)|(r0<<4)|(c3 <<3)|(c2<<2)|(c1<<1 )|c0 ) static struct android_keymap keymap[] = {

{KEY(1,1,1,0,

1,1,1,0),

KEY_1,

KEY_BACK},

{KEY(1,1,1,0,

1,1,0,1),

KEY_2,

KEY_UP},

{KEY(1,1,1,0,

1,0,1,1),

KEY_3,

KEY_H},

{KEY(1,1,1,0,

0,1,1,1),

KEY_A,

KEY_MENU},

{KEY(1,1,0,1,

1,1,1,0),

KEY_4,

KEY_LEFT},

{KEY(1,1,0,1,

1,1,0,1),

KEY_5,

KE Y_RE SERVED },

{KEY(1,1,0,1,

1,0,1,1),

KEY_6,

KEY_RIGHT},

{KEY(1,1,0,1,

0,1,1,1),

KEY_B,

KEY_HOME},

{KEY(1,0,1,1,

1,1,1,0),

KEY_7,

KEY_T},

{KEY(1,0,1,1,

1,1,0,1),

KEY_8,

KEY_DOWN},

{KEY(1,0,1,1,

1,0,1,1),

KEY_9,

KEY_P},

{KEY(1,0,1,1,

0,1,1,1),

KEY_C,

KEY_BACKSPACE},

{KEY(0,1,1,1,

1,1,1,0),

KEY_LEFTSHIFT, KEY_LEFTSHIFT},

{KEY(0,1,1,1,

1,1,0,1),

KEY_0,

KEY_DOT},

{KEY(0,1,1,1,

1,0,1,1),

KEY_0,

KEY_SLASH},

{KEY(0,1,1,1,

0,1,1,1),

KEY_D,

KEY_SPACE},

{0,KEY_UNKNOWN, KEY_UNKNOWN },

static void android_keypad_setkeycode(struct android_keypad *keypad)

struct input_dev *input_dev = keypad->input_dev; unsigned int i;

for(i = 0; keymap[i].keycode != KEY_UNKNOWN; ++i) {

set_bit(keymap[i].keycode,input_dev->keybit); set_bit(keymap[i].shift_keycode,input_dev->keybit);

static unsigned int lookup_keycode(unsigned int hw_key) {

unsigned int i;

static bool shift_key = false; // maybe change to static for(i = 0; keymap[i].keycode != KEY_UNKNOWN; ++i) {

if(keymap[i].keycode == KEY_LEFTSHIFT)

return keymap[i].shift_keycode; return keymap[i].key code;

#define MAX_IDLE_MSEC (1*700) // 0.7 sec #define MIN_IDLE_MSEC (1*100) // 0.1 sec #define IDLE_STEPS 3

static unsigned int min_idle_msec = MIN_IDLE_MSEC;

static unsigned int max_idle_msec = MAX_IDLE_MSEC;

static unsigned int idle_steps = IDLE_STEPS;

#define SCAN(r3,r2,r1,r0) ( (r3<<3)|(r2<<2)|(r1<<1)|r0 )

static int android_keypad_thread(void * data)

struct android_keypad *keypad = data;

struct sched_param param = { .sched_priority = 1 };

unsigned short scan;

unsigned int keycode;

keypad->idle_period = min_idle_msec; sched_setscheduler(current, SCHED_FIFO, &param); current->flags |= PF_NOFREEZE; do {

io_reg2_write(scan); // maybe change to 0xe because bit 4~7 don't care keycode = lookup_keycode( (scan << 4) | ((io_reg1_read() & 0x0f00) >>

if(keycode != KEY_UNKNOWN) break;

if(keycode == KEY_UNKNOWN) // no input --- need to modify

if(keypad->idle_period < max_idle_msec)

keypad->idle_period += (max_idle_msec -min_idle_msec)/idle_steps;

if(keypad->idle_period > max_idle_msec) keypad->idle_period = max_idle_msec;

else

// calculate jiffies to cancel fast continuing key keypad->jiffy_diff = jiffies - keypad->jiffy; keypad->jiffy = jiffies;

input_report_key(keypad->input_dev,keycode,1);

input_sync(keypad->input_dev); input_report_key(keypad->input_dev,keycode,0); input_sync(keypad->input_dev); keypad->idle_period = min_idle_msec; printk(LOG_LEVEL "%s: jiffy_diff = %lu\n",

_func_,keypad->jiffy_diff);

printk(LOG_LEVEL "%s: keycode = %d\n",__func__,keycode);

set_task_state(current, TASK_INTERRUPTIBLE); if (!kthread_should_stop())

schedule_timeout(msecs_to_jiffies(keypad->idle_period)); set_task_state(current, TASK_RUNNING); } while(!kthread_should_stop()); return 0;

static int android_keypad_open(struct input_dev *dev) {

struct android_keypad *keypad = input_get_drvdata(dev); // remember check "private" in _probe function int err;

keypad->polling_thread = kthread_run(android_keypad_thread,keypad,"kandroid_keypadd");

if(IS_ERR(keypad->polling_thread))

err = PTR_ERR(keypad->polling_thread);

printk(LOG_LEVEL "%s: create kthread ERROR: %d\n",__func__,err); return err;

return 0;

static void android_keypad_close(struct input_dev *dev) {

struct android_keypad *keypad = input_get_drvdata(dev);

kthread_stop(keypad->polling_thread);

#ifdef CONFIG_PM

static int android_keypad_suspend(struct platform_device *pdev, pm_message_t state) {

struct android_keypad *keypad = platform_get_drvdata(pdev);

mutex_lock(&keypad->mutex); keypad->idle_period = max_idle_msec; mutex_unlock(&keypad->mutex);

return 0;

static int android_keypad_resume(struct platform_device *pdev) {

struct android_keypad *keypad = platform_get_drvdata(pdev);

mutex_lock(&keypad->mutex); keypad->idle_period = min_idle_msec; mutex_unlock(&keypad->mutex);

return 0;

#else

#define android_keypad_suspend NULL #define android_keypad_resume NULL #endif static int_devinit android_keypad_probe(struct platform_device *pdev)

struct android_keypad *keypad; struct input_dev *input_dev; int error;

keypad = kzalloc(sizeof(struct android_keypad), GFP_KERNEL); if (keypad == NULL) {

dev_err(&pdev->dev, "failed to allocate driver data\n"); return -ENOMEM;

mutex_init(&keypad->mutex); spin_lock_init(&keypad->spinlock);

/* Create and register the input driver. */ input_dev = input_allocate_device(); if (!input_dev) {

dev_err(&pdev->dev, "failed to allocate input device\n"); error = -ENOMEM; goto failed_free;

input_dev->name = pdev->name; input_dev->id.bustype = BUS_HOST; input_dev->open = android_keypad_open; input_dev->close = android_keypad_close; input_dev->dev.parent = &pdev->dev;

keypad->input_dev = input_dev; input_set_drvdata(input_dev, keypad);

set_bit(EV_KEY,input_dev->evbit); set_bit(EV_REL,input_dev->evbit);

android_keypad_setkeycode(keypad); platform_set_drvdata(pdev, keypad);

/* Register the input device */

error = input_register_device(input_dev);

dev_err(&pdev->dev, "failed to register input device\n"); goto failed_free_dev;

return 0;

failed_free_dev:

platform_set_drvdata(pdev, NULL); input_free_device(mput_dev); failed_free:

kfree(keypad); return error;

static int __devexit android_keypad_remove(struct platform_device *pdev) {

struct android_keypad *keypad = platform_get_drvdata(pdev);

input_unregister_device(keypad->input_dev); input_free_device(keypad->input_dev);

platform_set_drvdata(pdev, NULL);

kfree(keypad);

return 0;

static struct platform_driver android_keypad_driver = { .probe = android_keypad_probe,

.remove =_devexit_p(android_keypad_remove),

.suspend = android_keypad_suspend, .resume = android_keypad_resume, .driver = {

.name = "android-keypad",

static int __init android_keypad_init(void)

return platform_driver_register(&android_keypad_driver);

static void __exit android_keypad_exit(void) {

pl atform_dri ver_unregi ster(& androi d_key pad_dri ver);

module_init(android_keypad_init); module_exit(android_keypad_exit);

MODULE_DESCRIPTION("Android Keypad Controller Driver"); MODULE_LICENSE("GPL");

Touch driver (ucb1400_ts.c)

diff -raNu kernel.git/drivers/input/touchscreen/ucb1400_ts.c linux-2.6.25-android- 1.0_r1/drivers/input/touchscreen/ucb1400_ts.c — kernel. git/drivers/input/touchscreen/ucb1400_ts.c 2008-07-24 09:04:04.000000000 +0800

+++ linux-2.6.25-android-1.0_r1/drivers/input/touchscreen/ucb 1400_ts. c 2009-05-15 17:07: 29.000000000 +0800 @@ -1,6 +1,9 @@ /*

* Philips UCB1400 touchscreen driver

+ * Author: Mask <[email protected]>

* Author: Nicolas Pitre

* Created: September 25, 2006

* Copyright: Monta Vista Software, Inc. @@ -33,7 +36,6 @@

* Interesting UCB1400 AC-link registers

#define UCB_IE_RIS 0x5e

#define UCB_IE_FAL 0x60

#define UCB_IE_STATUS 0x62

@@ -97,6 +99,10 @@ static int adcsync; static int ts_delay = 55; /* us */ static int ts_delay_pressure; /* us */ +static u16 g_min_x = 90; +static u16 g_min_y = 80; +static u16 g_max_x = 920; +static u16 g_max_y = 950;

static inline u16 ucb1400_reg_read(struct ucb1400 *ucb, u16 reg) {

static void ucb1400_ts_evt_add(struct input_dev *idev, u16 pressure, u16 x, u16 y)

+/* it's hard code here, may be you should modify */

input_report_abs(idev, ABS_X, x); input_report_abs(idev, ABS_Y, y); - input_report_abs(idev, ABS_PRESSURE, pressure);

+ input_report_abs(idev, ABS_PRESSURE, pressure ? 1 : 0);

input_sync(idev);

static void ucb1400_ts_event_release(struct input_dev *idev) {

input_report_abs(idev, ABS_PRESSURE, 0); input_sync(idev);

/* Switch back to interrupt mode. */ ucb 1400_ts_mode_int(ucb);

ucb 1400_ts_irq_enable(ucb);

ucb1400_ts_evt_add(ucb->ts_idev, p, x, y); - timeout = msecs_to_jiffies(10);

wait_event_freezable_timeout(ucb->ts_wait, @@ -427,10 +447,12 @@

unsigned long mask, timeout;

probe_irq_off(mask); return -EBUSY;

ucb 1400_reg_write(ucb, UCB_IE_RIS, UCB_IE_ADC); @@ -463,7 +485,10 @@

/* Read triggered i nterrupt. */ ucb->irq = probe_irq_off(mask); if (ucb->irq < 0 | | ucb->irq == NO_IRQ)

- return -ENODEV;

return 0;

goto err_free_devs;

- error = request_irq(ucb->irq, ucb1400_hard_irq, IRQF_TRIGGER_RISING, + //error = request_irq(ucb->irq, ucb1400_hard_irq, IRQF_TRIGGER_RISING + error = request_irq(ucb->irq, ucb1400_hard_irq, 0,

printk(KERN_ERR " 'ucb 1400: unable to grab irq%d: %d\n", @@ -515,21 +541,27 @@

idev->close = ucb1400_ts_close;

- idev->evbit[0] = BIT_MASK(EV_ABS); + set_bit(EV_KEY,idev->evbit);

+ set_bit(BTN_TOUCH,idev->keybit);

ucb 1400_adc_enable(ucb); x_res = ucb1400_ts_read_xres(ucb); y_res = ucb1400_ts_read_yres(ucb); ucb 1400_adc_disable(ucb); - printk(KERN_DEBUG ' 'UCB 1400: x/y = %d/%d\n", x_res, y_res);

+ printk("UCB 1400: x/y = %d/%d\n", x_res, y_res);

- input_set_abs_params(idev, ABS_X, 0, x_res, 0, 0);

- input_set_abs_params(idev, ABS_Y, 0, y_res, 0, 0);

- input_set_abs_params(idev, ABS_PRESSURE, 0, 0, 0, 0); +/* it's hard code here, may be you should modify */

+ input_set_abs_params(idev, ABS_PRESSURE, 0, 1, 0, 0);

error = i nput_register_device(idev);

if (error)

+ printk("%s:%s i nput_register_device FAIL\n",_FILE_,_func_);

goto err_free_irq;

dev_set_drvdata(dev, ucb); return 0;

ft#Fmitrc

--- ../../mydroid/cdma-import/out/target/product/generic/root/init.rc 2009-04-23 16:29:40.000000000 +0800

+++ init.rc 2009-05-15 17:11:11.000000000 +0800 @@ -14,17 +14,17 @@

export BOOTCLASSPATH /system/framework/core.jar:/sy stem/framework/ext.jar:/system/framework/framework.j ar:/system/framework/android.policy.jar:/system/framework/services.jar

# Backward compatibility

- symlink /system/etc /etc +# symlink /system/etc /etc

# create mountpoints and mount tmpfs on sqlite_stmt_journals

- mkdir /sdcard 0000 system system

- mkdir /system

- mkdir /data 0771 system system

- mkdir /cache 0770 system cache

- mkdir /sqlite_stmt_journals 01777 root root

- mount tmpfs tmpfs /sqlite_stmt_journals size=4m

- mount rootfs rootfs / ro remount

+# mkdir /sdcard 0000 system system

+# mkdir /data 0771 system system

+# mkdir /cache 0770 system cache

+# mkdir /sqlite_stmt_journals 01777 root root

+# mount tmpfs tmpfs /sqlite_stmt_journals size=4m

+# mount rootfs rootfs / ro remount write /proc/sys/kernel/panic_on_oops 1 write /proc/sys/kernel/hung_task_timeout_secs 0 @@ -34,22 +34,22 @@

# mount mtd partitions

# Mount /system rw first to give the filesystem a chance to save a checkpoint

- mount yaffs2 [email protected] /system

- mount yaffs2 [email protected] /system ro remount

- # We chown/chmod /data again so because mount is run as root + defaults

- mount yaffs2 [email protected] /data nosuid nodev

- chown system system /data

- chmod 0771 /data

- # Same reason as /data above

- mount yaffs2 [email protected] /cache nosuid nodev

- chown system cache /cache

- chmod 0770 /cache

- # This may have been created by the recovery system with odd permissions

- chown system system /cache/recovery

- chmod 0770 /cache/recovery

+# mount yaffs2 [email protected] /system

+# mount yaffs2 [email protected] /system ro remount

+# # We chown/chmod /data again so because mount is run as root + defaults

+# mount yaffs2 [email protected] /data nosuid nodev

+# chown system system /data

+# mount yaffs2 [email protected] /cache nosuid nodev

+# chown system cache /cache

+# chmod 0770 /cache

+# # This may have been created by the recovery system with odd permissions

+# chown system system /cache/recovery

+# chmod 0770 /cache/recovery

# create basic filesystem structure mkdir /data/misc 01771 system misc @@ -115,34 +115,34 @@

# Permissions for System Server and daemons.

chown radio system /sys/android_power/state chown radio system /sys/android_power/request_state

- chown radio system /sys/android_power/acquire_full_wake_lock

- chown radio system /sys/android_power/acquire_partial_wake_lock

- chown radio system /sys/android_power/release_wake_lock

- chown system system /sys/class/timed_output/vibrator/enable

- chown system system /sys/class/leds/keyboard-backlight/brightness

- chown system system /sys/class/leds/lcd-backlight/brightness

- chown system system /sys/class/leds/button-backlight/brightness

- chown system system /sys/class/leds/red/brightness

- chown system system /sys/class/leds/green/brightness

- chown system system /sys/class/leds/blue/brightness

- chown system system /sys/class/leds/red/device/grpfreq

- chown system system /sys/class/leds/red/device/grppwm

- chown system system /sys/class/leds/red/device/blink

- chown system system /sys/class/leds/red/brightness

- chown system system /sys/class/leds/green/brightness

- chown system system /sys/class/leds/blue/brightness

- chown system system /sys/class/leds/red/device/grpfreq

- chown system system /sys/class/leds/red/device/grppwm

- chown system system /sys/class/leds/red/device/blink

- chown system system /sys/class/timed_output/vibrator/enable

- chown system system /sys/module/sco/parameters/disable_esco

- chown system system /sys/kernel/ipv4/tcp_wmem_min

- chown system system /sys/kernel/ipv4/tcp_wmem_def

- chown system system /sys/kernel/ipv4/tcp_wmem_max

- chown system system /sys/kernel/ipv4/tcp_rmem_min

- chown system system /sys/kernel/ipv4/tcp_rmem_def

- chown system system /sys/kernel/ipv4/tcp_rmem_max

- chown root radio /proc/cmdline

+# chown radio system /sys/android_power/acquire_full_wake_lock

+# chown radio system /sys/android_power/acquire_partial_wake_lock

+# chown radio system /sys/android_power/release_wake_lock

+# chown system system /sys/class/timed_output/vibrator/enable

+# chown system system /sys/class/leds/keyboard-backlight/brightness

+# chown system system /sys/class/leds/lcd-backlight/brightness

+# chown system system /sys/class/leds/button-backlight/brightness

+# chown system system /sys/class/leds/red/brightness

+#

chown

system

system

+#

chown

system

system

+#

chown

system

system

+#

chown

system

system

+#

chown

system

system

+#

chown

system

system

+#

chown

system

system

+#

chown

system

system

+#

chown

system

system

+#

chown

system

system

+#

chown

system

system

+#

chown

system

system

+#

chown

system

system

+#

chown

system

system

+#

chown

system

system

+#

chown

system

system

+#

chown

system

system

+#

chown

system

system

+#

chown

system

system

+#

chown

root radio /pro

# Define TCP buffer sizes for various networks

# ReadMin, Readlnitial, ReadMax, WriteMin, Writelnitial, WriteMax, @@ -184,15 +184,15 @@

service debuggerd /system/bin/debuggerd

-service ril-daemon /system/bin/rild

- socket rild stream 660 root radio

- socket rild-debug stream 660 radio system

- user root

- group radio cache i net misc +#service ril-daemon /system/bin/rild +# socket rild stream 660 root radio

+# socket rild-debug stream 660 radio system +# user root

+# group radio cache inet misc service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system- server socket zygote stream 666

- onrestart write /sys/android_power/request_state wake +# onrestart write /sys/android_power/request_state wake service media /system/bin/mediaserver user media @@ -203,30 +203,30 @@ group audio oneshot

-service dbus /system/bin/dbus-daemon --system --nofork

- socket dbus stream 660 bluetooth bluetooth

- user bluetooth

- group bluetooth net_bt_admin

-service hcid /system/bin/hcid -s -n -f /etc/hcid.conf

- socket bluetooth stream 660 bluetooth bluetooth

- socket dbus_bluetooth stream 660 bluetooth bluetooth

- # init.rc does not yet support applying capabilities, so run as root and

- # let hcid drop uid to bluetooth with the right linux capabilities

- group bluetooth net_bt_admin misc

- disabled

-service hfag /system/bin/sdptool add --channel=10 HFAG

- user bluetooth

- group bluetooth net_bt_admin

- disabled

- oneshot

-service hsag /system/bin/sdptool add --channel=11 HSAG

- user bluetooth

- group bluetooth net_bt_admin

- disabled

- oneshot

+#service dbus /system/bin/dbus-daemon --system --nofork +# socket dbus stream 660 bluetooth bluetooth

+# user bluetooth

+# group bluetooth net_bt_admin

+#service hcid /system/bin/hcid -s -n -f /etc/hcid.conf

+# socket bluetooth stream 660 bluetooth bluetooth

+# socket dbus_bluetooth stream 660 bluetooth bluetooth

+# # init.rc does not yet support applying capabilities, so run as root and

+# # let hcid drop uid to bluetooth with the right linux capabilities

+# group bluetooth net_bt_admin misc

+# disabled

+#service hfag /system/bin/sdptool add --channel=10 HFAG +# user bluetooth +# group bluetooth net_bt_admin +# disabled

+# oneshot

+#service hsag /system/bin/sdptool add --channel=11 HSAG

+# user bluetooth

+# group bluetooth net_bt_admin

+# disabled

+# oneshot service installd /system/bin/installd socket installd stream 600 system system

Ift^G linux-2.6.25-android-1.0_r1/Makefile diff -raNu kernel.git/Makefile linux-2.6.25-android-1.0_r1/Makefile

--- kernel.git/Makefile 2008-07-24 09:04:04.000000000 +0800

+++ linux-2.6.25-android-1.0_r1/Makefile 2009-05-15 14:13:22.000000000

+0800

@@ -1,7 +1,7 @@ VERSION = 2 PATCHLEVEL = 6 SUBLEVEL = 25 -EXTRAVERSION =

+EXTRAVERSION = [[email protected]om] NAME = Funky Weasel is Jiggy wit it

# Note: Some architectures assign CROSS_COMPILE in their arch/*/Makefile export KBUILD_BUILDHOST := $(SUBARCH)

# Architecture as present in compile.h UTS_MACHINE := $(ARCH)

Fft^H linux-2.6.25-android-1.0_r1/arch/arm/Makefil e diff -raNu kernel.git/arch/arm/Makefile linux-2.6.25-android-1.0_r1/arch/arm/Makefile --- kernel.git/arch/arm/Makefile 2008-07-24 09:04:04.000000000 +0800

+++ linux-2.6.25-android-1.0_r1/arch/arm/Makefile 2009-01-20

# Do not use arch/arm/defconfig - it's always outdated.

# Select a platform tht is kept up-to-date -KBUILD_DEFCONFIG := versatile_defconfig +KBUILD_DEFCONFIG := android_pxa270_defconfig

# defines filename extension depending memory manement type. ifeq ($(CONFIG_MMU),)

Fft^I linux-2.6.25-android-1.0_r1/arch/arm/configs /android_pxa270_defconfig

Index: arch/arm/configs/android_pxa270_defconfig

— arch/arm/configs/android_pxa270_defconfig (.../linux-2.6.25-android-1.0_r1/ arch/arm/configs/android_pxa270_defconfig) (revision 1) +++ arch/arm/configs/android_pxa270_defconfig

(.../kernel/linux-2.6.25-android-1.0_r1/arch/arm/configs/android_pxa270_defconfig) (revision 147)

# Automatically generated make config: don't edit -# Linux kernel version: 2.6.25

+# Linux kernel version: 2.6.25[[email protected]]

CONFIG_ARM=y

CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -35,7 +35,7 @@ CONFIG_BROKEN_ON_SMP=y CONFIG_INIT_ENV_ARG_LIMIT=3 2 CONFIG_LOCALVERSION="" -CONFIG_LOCALVERSION_AUTO=y +# CONFIG_LOCALVERSION_AUTO is not set CONFIG_SWAP=y CONFIG_SYSVIPC=y CONFIG_SYSVIPC_SYSCTL=y @@ -44,7 +44,7 @@

# CONFIG_TASKSTATS is not set

# CONFIG_AUDIT is not set

# CONFIG IKCONFIG is not set

-CONFIG_LOG_BUF_SHIFT=14 +CONFIG_LOG_BUF_SHIFT=16

# CONFIG_CGROUPS is not set CONFIG_GROUP_SCHED=y

CONFIG_FAIR_GROUP_SCHED=y @@ -82,7 +82,7 @@ CONFIG_TIMERFD=y CONFIG_EVENTFD=y CONFIG_SHMEM=y -# CONFIG_ASHMEM is not set +CONFIG_ASHMEM=y CONFIG_VM_EVENT_COUNTERS=y CONFIG_SLUB_DEBUG=y

# CONFIG_SLAB is not set

# CONFIG_PCI_SYSCALL is not set

# CONFIG_ARCH_SUPPORTS_MSI is not set -CONFIG_PCCARD=y

-# CONFIG_PCMCIA_DEBUG is not set -CONFIG_PCMCIA=y -CONFIG_PCMCIA_LOAD_CIS=y -CONFIG_PCMCIA_IOCTL=y

+# CONFIG_PCCARD is not set

-CONFIG_PCMCIA_PXA2XX=y -#

# Kernel Features

CONFIG_TICK_ONESHOT=y

# Power management options

+# CONFIG_PM_LEGACY is not set +# CONFIG_PM_DEBUG is not set +CONFIG_PM_SLEEP=y +CONFIG_SUSPEND=y +CONFIG_SUSPEND_FREEZER=y +# CONFIG_APM_EMULATION is not set

CONFIG_ARCH_SUSPEND_POSSIBLE=y

# CONFIG_BT_HCIBCM203X is not set

# CONFIG_BT_HCIBPA10X is not set

# CONFIG_BT_HCIBFUSB is not set -# CONFIG_BT_HCIDTL1 is not set -# CONFIG_BT_HCIBT3C is not set

-# CONFIG_BT_HCIBLUECARD is not set -# CONFIG_BT_HCIBTUART is not set

# CONFIG_BT_HCIVHCI is not set

# CONFIG_AF_RXRPC is not set

@@ -426,7 +419,7 @@ CONFIG_STANDALONE=y CONFIG_PREVENT_FIRMWARE_BUILD=y CONFIG_FW_LOADER=y -CONFIG_DEBUG_DRIVER=y +# CONFIG_DEBUG_DRIVER is not set

# CONFIG_DEBUG_DEVRES is not set

# CONFIG_SYS_HYPERVISOR is not set

# CONFIG_BLK_DEV_IDE_SATA is not set CONFIG_BLK_DEV_IDEDISK=y CONFIG_IDEDISK_MULTI_MODE=y

-CONFIG_BLK_DEV_IDECS=y

# CONFIG_BLK_DEV_IDECD is not set

# CONFIG BLK DEV IDETAPE is not set

# CONFIG_BLK_DEV_IDEFLOPPY is not set @@ -597,7 +589,6 @@

CONFIG_SC SI_LOWLEVEL=y

# CONFIG_ISCSI_TCP is not set

# CONFIG_SCSI_DEBUG is not set

-# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set

# CONFIG_ATA is not set

# CONFIG_MD is not set CONFIG_NETDEVICES=y

# CONFIG_USB_PEGASUS is not set

# CONFIG_USB_RTL815G is not set

# CONFIG_USB_USBNET is not set -# CONFIG_NET_PCMCIA is not set

# CONFIG_WAN is not set

# CONFIG_PPP is not set

# CONFIG_SLIP is not set

# Input device drivers

-# CONFIG_INPUT_KEYBOARD is not set +CONFIG_INPUT_KEYBOARD=y +# CONFIG_KEYBOARD_ATKBD is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_STOWAWAY is not set +# CONFIG_KEYBOARD_PXA27x is not set +CONFIG_KEYBOARD_ANDROID=y +# CONFIG_KEYBOARD_GPIO is not set +# CONFIG_KEYBOARD_GOLDFISH_EVENTS is not set

# CONFIG_INPUT_MOUSE is not set

# CONFIG_INPUT_JOYSTICK is not set

# CONFIG_INPUT_TABLET is not set

-# CONFIG_INPUT_TOUCHSCREEN is not set +CONFIG_INPUT_TOUCHSCREEN=y

+# CONFIG_TOUCHSCREEN_FUJITSU is not set +# CONFIG_TOUCHSCREEN_GUNZE is not set +# CONFIG_TOUCHSCREEN_ELO is not set +# CONFIG_TOUCHSCREEN_MTOUCH is not set +# CONFIG_TOUCHSCREEN_MK712 is not set +# CONFIG_TOUCHSCREEN_PENMOUNT is not set +# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set +# CONFIG_TOUCHSCREEN_TOUCHWIN is not set +CONFIG_TOUCHSCREEN_UCB1400=y +# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set

# CONFIG_INPUT_MISC is not set

# CONFIG_NVRAM is not set

-# PCMCIA character devices -#

-# CONFIG_SYNCLINK_CS is not set -# CONFIG_CARDMAN_4000 is not set -# CONFIG_CARDMAN_4040 is not set -# CONFIG_IPWIRELESS is not set

# CONFIG_RAW_DRIVER is not set

# CONFIG_TCG_TPM is not set

# CONFIG_CREATOR_PXA270_LCD is not set @@ -761,6 +763,7 @@

# CONFIG_SENSORS_PCF8574 is not set

# CONFIG_PCF8575 is not set

# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_SENSORS_RTC8564 is not set # CONFIG_TPS65010 is not set

# CONFIG_SENSORS_MAX6875 is not set

# CONFIG_SENSORS_TSL2550 is not set @@ -907,9 +910,9 @@

CONFIG_FB=y

# CONFIG_FIRMWARE_EDID is not set

# CONFIG_FB_DDC is not set -CONFIG_FB_CFB_FILLRECT=m -CONFIG_FB_CFB_COPYAREA=m -CONFIG_FB_CFB_IMAGEBLIT=m +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y

# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set

# CONFIG_FB_SYS_FILLRECT is not set

# CONFIG_FB_SYS_COPYAREA is not set @@ -926,7 +929,11 @@

# Frame buffer hardware drivers

# CONFIG_FB_S1D13XXX is not set -CONFIG_FB_PXA=m +CONFIG_FB_PXA=y

+# CONFIG_MTLCD_0283224 is not set +CONFIG_MTLCD_0353224=y +# CONFIG_MTLCD_0353224A is not set +# CONFIG_MTLCD_1046448 is not set

# CONFIG_FB_PXA_PARAMETERS is not set

# CONFIG_FB_MBX is not set

# CONFIG_FB_GOLDFISH is not set @@ -1004,12 +1011,6 @@

# CONFIG_SND_USB_CAIAQ is not set

-# CONFIG_SND_VXPOCKET is not set

-# CONFIG_SND_PDAUDIOCF is not set -#

# System on Chip audio support

# CONFIG_USB_DEVICEFS is not set CONFIG_USB_DEVICE_CL AS S=y

# CONFIG_USB_DYNAMIC_MINORS is not set +# CONFIG_USB_SUSPEND is not set

+# CONFIG_USB_PERSIST is not set

# CONFIG_USB_OTG is not set

# CONFIG_USB_STORAGE_SDDR55 is not set

# CONFIG_USB_STORAGE_JUMPSHOT is not set

# CONFIG_USB_STORAGE_ALAUDA is not set -# CONFIG_USB_STORAGE_ONETOUCH is not set

# CONFIG_USB_STORAGE_KARMA is not set

# CONFIG_USB_LIBUSUAL is not set

# CONFIG_NEW_LEDS is not set

# CONFIG_SWITCH is not set CONFIG_RTC_LIB=y

-# CONFIG_RTC_CLASS is not set

+CONFIG_RTC_CLASS=y

+# CONFIG_RTC_HCTOSYS is not set

+# CONFIG_RTC_DEBUG is not set

+# RTC interfaces

+# CONFIG_RTC_INTF_SYSFS is not set +# CONFIG_RTC_INTF_PROC is not set +# CONFIG_RTC_INTF_DEV is not set

+# CONFIG_RTC_DRV_TEST is not set

+# I2C RTC drivers

+# CONFIG_RTC_DRV_DS1307 is not set +# CONFIG RTC DRV DS1374 is not set

+# CONFIG_RTC_DRV_DS1672 is not set +# CONFIG_RTC_DRV_MAX69GG is not set +# CONFIG_RTC_DRV_RS5C372 is not set +# CONFIG_RTC_DRV_ISL12G8 is not set +# CONFIG_RTC_DRV_X12G5 is not set +# CONFIG_RTC_DRV_PCF8563 is not set +# CONFIG_RTC_DRV_PCF8583 is not set +# CONFIG_RTC_DRV_M41T8G is not set

+# CONFIG_RTC_DRV_S3539GA is not set

+# SPI RTC drivers

+# Platform RTC drivers

+# CONFIG_RTC_DRV_CMOS is not set +# CONFIG_RTC_DRV_DS1511 is not set +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_DS1742 is not set +# CONFIG_RTC_DRV_STK17TA8 is not set +# CONFIG_RTC_DRV_M48T86 is not set +# CONFIG_RTC_DRV_M48T59 is not set

+# CONFIG_RTC_DRV_V3G2G is not set

+# on-CPU RTC drivers

+# CONFIG_RTC_DRV_SA11GG is not set

+# CONFIG_RTC_DRV_GOLDFISH is not set

# Android

# CONFIG_ANDROID_RAM_CONSOLE is not set +CONFIG_ANDROID_POWER=y +CONFIG_ANDROID_POWER_ALARM=y

+CONFIG_ANDROID_POWER_STAT=y CONFIG_ANDROID_LOGGER=y CONFIG_ANDROID_TIMED_GPIO=y CONFIG_ANDROID_BINDER_IPC=y @@ -1163,8 +1215,13 @@ CONFIG_EXT2_F S=y

# CONFIG_EXT2_FS_XATTR is not set

# CONFIG_EXT2_FS_XIP is not set -# CONFIG_EXT3_FS is not set +CONFIG_EXT3_FS=y +CONFIG_EXT3_FS_XATTR=y

+# CONFIG_EXT3_FS_POSIX_ACL is not set +# CONFIG_EXT3_FS_SECURITY is not set

# CONFIG_EXT4DEV_FS is not set +CONFIG_JBD=y +CONFIG_FS_MBCACHE=y

# CONFIG_REISERFS_FS is not set

# CONFIG_JFS_FS is not set

# CONFIG_FS_POSIX_ACL is not set @@ -1216,7 +1273,16 @@

# CONFIG_BEFS_FS is not set

# CONFIG_BFS_FS is not set

# CONFIG_EFS_FS is not set -# CONFIG_YAFFS_FS is not set +CONFIG_YAFFS_FS=y +CONFIG_YAFFS_YAFFS1=y

+# CONFIG_YAFFS_9BYTE_TAGS is not set +# CONFIG_YAFFS_DOES_ECC is not set +CONFIG_YAFFS_YAFFS2=y +CONFIG_YAFFS_AUTO_YAFFS2=y +# CONFIG_YAFFS_DISABLE_LAZY_LOAD is not set +# CONFIG_YAFFS_DISABLE_WIDE_TNODES is not set +# CONFIG_YAFFS_ALWAYS_CHECK_CHUNK_ERASED is not set +CONFIG_YAFFS_SHORT_NAMES_IN_RAM=y CONFIG_JFFS2_FS=y CONFIG_JFF S2_F S_DEBUG=0 CONFIG_JFF S2_F S_WRITEBUFFER=y @@ -1349,9 +1415,9 @@

# CONFIG_LOCK_STAT is not set

# CONFIG_DEBUG_SPINLOCK_SLEEP is not set

# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set -CONFIG_DEBUG_KOBJECT=y

+# CONFIG_DEBUG_KOBJECT is not set CONFIG_DEBUG_BUGVERBOSE=y -CONFIG_DEBUG_INFO=y +# CONFIG_DEBUG_INFO is not set

# CONFIG_DEBUG_VM is not set

# CONFIG_DEBUG_LIST is not set

# CONFIG_DEBUG_SG is not set @@ -1363,10 +1429,9 @@

# CONFIG_LATENCYTOP is not set

# CONFIG_SAMPLES is not set CONFIG_DEBUG_USER=y

-CONFIG_DEBUG_ERRORS=y +# CONFIG_DEBUG_ERRORS is not set

# CONFIG_DEBUG_STACK_USAGE is not set -CONFIG_DEBUG_LL=y

-# CONFIG_DEBUG_ICEDCC is not set

+# CONFIG_DEBUG_LL is not set

# Security options linux-2.6.25-android-1.0_r1/arch/arm/kernel/ head.S

diff -raNu kernel.git/arch/arm/kernel/head.S linux-2.6.25-android-1.0_r1/arch/arm/kernel/head.S

--- kernel.git/arch/arm/kernel/head.S 2008-07-24 09:04:04.000000000 +0800 +++ linux-2.6.25-android-1.0_r1/arch/arm/kernel/head. S 2009-01 -13 22:18:17.000000000 +0800 @@ -77,6 +77,7 @@

.section ".text.head", "ax" .type stext, %function ENTRY(stext)

msr cpsr_c, #PSR_F_BIT | PSR_I_BIT | SVC_MODE @ ensure svc mode

@ and irqs disabled mrc p15, 0, r9, c0, c0 @ get processor id

0 0

Post a comment