[oe-commits] org.oe.dev linux-rp-2.6.23: Sync with Poky in the same way as 2.6.24

rpurdie commit oe at amethyst.openembedded.net
Sun Jun 1 22:56:45 UTC 2008


linux-rp-2.6.23: Sync with Poky in the same way as 2.6.24

Author: rpurdie at openembedded.org
Branch: org.openembedded.dev
Revision: 6ebd050b263f16bcc01c24afac045acd6f06146e
ViewMTN: http://monotone.openembedded.org/revision/info/6ebd050b263f16bcc01c24afac045acd6f06146e
Files:
1
packages/linux/linux-rp-2.6.23/zylonite_keypad-r0.patch
packages/linux/linux-rp-2.6.23/zylonite_mtd-r0.patch
packages/linux/linux-rp-2.6.23/zylonite_touch-r0.patch
packages/linux/linux-rp-2.6.23/defconfig-akita
packages/linux/linux-rp-2.6.23/defconfig-bootcdx86
packages/linux/linux-rp-2.6.23/defconfig-c7x0
packages/linux/linux-rp-2.6.23/defconfig-collie
packages/linux/linux-rp-2.6.23/defconfig-htcuniversal
packages/linux/linux-rp-2.6.23/defconfig-hx2000
packages/linux/linux-rp-2.6.23/defconfig-poodle
packages/linux/linux-rp-2.6.23/defconfig-qemuarm
packages/linux/linux-rp-2.6.23/defconfig-qemux86
packages/linux/linux-rp-2.6.23/defconfig-spitz
packages/linux/linux-rp-2.6.23/defconfig-tosa
packages/linux/linux-rp-2.6.23/defconfig-zylonite
packages/linux/linux-rp.inc
packages/linux/linux-rp_2.6.23.bb
Diffs:

#
# mt diff -r771be5e76b42e43330b225a2af3afbecdf9e9115 -r6ebd050b263f16bcc01c24afac045acd6f06146e
#
#
#
# add_file "packages/linux/linux-rp-2.6.23/zylonite_keypad-r0.patch"
#  content [7c4b5a7fe857418dd72379aaa883204d069abb8e]
# 
# add_file "packages/linux/linux-rp-2.6.23/zylonite_mtd-r0.patch"
#  content [2be88dd03ad102fe0a6168eb2fa2553841b40aef]
# 
# add_file "packages/linux/linux-rp-2.6.23/zylonite_touch-r0.patch"
#  content [0e1b8affcaa0a0a6688dc9ebcb1945a70414ddb0]
# 
# patch "packages/linux/linux-rp-2.6.23/defconfig-akita"
#  from [16a4bad602abd5690f33cd43e92712d80da502a1]
#    to [f6149d580838fedebe12966bba7d590c61592f29]
# 
# patch "packages/linux/linux-rp-2.6.23/defconfig-bootcdx86"
#  from [8aad1b0a4a185ddc9292e346428524a65026d738]
#    to [8b83370ebc312fc72b7d3f5706e3374eb024bdc9]
# 
# patch "packages/linux/linux-rp-2.6.23/defconfig-c7x0"
#  from [f68786d19f1fee76d589788b501bbf1a71799f57]
#    to [0db804a8dbb20189d167a0a66b1954108937f57b]
# 
# patch "packages/linux/linux-rp-2.6.23/defconfig-collie"
#  from [e95ab6574994fe324edea401b8406b675ab56357]
#    to [06c5e6665c5e1c3371684502ce75b8598bc0bcdf]
# 
# patch "packages/linux/linux-rp-2.6.23/defconfig-htcuniversal"
#  from [1340c6d9391cb6733576e09c22f804d9a619c70e]
#    to [e16094e6538f7f2c5c9fb20fa4796be5ccce6502]
# 
# patch "packages/linux/linux-rp-2.6.23/defconfig-hx2000"
#  from [7c95cdcb3e9a0338ccfa0e9fa3b11478db8db5b9]
#    to [687bc816de683781a410cd2b06a66f881750a61f]
# 
# patch "packages/linux/linux-rp-2.6.23/defconfig-poodle"
#  from [8c6270099668f834e1afa2c5dfbc6920c8217d1a]
#    to [df910ee7d9b5d8f33f5f915fe0c87d7cef7124ef]
# 
# patch "packages/linux/linux-rp-2.6.23/defconfig-qemuarm"
#  from [4125a6a73ab2e74f0b332baa32d064f0121314b4]
#    to [871541d32ac2f92fdc6f4af0378134d1144c327b]
# 
# patch "packages/linux/linux-rp-2.6.23/defconfig-qemux86"
#  from [6b644ab9bdd2e4d846f7c9a7d47d4e9f292d306b]
#    to [5ec0509a1d80ba5555c37e261efe4e30af22daf8]
# 
# patch "packages/linux/linux-rp-2.6.23/defconfig-spitz"
#  from [b071f674a2ac8b9b060cc5de413b281a6f19e5c6]
#    to [ec5d8f3ef47b1322fc4c32909675559ee5429621]
# 
# patch "packages/linux/linux-rp-2.6.23/defconfig-tosa"
#  from [8d1c6cbc73160dcaf3a3bbb8a1b4a3ff0dc5f1c5]
#    to [c26f972724a7f35714a8996a87730cf99257ed75]
# 
# patch "packages/linux/linux-rp-2.6.23/defconfig-zylonite"
#  from [f58d5f10cee5e4ad18945fd7d595ccfc26a2b8b5]
#    to [de2c4a1e5fcf3003d12c04f9f82acf1accdaa0de]
# 
# patch "packages/linux/linux-rp.inc"
#  from [7461bebc374969fe98375b69359751ae324dc757]
#    to [f9fa8c6c5a8b04b118872bcc1d856c9e0b008ac4]
# 
# patch "packages/linux/linux-rp_2.6.23.bb"
#  from [6965363fa2cff8dd8ad9456b52eae4a5f5f5e318]
#    to [a586568d730502b94b186a3d2babd916c05f4692]
#
============================================================
--- packages/linux/linux-rp-2.6.23/zylonite_keypad-r0.patch	7c4b5a7fe857418dd72379aaa883204d069abb8e
+++ packages/linux/linux-rp-2.6.23/zylonite_keypad-r0.patch	7c4b5a7fe857418dd72379aaa883204d069abb8e
@@ -0,0 +1,1187 @@
+Eric Miao's pxa keypad patchset backport.
+---
+ arch/arm/mach-pxa/devices.h                |    1 
+ arch/arm/mach-pxa/generic.c                |   31 +
+ arch/arm/mach-pxa/pxa27x.c                 |    2 
+ arch/arm/mach-pxa/pxa300.c                 |    6 
+ arch/arm/mach-pxa/pxa3xx.c                 |    1 
+ arch/arm/mach-pxa/zylonite.c               |   68 +++
+ drivers/input/keyboard/Kconfig             |    8 
+ drivers/input/keyboard/Makefile            |    2 
+ drivers/input/keyboard/pxa27x_keyboard.c   |  273 -------------
+ drivers/input/keyboard/pxa27x_keypad.c     |  575 +++++++++++++++++++++++++++++
+ include/asm-arm/arch-pxa/irqs.h            |    2 
+ include/asm-arm/arch-pxa/pxa27x_keyboard.h |   13 
+ include/asm-arm/arch-pxa/pxa27x_keypad.h   |   58 ++
+ 13 files changed, 745 insertions(+), 295 deletions(-)
+
+Index: linux-2.6.23-z-input/drivers/input/keyboard/Kconfig
+===================================================================
+--- linux-2.6.23-z-input.orig/drivers/input/keyboard/Kconfig	2008-02-18 01:43:28.000000000 +0100
++++ linux-2.6.23-z-input/drivers/input/keyboard/Kconfig	2008-02-18 01:43:28.000000000 +0100
+@@ -218,13 +218,13 @@
+ 	  module will be called omap-keypad.
+ 
+ config KEYBOARD_PXA27x
+-	tristate "PXA27x keyboard support"
+-	depends on PXA27x
++	tristate "PXA27x/PXA3xx keypad support"
++	depends on PXA27x || PXA3xx
+ 	help
+-	  Enable support for PXA27x matrix keyboard controller
++	  Enable support for PXA27x/PXA3xx keypad controller
+ 
+ 	  To compile this driver as a module, choose M here: the
+-	  module will be called pxa27x_keyboard.
++	  module will be called pxa27x_keypad.
+ 
+ config KEYBOARD_AAED2000
+ 	tristate "AAED-2000 keyboard"
+Index: linux-2.6.23-z-input/drivers/input/keyboard/Makefile
+===================================================================
+--- linux-2.6.23-z-input.orig/drivers/input/keyboard/Makefile	2008-02-18 01:43:28.000000000 +0100
++++ linux-2.6.23-z-input/drivers/input/keyboard/Makefile	2008-02-18 01:43:28.000000000 +0100
+@@ -18,7 +18,7 @@
+ obj-$(CONFIG_KEYBOARD_HIL)		+= hil_kbd.o
+ obj-$(CONFIG_KEYBOARD_HIL_OLD)		+= hilkbd.o
+ obj-$(CONFIG_KEYBOARD_OMAP)		+= omap-keypad.o
+-obj-$(CONFIG_KEYBOARD_PXA27x)		+= pxa27x_keyboard.o
++obj-$(CONFIG_KEYBOARD_PXA27x)		+= pxa27x_keypad.o
+ obj-$(CONFIG_KEYBOARD_AAED2000)		+= aaed2000_kbd.o
+ obj-$(CONFIG_KEYBOARD_GPIO)		+= gpio_keys.o
+ obj-$(CONFIG_KEYBOARD_ASIC3)		+= asic3_keys.o
+Index: linux-2.6.23-z-input/drivers/input/keyboard/pxa27x_keypad.c
+===================================================================
+--- /dev/null	1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23-z-input/drivers/input/keyboard/pxa27x_keypad.c	2008-02-19 01:40:04.000000000 +0100
+@@ -0,0 +1,575 @@
++/*
++ * linux/drivers/input/keyboard/pxa27x_keypad.c
++ *
++ * Driver for the pxa27x matrix keyboard controller.
++ *
++ * Created:	Feb 22, 2007
++ * Author:	Rodolfo Giometti <giometti at linux.it>
++ *
++ * Based on a previous implementations by Kevin O'Connor
++ * <kevin_at_koconnor.net> and Alex Osborne <bobofdoom at gmail.com> and
++ * on some suggestions by Nicolas Pitre <nico at cam.org>.
++ *
++ * 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 <asm/mach-types.h>
++#include <asm/mach/arch.h>
++#include <asm/mach/map.h>
++
++#include <asm/arch/hardware.h>
++#include <asm/arch/mfp.h>
++#include <asm/arch/pxa27x_keypad.h>
++
++#define BIT_MASK(nr)            (1UL << ((nr) % BITS_PER_LONG))
++
++/*
++ * Keypad Controller registers
++ */
++#define KPC             0x0000 /* Keypad Control register */
++#define KPDK            0x0008 /* Keypad Direct Key register */
++#define KPREC           0x0010 /* Keypad Rotary Encoder register */
++#define KPMK            0x0018 /* Keypad Matrix Key register */
++#define KPAS            0x0020 /* Keypad Automatic Scan register */
++
++/* Keypad Automatic Scan Multiple Key Presser register 0-3 */
++#define KPASMKP0        0x0028
++#define KPASMKP1        0x0030
++#define KPASMKP2        0x0038
++#define KPASMKP3        0x0040
++#define KPKDI           0x0048
++
++/* bit definitions */
++#define KPC_MKRN(n)	((((n) - 1) & 0x7) << 26) /* matrix key row number */
++#define KPC_MKCN(n)	((((n) - 1) & 0x7) << 23) /* matrix key column number */
++#define KPC_DKN(n)	((((n) - 1) & 0x7) << 6)  /* direct key number */
++
++#define KPC_AS          (0x1 << 30)  /* Automatic Scan bit */
++#define KPC_ASACT       (0x1 << 29)  /* Automatic Scan on Activity */
++#define KPC_MI          (0x1 << 22)  /* Matrix interrupt bit */
++#define KPC_IMKP        (0x1 << 21)  /* Ignore Multiple Key Press */
++
++#define KPC_MS(n)	(0x1 << (13 + (n)))	/* Matrix scan line 'n' */
++#define KPC_MS_ALL      (0xff << 13)
++
++#define KPC_ME          (0x1 << 12)  /* Matrix Keypad Enable */
++#define KPC_MIE         (0x1 << 11)  /* Matrix Interrupt Enable */
++#define KPC_DK_DEB_SEL	(0x1 <<  9)  /* Direct Keypad Debounce Select */
++#define KPC_DI          (0x1 <<  5)  /* Direct key interrupt bit */
++#define KPC_RE_ZERO_DEB (0x1 <<  4)  /* Rotary Encoder Zero Debounce */
++#define KPC_REE1        (0x1 <<  3)  /* Rotary Encoder1 Enable */
++#define KPC_REE0        (0x1 <<  2)  /* Rotary Encoder0 Enable */
++#define KPC_DE          (0x1 <<  1)  /* Direct Keypad Enable */
++#define KPC_DIE         (0x1 <<  0)  /* Direct Keypad interrupt Enable */
++
++#define KPDK_DKP        (0x1 << 31)
++#define KPDK_DK(n)	((n) & 0xff)
++
++#define KPREC_OF1       (0x1 << 31)
++#define kPREC_UF1       (0x1 << 30)
++#define KPREC_OF0       (0x1 << 15)
++#define KPREC_UF0       (0x1 << 14)
++
++#define KPREC_RECOUNT0(n)	((n) & 0xff)
++#define KPREC_RECOUNT1(n)	(((n) >> 16) & 0xff)
++
++#define KPMK_MKP        (0x1 << 31)
++#define KPAS_SO         (0x1 << 31)
++#define KPASMKPx_SO     (0x1 << 31)
++
++#define KPAS_MUKP(n)	(((n) >> 26) & 0x1f)
++#define KPAS_RP(n)	(((n) >> 4) & 0xf)
++#define KPAS_CP(n)	((n) & 0xf)
++
++#define KPASMKP_MKC_MASK	(0xff)
++
++#define keypad_readl(off)	__raw_readl(keypad->mmio_base + (off))
++#define keypad_writel(off, v)	__raw_writel((v), keypad->mmio_base + (off))
++
++#define MAX_MATRIX_KEY_NUM	(8 * 8)
++
++struct pxa27x_keypad {
++	struct pxa27x_keypad_platform_data *pdata;
++
++	struct clk *clk;
++	struct input_dev *input_dev;
++	void __iomem *mmio_base;
++
++	/* matrix key code map */
++	unsigned int matrix_keycodes[MAX_MATRIX_KEY_NUM];
++
++	/* state row bits of each column scan */
++	uint32_t matrix_key_state[MAX_MATRIX_KEY_COLS];
++	uint32_t direct_key_state;
++
++	unsigned int direct_key_mask;
++
++	int rotary_rel_code[2];
++	int rotary_up_key[2];
++	int rotary_down_key[2];
++};
++
++static void pxa27x_keypad_build_keycode(struct pxa27x_keypad *keypad)
++{
++	struct pxa27x_keypad_platform_data *pdata = keypad->pdata;
++	struct input_dev *input_dev = keypad->input_dev;
++	unsigned int *key;
++	int i;
++
++	key = &pdata->matrix_key_map[0];
++	for (i = 0; i < pdata->matrix_key_map_size; i++, key++) {
++		int row = ((*key) >> 28) & 0xf;
++		int col = ((*key) >> 24) & 0xf;
++		int code = (*key) & 0xffffff;
++
++		keypad->matrix_keycodes[(row << 3) + col] = code;
++		set_bit(code, input_dev->keybit);
++	}
++
++	keypad->rotary_up_key[0] = pdata->rotary0_up_key;
++	keypad->rotary_up_key[1] = pdata->rotary1_up_key;
++	keypad->rotary_down_key[0] = pdata->rotary0_down_key;
++	keypad->rotary_down_key[1] = pdata->rotary1_down_key;
++	keypad->rotary_rel_code[0] = pdata->rotary0_rel_code;
++	keypad->rotary_rel_code[1] = pdata->rotary1_rel_code;
++
++	if (pdata->rotary0_up_key && pdata->rotary0_down_key) {
++		set_bit(pdata->rotary0_up_key, input_dev->keybit);
++		set_bit(pdata->rotary0_down_key, input_dev->keybit);
++	} else
++		set_bit(pdata->rotary0_rel_code, input_dev->relbit);
++
++	if (pdata->rotary1_up_key && pdata->rotary1_down_key) {
++		set_bit(pdata->rotary1_up_key, input_dev->keybit);
++		set_bit(pdata->rotary1_down_key, input_dev->keybit);
++	} else
++		set_bit(pdata->rotary1_rel_code, input_dev->relbit);
++}
++
++static inline unsigned int lookup_matrix_keycode(
++		struct pxa27x_keypad *keypad, int row, int col)
++{
++	return keypad->matrix_keycodes[(row << 3) + col];
++}
++
++static void pxa27x_keypad_scan_matrix(struct pxa27x_keypad *keypad)
++{
++	struct pxa27x_keypad_platform_data *pdata = keypad->pdata;
++	int row, col, num_keys_pressed = 0;
++	uint32_t new_state[MAX_MATRIX_KEY_COLS];
++	uint32_t kpas = keypad_readl(KPAS);
++
++	num_keys_pressed = KPAS_MUKP(kpas);
++
++	memset(new_state, 0, sizeof(new_state));
++
++	if (num_keys_pressed == 0)
++		goto scan;
++
++	if (num_keys_pressed == 1) {
++		col = KPAS_CP(kpas);
++		row = KPAS_RP(kpas);
++
++		/* if invalid row/col, treat as no key pressed */
++		if (col >= pdata->matrix_key_cols ||
++		    row >= pdata->matrix_key_rows)
++			goto scan;
++
++		new_state[col] = (1 << row);
++		goto scan;
++	}
++
++	if (num_keys_pressed > 1) {
++		uint32_t kpasmkp0 = keypad_readl(KPASMKP0);
++		uint32_t kpasmkp1 = keypad_readl(KPASMKP1);
++		uint32_t kpasmkp2 = keypad_readl(KPASMKP2);
++		uint32_t kpasmkp3 = keypad_readl(KPASMKP3);
++
++		new_state[0] = kpasmkp0 & KPASMKP_MKC_MASK;
++		new_state[1] = (kpasmkp0 >> 16) & KPASMKP_MKC_MASK;
++		new_state[2] = kpasmkp1 & KPASMKP_MKC_MASK;
++		new_state[3] = (kpasmkp1 >> 16) & KPASMKP_MKC_MASK;
++		new_state[4] = kpasmkp2 & KPASMKP_MKC_MASK;
++		new_state[5] = (kpasmkp2 >> 16) & KPASMKP_MKC_MASK;
++		new_state[6] = kpasmkp3 & KPASMKP_MKC_MASK;
++		new_state[7] = (kpasmkp3 >> 16) & KPASMKP_MKC_MASK;
++	}
++scan:
++	for (col = 0; col < pdata->matrix_key_cols; col++) {
++		uint32_t bits_changed;
++
++		bits_changed = keypad->matrix_key_state[col] ^ new_state[col];
++		if (bits_changed == 0)
++			continue;
++
++		for (row = 0; row < pdata->matrix_key_rows; row++) {
++			if ((bits_changed & (1 << row)) == 0)
++				continue;
++
++			input_report_key(keypad->input_dev,
++				lookup_matrix_keycode(keypad, row, col),
++				new_state[col] & (1 << row));
++		}
++	}
++	input_sync(keypad->input_dev);
++	memcpy(keypad->matrix_key_state, new_state, sizeof(new_state));
++}
++
++#define DEFAULT_KPREC	(0x007f007f)
++
++static inline int rotary_delta(uint32_t kprec)
++{
++	if (kprec & KPREC_OF0)
++		return (kprec & 0xff) + 0x7f;
++	else if (kprec & KPREC_UF0)
++		return (kprec & 0xff) - 0x7f - 0xff;
++	else
++		return (kprec & 0xff) - 0x7f;
++}
++
++static void report_rotary_event(struct pxa27x_keypad *keypad, int r, int delta)
++{
++	struct input_dev *dev = keypad->input_dev;
++
++	if (delta == 0)
++		return;
++
++	if (keypad->rotary_up_key[r] && keypad->rotary_down_key[r]) {
++		int keycode = (delta > 0) ? keypad->rotary_up_key[r] :
++					    keypad->rotary_down_key[r];
++
++		/* simulate a press-n-release */
++		input_report_key(dev, keycode, 1);
++		input_sync(dev);
++		input_report_key(dev, keycode, 0);
++		input_sync(dev);
++	} else {
++		input_report_rel(dev, keypad->rotary_rel_code[r], delta);
++		input_sync(dev);
++	}
++}
++
++static void pxa27x_keypad_scan_rotary(struct pxa27x_keypad *keypad)
++{
++	struct pxa27x_keypad_platform_data *pdata = keypad->pdata;
++	uint32_t kprec;
++
++	/* read and reset to default count value */
++	kprec = keypad_readl(KPREC);
++	keypad_writel(KPREC, DEFAULT_KPREC);
++
++	if (pdata->enable_rotary0)
++		report_rotary_event(keypad, 0, rotary_delta(kprec));
++
++	if (pdata->enable_rotary1)
++		report_rotary_event(keypad, 1, rotary_delta(kprec >> 16));
++}
++
++static void pxa27x_keypad_scan_direct(struct pxa27x_keypad *keypad)
++{
++	struct pxa27x_keypad_platform_data *pdata = keypad->pdata;
++	unsigned int new_state;
++	uint32_t kpdk, bits_changed;
++	int i;
++
++	kpdk = keypad_readl(KPDK);
++
++	if (pdata->enable_rotary0 || pdata->enable_rotary1)
++		pxa27x_keypad_scan_rotary(keypad);
++
++	if (pdata->direct_key_map == NULL)
++		return;
++
++	new_state = KPDK_DK(kpdk) & keypad->direct_key_mask;
++	bits_changed = keypad->direct_key_state ^ new_state;
++
++	if (bits_changed == 0)
++		return;
++
++	for (i = 0; i < pdata->direct_key_num; i++) {
++		if (bits_changed & (1 << i))
++			input_report_key(keypad->input_dev,
++					pdata->direct_key_map[i],
++					(new_state & (1 << i)));
++	}
++	input_sync(keypad->input_dev);
++	keypad->direct_key_state = new_state;
++}
++
++static irqreturn_t pxa27x_keypad_irq_handler(int irq, void *dev_id)
++{
++	struct pxa27x_keypad *keypad = dev_id;
++	unsigned long kpc = keypad_readl(KPC);
++
++	if (kpc & KPC_DI)
++		pxa27x_keypad_scan_direct(keypad);
++
++	if (kpc & KPC_MI)
++		pxa27x_keypad_scan_matrix(keypad);
++
++	return IRQ_HANDLED;
++}
++
++static void pxa27x_keypad_config(struct pxa27x_keypad *keypad)
++{
++	struct pxa27x_keypad_platform_data *pdata = keypad->pdata;
++	unsigned int mask = 0, direct_key_num = 0;
++	unsigned long kpc = 0;
++
++	/* enable matrix keys with automatic scan */
++	if (pdata->matrix_key_rows && pdata->matrix_key_cols) {
++		kpc |= KPC_ASACT | KPC_MIE | KPC_ME | KPC_MS_ALL;
++		kpc |= KPC_MKRN(pdata->matrix_key_rows) |
++		       KPC_MKCN(pdata->matrix_key_cols);
++	}
++
++	/* enable rotary key, debounce interval same a%s
>>> DIFF TRUNCATED @ 16K






More information about the Openembedded-commits mailing list