47a464d97b
git-svn-id: https://svn.o-hand.com/repos/poky/trunk@4570 311d38ba-8fff-0310-9ca6-ca027cbcb966
181 lines
5.9 KiB
Diff
181 lines
5.9 KiB
Diff
This patch adds support for Sharp CE-RH2 on Akita and CE-RH1 on C7x0.
|
|
|
|
This patch is a bit ugly:
|
|
- Device specific functions should be moved to platform infrastructure.
|
|
- Maybe define generic *_scoopexp functions handling Akita x Spitz differences.
|
|
|
|
Index: linux-2.6.24/drivers/input/keyboard/sharpsl_rc.c
|
|
===================================================================
|
|
--- linux-2.6.24.orig/drivers/input/keyboard/sharpsl_rc.c 2008-03-08 19:29:02.000000000 +0000
|
|
+++ linux-2.6.24/drivers/input/keyboard/sharpsl_rc.c 2008-03-08 22:23:35.000000000 +0000
|
|
@@ -21,12 +21,10 @@
|
|
#include <linux/module.h>
|
|
#include <linux/slab.h>
|
|
|
|
-#ifdef CONFIG_MACH_SPITZ
|
|
+#include <asm/mach-types.h>
|
|
#include <asm/arch/spitz.h>
|
|
-#endif
|
|
-#ifdef CONFIG_MACH_CORGI
|
|
+#include <asm/arch/akita.h>
|
|
#include <asm/arch/corgi.h>
|
|
-#endif
|
|
|
|
#include <asm/arch/hardware.h>
|
|
#include <asm/arch/pxa-regs.h>
|
|
@@ -42,12 +40,8 @@
|
|
unsigned char key;
|
|
};
|
|
|
|
-#ifdef CONFIG_MACH_SPITZ
|
|
-#define REMOTE_AKIN_PULLUP SPITZ_SCP2_AKIN_PULLUP
|
|
-#define REMOTE_SCOOP_DEVICE spitzscoop2_device
|
|
-#define REMOTE_GPIO_INT SPITZ_GPIO_AK_INT
|
|
-#define REMOTE_IRQ_INT SPITZ_IRQ_GPIO_AK_INT
|
|
-static struct remote_control_key remote_keys[] = {
|
|
+static struct remote_control_key remote_keys_spitz[] = {
|
|
+ /* CE-RH2 values */
|
|
{ 25, 35, KEY_STOPCD},
|
|
{ 55, 65, KEY_PLAYPAUSE},
|
|
{ 85, 95, KEY_NEXTSONG},
|
|
@@ -56,23 +50,15 @@
|
|
{ 180, 190, KEY_MUTE},
|
|
{ 215, 225, KEY_VOLUMEDOWN},
|
|
};
|
|
-#endif
|
|
-#ifdef CONFIG_MACH_CORGI
|
|
-#define REMOTE_AKIN_PULLUP CORGI_SCP_AKIN_PULLUP
|
|
-#define REMOTE_SCOOP_DEVICE corgiscoop_device
|
|
-#define REMOTE_GPIO_INT CORGI_GPIO_AK_INT
|
|
-#define REMOTE_IRQ_INT CORGI_IRQ_GPIO_AK_INT
|
|
-static struct remote_control_key remote_keys[] = {
|
|
- //These need to be fixed for the CE-RH1's values
|
|
- { 25, 35, KEY_STOPCD},
|
|
- { 55, 65, KEY_PLAYPAUSE},
|
|
- { 85, 95, KEY_NEXTSONG},
|
|
- { 115, 125, KEY_VOLUMEUP},
|
|
- { 145, 155, KEY_PREVIOUSSONG},
|
|
- { 180, 190, KEY_MUTE},
|
|
- { 215, 225, KEY_VOLUMEDOWN},
|
|
+static struct remote_control_key remote_keys_corgi[] = {
|
|
+ /* CE-RH1 values */
|
|
+ { 27, 35, KEY_STOPCD},
|
|
+ { 7, 13, KEY_PLAYPAUSE},
|
|
+ { 77, 93, KEY_NEXTSONG},
|
|
+ { 115, 132, KEY_VOLUMEUP},
|
|
+ { 46, 58, KEY_PREVIOUSSONG},
|
|
+ { 170, 186, KEY_VOLUMEDOWN},
|
|
};
|
|
-#endif
|
|
|
|
#define RELEASE_HI 230
|
|
#define MAX_EARPHONE 6
|
|
@@ -98,9 +84,17 @@
|
|
static int get_remocon_raw(void)
|
|
{
|
|
int i, val;
|
|
+ struct remote_control_key *remote_keys;
|
|
+
|
|
+ if (machine_is_borzoi() || machine_is_spitz() || machine_is_akita())
|
|
+ remote_keys = remote_keys_spitz;
|
|
+ else
|
|
+ remote_keys = remote_keys_corgi;
|
|
|
|
val = sharpsl_pm_pxa_read_max1111(MAX1111_REMCOM);
|
|
- for (i = 0; i < ARRAY_SIZE(remote_keys); ++i) {
|
|
+ for (i = 0; i < (machine_is_borzoi() || machine_is_spitz() || machine_is_akita() ?
|
|
+ ARRAY_SIZE(remote_keys_spitz) : ARRAY_SIZE(remote_keys_corgi));
|
|
+ ++i) {
|
|
if (val >= remote_keys[i].min
|
|
&& val <= remote_keys[i].max) {
|
|
printk("get_remocon_raw: VAL=%i, KEY=%i\n", val, remote_keys[i].key);
|
|
@@ -121,8 +115,12 @@
|
|
data->state = 0;
|
|
data->last_key = 0;
|
|
|
|
- reset_scoop_gpio(&REMOTE_SCOOP_DEVICE.dev, REMOTE_AKIN_PULLUP);
|
|
-
|
|
+ if (machine_is_borzoi() || machine_is_spitz())
|
|
+ reset_scoop_gpio(platform_scoop_config->devs[1].dev, SPITZ_SCP2_AKIN_PULLUP);
|
|
+ else if (machine_is_akita())
|
|
+ akita_reset_ioexp(&akitaioexp_device.dev, AKITA_IOEXP_AKIN_PULLUP);
|
|
+ else
|
|
+ reset_scoop_gpio(platform_scoop_config->devs[0].dev, CORGI_SCP_AKIN_PULLUP);
|
|
mod_timer(&data->rctimer, jiffies + msecs_to_jiffies(RC_POLL_MS));
|
|
}
|
|
return IRQ_HANDLED;
|
|
@@ -182,7 +180,12 @@
|
|
if (timer) {
|
|
mod_timer(&data->rctimer, jiffies + msecs_to_jiffies(RC_POLL_MS));
|
|
} else {
|
|
- set_scoop_gpio(&REMOTE_SCOOP_DEVICE.dev, REMOTE_AKIN_PULLUP);
|
|
+ if (machine_is_borzoi() || machine_is_spitz())
|
|
+ set_scoop_gpio(platform_scoop_config->devs[1].dev, SPITZ_SCP2_AKIN_PULLUP);
|
|
+ else if (machine_is_akita())
|
|
+ akita_set_ioexp(&akitaioexp_device.dev, AKITA_IOEXP_AKIN_PULLUP);
|
|
+ else
|
|
+ set_scoop_gpio(platform_scoop_config->devs[0].dev, CORGI_SCP_AKIN_PULLUP);
|
|
data->handling_press = 0;
|
|
}
|
|
}
|
|
@@ -192,6 +195,7 @@
|
|
struct sharpsl_rc *sharpsl_rc;
|
|
struct input_dev *input_dev;
|
|
int i, ret;
|
|
+ struct remote_control_key *remote_keys;
|
|
|
|
dev_dbg(&pdev->dev, "sharpsl_rc_probe\n");
|
|
|
|
@@ -225,17 +229,32 @@
|
|
|
|
input_dev->evbit[0] = BIT(EV_KEY);
|
|
|
|
- for (i = 0; i <= ARRAY_SIZE(remote_keys); i++)
|
|
+ if (machine_is_borzoi() || machine_is_spitz() || machine_is_akita())
|
|
+ remote_keys = remote_keys_spitz;
|
|
+ else
|
|
+ remote_keys = remote_keys_corgi;
|
|
+ for (i = 0; i < (machine_is_borzoi() || machine_is_spitz() || machine_is_akita() ?
|
|
+ ARRAY_SIZE(remote_keys_spitz) : ARRAY_SIZE(remote_keys_corgi));
|
|
+ ++i)
|
|
set_bit(remote_keys[i].key, input_dev->keybit);
|
|
|
|
input_register_device(sharpsl_rc->input);
|
|
|
|
- pxa_gpio_mode(REMOTE_GPIO_INT | GPIO_IN);
|
|
- ret = request_irq(REMOTE_IRQ_INT,
|
|
- sharpsl_rc_interrupt,
|
|
- IRQF_DISABLED | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING | IRQF_SHARED,
|
|
- "sharpsl_rc",
|
|
- sharpsl_rc);
|
|
+ if (machine_is_borzoi() || machine_is_spitz() || machine_is_akita()) {
|
|
+ pxa_gpio_mode(SPITZ_GPIO_AK_INT | GPIO_IN);
|
|
+ ret = request_irq(SPITZ_IRQ_GPIO_AK_INT,
|
|
+ sharpsl_rc_interrupt,
|
|
+ IRQF_DISABLED | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING | IRQF_SHARED,
|
|
+ "sharpsl_rc",
|
|
+ sharpsl_rc);
|
|
+ } else {
|
|
+ pxa_gpio_mode(CORGI_GPIO_AK_INT | GPIO_IN);
|
|
+ ret = request_irq(CORGI_IRQ_GPIO_AK_INT,
|
|
+ sharpsl_rc_interrupt,
|
|
+ IRQF_DISABLED | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING | IRQF_SHARED,
|
|
+ "sharpsl_rc",
|
|
+ sharpsl_rc);
|
|
+ }
|
|
if (ret < 0) {
|
|
dev_dbg(&pdev->dev, "Can't get IRQ: %d!\n", i);
|
|
kfree(sharpsl_rc);
|
|
@@ -252,7 +271,10 @@
|
|
|
|
dev_dbg(&pdev->dev, "sharpsl_rc_remove\n");
|
|
|
|
- free_irq(REMOTE_IRQ_INT, sharpsl_rc);
|
|
+ if (machine_is_borzoi() || machine_is_spitz() || machine_is_akita())
|
|
+ free_irq(SPITZ_IRQ_GPIO_AK_INT, sharpsl_rc);
|
|
+ else
|
|
+ free_irq(CORGI_IRQ_GPIO_AK_INT, sharpsl_rc);
|
|
del_timer_sync(&sharpsl_rc->rctimer);
|
|
input_unregister_device(sharpsl_rc->input);
|
|
kfree(sharpsl_rc);
|