jogball
authorswj <swj@rock-chips.com>
Mon, 13 Sep 2010 09:07:35 +0000 (02:07 -0700)
committerswj <swj@rock-chips.com>
Mon, 13 Sep 2010 09:07:35 +0000 (02:07 -0700)
arch/arm/mach-rk2818/devices.c [changed mode: 0755->0644]
arch/arm/mach-rk2818/include/mach/board.h [changed mode: 0755->0644]
drivers/input/jogball/rk2818_jogball.c

old mode 100755 (executable)
new mode 100644 (file)
index dad7bb2..d4a241d
@@ -480,6 +480,9 @@ struct platform_device rk2818_nand_device = {
 struct platform_device rk2818_jogball_device = {
                .name   = "rk2818_jogball",
                .id     = -1,
+               .dev = {
+                       .platform_data = &rk2818_jogball_platdata,
+               },
 };
 #endif
 
old mode 100755 (executable)
new mode 100644 (file)
index 4074b90..98e24ac
@@ -254,6 +254,18 @@ struct rk2818_adckey_platform_data {
        struct adc_key_data *adc_key;
 };
 
+struct  jgball_data {
+       u32 pin_up;
+       u32 pin_down;
+       u32 pin_left;
+       u32 pin_right;
+};
+
+struct rk2818_jogball_paltform_data {
+       struct jgball_data *jogball_key;
+};
+
+
 /* common init routines for use by arch/arm/mach-msm/board-*.c */
 void __init rk2818_add_devices(void);
 void __init rk2818_map_common_io(void);
index 9087d807bb696c3429390721785d557ebbadbc51..7da841111730e91c446a7d57dc6fa2d6139abb30 100755 (executable)
@@ -28,7 +28,7 @@
 #include <mach/gpio.h>\r
 #include <mach/iomux.h>\r
 #include <linux/irq.h>\r
-\r
+#include <mach/board.h>\r
 \r
 #ifdef CONFIG_ANDROID_POWER\r
 #include <linux/android_power.h>\r
@@ -37,7 +37,7 @@ static android_early_suspend_t jogball_early_suspend;
 #endif\r
 \r
 /* Debug */\r
-#define JB_DEBUG 0\r
+//#define JB_DEBUG 0\r
 \r
 #ifdef JB_DEBUG\r
 #define DBG    printk\r
@@ -52,11 +52,6 @@ static android_early_suspend_t jogball_early_suspend;
 \r
 #define JOGBALL_PHYS_NAME      "rk28_jogball/input0"\r
 \r
-#define JOGBALL_KEY_UP_IO       TCA6424_P11\r
-#define JOGBALL_KEY_DOWN_IO     TCA6424_P06\r
-#define JOGBALL_KEY_LEFT_IO     TCA6424_P10\r
-#define JOGBALL_KEY_RIGHT_IO    TCA6424_P07\r
-\r
 #define JOGBALL_MAX_CNT 1\r
 \r
 static volatile int jogball_cnt_up = 0;\r
@@ -73,37 +68,39 @@ static unsigned char initkey_code[ ] =
 struct rk28_jogball \r
 {\r
        struct input_dev *input_dev;\r
+       struct rk2818_jogball_paltform_data *pdata;\r
        unsigned char keycodes[5];\r
 };\r
 \r
 struct rk28_jogball *prockjogball;\r
 \r
 \r
-static int rk28_jogball_disable_irq(void )\r
+static int rk28_jogball_disable_irq(struct rk2818_jogball_paltform_data *pdata )\r
 {\r
 \r
-       disable_irq_nosync (gpio_to_irq(JOGBALL_KEY_UP_IO));\r
-       disable_irq_nosync (gpio_to_irq(JOGBALL_KEY_DOWN_IO));\r
-       disable_irq_nosync (gpio_to_irq(JOGBALL_KEY_LEFT_IO));\r
-       disable_irq_nosync (gpio_to_irq(JOGBALL_KEY_RIGHT_IO));\r
+       disable_irq_nosync (gpio_to_irq(pdata->jogball_key->pin_up));\r
+       disable_irq_nosync (gpio_to_irq(pdata->jogball_key->pin_down));\r
+       disable_irq_nosync (gpio_to_irq(pdata->jogball_key->pin_left));\r
+       disable_irq_nosync (gpio_to_irq(pdata->jogball_key->pin_right));\r
        \r
        return 0;\r
 }\r
 \r
-static int rk28_jogball_enable_irq(void)\r
+static int rk28_jogball_enable_irq(struct rk2818_jogball_paltform_data *pdata)\r
 {\r
 \r
-       enable_irq (gpio_to_irq(JOGBALL_KEY_UP_IO));\r
-       enable_irq (gpio_to_irq(JOGBALL_KEY_DOWN_IO));\r
-       enable_irq (gpio_to_irq(JOGBALL_KEY_LEFT_IO));\r
-       enable_irq (gpio_to_irq(JOGBALL_KEY_RIGHT_IO));\r
+       enable_irq (gpio_to_irq(pdata->jogball_key->pin_up));\r
+       enable_irq (gpio_to_irq(pdata->jogball_key->pin_down));\r
+       enable_irq (gpio_to_irq(pdata->jogball_key->pin_left));\r
+       enable_irq (gpio_to_irq(pdata->jogball_key->pin_right));\r
 \r
     return 0;\r
 }\r
 static irqreturn_t rk28_jogball_up_ISR(int irq, void *dev_id)\r
 {      \r
-       \r
-        rk28_jogball_disable_irq( );\r
+               \r
+       struct rk28_jogball *ball = dev_id;     \r
+        rk28_jogball_disable_irq(ball->pdata);\r
         DBG("jogball: up begain\n");\r
        jogball_cnt_up++;\r
 \r
@@ -121,16 +118,16 @@ static irqreturn_t rk28_jogball_up_ISR(int irq, void *dev_id)
                jogball_cnt_right = 0;\r
        }       \r
 \r
-        rk28_jogball_enable_irq( );\r
-        printk("jogball: up end\n");\r
+        rk28_jogball_enable_irq( ball->pdata);\r
+        DBG("jogball: up end\n");\r
        return IRQ_HANDLED;\r
 }\r
 \r
 \r
 static irqreturn_t rk28_jogball_down_ISR(int irq, void *dev_id)\r
 {\r
-        rk28_jogball_disable_irq( );\r
-\r
+       struct rk28_jogball *ball = dev_id;     \r
+        rk28_jogball_disable_irq(ball->pdata);\r
        jogball_cnt_down++;\r
        DBG("jogball: down start \n");\r
        if (jogball_cnt_down >= JOGBALL_MAX_CNT){\r
@@ -147,14 +144,16 @@ static irqreturn_t rk28_jogball_down_ISR(int irq, void *dev_id)
                jogball_cnt_right = 0;\r
        }       \r
        DBG("jogball: down end\n");\r
-        rk28_jogball_enable_irq( );\r
+        rk28_jogball_enable_irq(ball->pdata);\r
        return IRQ_HANDLED;\r
 }\r
 \r
 \r
 static irqreturn_t rk28_jogball_left_ISR(int irq, void *dev_id)\r
 {\r
-        rk28_jogball_disable_irq( );\r
+\r
+        struct rk28_jogball *ball = dev_id;    \r
+        rk28_jogball_disable_irq(ball->pdata);\r
        DBG("jogball: left begain\n");\r
        jogball_cnt_left++;\r
        \r
@@ -172,13 +171,14 @@ static irqreturn_t rk28_jogball_left_ISR(int irq, void *dev_id)
                jogball_cnt_right = 0;\r
        }       \r
        DBG("jogball: left end \n");\r
-        rk28_jogball_enable_irq( );\r
+        rk28_jogball_enable_irq(ball->pdata);\r
        return IRQ_HANDLED;\r
 }\r
 \r
 static irqreturn_t rk28_jogball_right_ISR(int irq, void *dev_id)\r
 {\r
-        rk28_jogball_disable_irq( );\r
+       struct rk28_jogball *ball = dev_id;     \r
+       rk28_jogball_disable_irq(ball->pdata);\r
        DBG("jogball: right start\n");\r
        jogball_cnt_right++;\r
 \r
@@ -196,7 +196,7 @@ static irqreturn_t rk28_jogball_right_ISR(int irq, void *dev_id)
                jogball_cnt_right = 0;\r
        }       \r
        DBG("jogball: right end\n");\r
-        rk28_jogball_enable_irq( );\r
+        rk28_jogball_enable_irq(ball->pdata);\r
        return IRQ_HANDLED;\r
 }\r
 \r
@@ -223,12 +223,13 @@ void rk28_jogball_shutdown(struct platform_device *dev)
 \r
 static int rk28_jogball_probe(struct platform_device *pdev)\r
 {\r
-  #if 1\r
+\r
       int    error, i;\r
        struct rk28_jogball *jogball = NULL;\r
        struct input_dev *input_dev = NULL;\r
-\r
-       printk("***************rk28_jogball_probe...\n");\r
+       struct rk2818_jogball_paltform_data *pdata = pdev->dev.platform_data;\r
+       if(!(pdata->jogball_key))\r
+               return -1;\r
        \r
        jogball = kzalloc(sizeof(struct rk28_jogball), GFP_KERNEL);\r
        if (jogball == NULL)\r
@@ -256,8 +257,8 @@ static int rk28_jogball_probe(struct platform_device *pdev)
        for (i = 0; i < ARRAY_SIZE(initkey_code); i++)\r
                set_bit(initkey_code[i], input_dev->keybit);\r
        clear_bit(0, input_dev->keybit);\r
-    input_dev->evbit[0] = BIT_MASK(EV_KEY);\r
-    \r
+       input_dev->evbit[0] = BIT_MASK(EV_KEY);\r
+       jogball->pdata = pdata;\r
        jogball->input_dev = input_dev;\r
        input_set_drvdata(input_dev, jogball);\r
 \r
@@ -277,59 +278,59 @@ static int rk28_jogball_probe(struct platform_device *pdev)
        //JOG_UP_PORT\r
        \r
 \r
-       error = gpio_request(JOGBALL_KEY_UP_IO,"Jog up");\r
+       error = gpio_request(pdata->jogball_key->pin_up,"Jog up");\r
        if(error)\r
        {\r
                printk("unable to request JOG_UP_PORT IRQ err=%d\n", error);\r
                goto failed3;\r
        }\r
-       gpio_direction_input(JOGBALL_KEY_UP_IO);        \r
-       error = request_irq(gpio_to_irq(JOGBALL_KEY_UP_IO),rk28_jogball_up_ISR,IRQ_TYPE_EDGE_RISING,NULL,jogball);\r
+       gpio_direction_input(pdata->jogball_key->pin_up);       \r
+       error = request_irq(gpio_to_irq(pdata->jogball_key->pin_up),rk28_jogball_up_ISR,IRQ_TYPE_EDGE_RISING,NULL,jogball);\r
        if(error)\r
        {\r
                printk("unable to request JOG_UP_PORT irq\n");\r
                goto failed4;\r
        }       \r
        //JOG_DOWN_PORT\r
-       error = gpio_request(JOGBALL_KEY_DOWN_IO,"jog down");\r
+       error = gpio_request(pdata->jogball_key->pin_down,"jog down");\r
        if(error)\r
        {\r
                printk("unable to request JOG_DOWN_PORT IRQ err=%d\n", error);\r
                goto failed5;\r
        }\r
-       gpio_direction_input(JOGBALL_KEY_DOWN_IO);\r
+       gpio_direction_input(pdata->jogball_key->pin_down);\r
        //gpio_pull_updown(JOG_DOWN_PORT,GPIOPullUp);\r
-       error = request_irq(gpio_to_irq(JOGBALL_KEY_DOWN_IO),rk28_jogball_down_ISR,IRQ_TYPE_EDGE_RISING,NULL,jogball);\r
+       error = request_irq(gpio_to_irq(pdata->jogball_key->pin_down),rk28_jogball_down_ISR,IRQ_TYPE_EDGE_RISING,NULL,jogball);\r
        if(error)\r
        {\r
                printk("unable to request JOG_DOWN_PORT irq\n");\r
                goto failed6;\r
        }       \r
        //JOG_LEFT_PORT\r
-       error = gpio_request(JOGBALL_KEY_LEFT_IO,"jog left");\r
+       error = gpio_request(pdata->jogball_key->pin_left,"jog left");\r
        if(error)\r
        {\r
                printk("unable to request JOG_LEFT_PORT IRQ err=%d\n", error);\r
                goto failed7;\r
        }\r
-       gpio_direction_input(JOGBALL_KEY_LEFT_IO);\r
+       gpio_direction_input(pdata->jogball_key->pin_left);\r
        //gpio_pull_updown(JOG_LEFT_PORT,GPIOPullUp);\r
-       error = request_irq(gpio_to_irq(JOGBALL_KEY_LEFT_IO),rk28_jogball_left_ISR,IRQ_TYPE_EDGE_RISING,NULL,jogball);\r
+       error = request_irq(gpio_to_irq(pdata->jogball_key->pin_left),rk28_jogball_left_ISR,IRQ_TYPE_EDGE_RISING,NULL,jogball);\r
        if(error)\r
        {\r
                printk("unable to request JOG_LEFT_PORT irq\n");\r
                goto failed8;\r
        }       \r
        //JOG_RIGHT_PORT\r
-       error = gpio_request(JOGBALL_KEY_RIGHT_IO,NULL);\r
+       error = gpio_request(pdata->jogball_key->pin_right,NULL);\r
        if(error)\r
        {\r
                printk("unable to request JOG_RIGHT_PORT IRQ err=%d\n", error);\r
                goto failed9;\r
        }\r
-       gpio_direction_input(JOGBALL_KEY_RIGHT_IO);\r
+       gpio_direction_input(pdata->jogball_key->pin_right);\r
        //gpio_pull_updown(JOG_RIGHT_PORT,GPIOPullUp);\r
-       error = request_irq(gpio_to_irq(JOGBALL_KEY_RIGHT_IO),rk28_jogball_right_ISR,IRQ_TYPE_EDGE_RISING,NULL,jogball);\r
+       error = request_irq(gpio_to_irq(pdata->jogball_key->pin_right),rk28_jogball_right_ISR,IRQ_TYPE_EDGE_RISING,NULL,jogball);\r
        if(error)\r
        {\r
                printk("unable to request JOG_RIGHT_PORT irq\n");\r
@@ -343,26 +344,26 @@ static int rk28_jogball_probe(struct platform_device *pdev)
     jogball_early_suspend.level = 0x2;\r
     android_register_early_suspend(&jogball_early_suspend);\r
 #endif\r
-#endif\r
-       printk("******************rk28_jogball_probe end\n");\r
+\r
+       printk("JOGBALL:rk28_jogball_probe sucess\n");\r
        return 0;\r
 #if 1\r
 failed10:\r
-       free_irq(gpio_to_irq(JOGBALL_KEY_RIGHT_IO),NULL);\r
+       free_irq(gpio_to_irq(pdata->jogball_key->pin_down),NULL);\r
 failed9:\r
-       gpio_free(JOGBALL_KEY_RIGHT_IO);\r
+       gpio_free(pdata->jogball_key->pin_down);\r
 failed8:\r
-       free_irq(gpio_to_irq(JOGBALL_KEY_LEFT_IO),NULL);\r
+       free_irq(gpio_to_irq(pdata->jogball_key->pin_left),NULL);\r
 failed7:\r
-       gpio_free(JOGBALL_KEY_LEFT_IO);\r
+       gpio_free(pdata->jogball_key->pin_left);\r
 failed6:               \r
-       free_irq(gpio_to_irq(JOGBALL_KEY_DOWN_IO),NULL);\r
+       free_irq(gpio_to_irq(pdata->jogball_key->pin_down),NULL);\r
 failed5:\r
-       gpio_free(JOGBALL_KEY_DOWN_IO);\r
+       gpio_free(pdata->jogball_key->pin_down);\r
 failed4:\r
-       free_irq(gpio_to_irq(JOGBALL_KEY_UP_IO),NULL);\r
+       free_irq(gpio_to_irq(pdata->jogball_key->pin_up),NULL);\r
 failed3:\r
-       gpio_free(JOGBALL_KEY_UP_IO);\r
+       gpio_free(pdata->jogball_key->pin_up);\r
        \r
        input_unregister_device(jogball->input_dev);\r
 \r
@@ -394,23 +395,25 @@ static int __devexit rk28_jogball_remove(struct platform_device *pdev)
 \r
 static int rk28_jogball_suspend(struct platform_device *pdev, pm_message_t state)\r
 {\r
-       DBG("IN jogball suspend !!\n");\r
-       disable_irq_nosync (gpio_to_irq(JOGBALL_KEY_UP_IO));\r
-       disable_irq_nosync (gpio_to_irq(JOGBALL_KEY_DOWN_IO));\r
-       disable_irq_nosync (gpio_to_irq(JOGBALL_KEY_LEFT_IO));\r
-       disable_irq_nosync (gpio_to_irq(JOGBALL_KEY_RIGHT_IO));\r
        \r
+       struct rk2818_jogball_paltform_data *pdata = pdev->dev.platform_data;\r
+       disable_irq_nosync (gpio_to_irq(pdata->jogball_key->pin_up));\r
+       disable_irq_nosync (gpio_to_irq(pdata->jogball_key->pin_down));\r
+       disable_irq_nosync (gpio_to_irq(pdata->jogball_key->pin_left));\r
+       disable_irq_nosync (gpio_to_irq(pdata->jogball_key->pin_right));\r
+       DBG("rk28_jogball_suspend\n")\r
        return 0;\r
 }\r
 \r
 static int rk28_jogball_resume(struct platform_device *pdev)\r
 {\r
-       DBG("IN jogball resume !!\n");\r
-       enable_irq (gpio_to_irq(JOGBALL_KEY_UP_IO));\r
-       enable_irq (gpio_to_irq(JOGBALL_KEY_DOWN_IO));\r
-       enable_irq (gpio_to_irq(JOGBALL_KEY_LEFT_IO));\r
-       enable_irq (gpio_to_irq(JOGBALL_KEY_RIGHT_IO));\r
-\r
+       \r
+       struct rk2818_jogball_paltform_data *pdata = pdev->dev.platform_data;\r
+       enable_irq (gpio_to_irq(pdata->jogball_key->pin_up));\r
+       enable_irq (gpio_to_irq(pdata->jogball_key->pin_down));\r
+       enable_irq (gpio_to_irq(pdata->jogball_key->pin_left));\r
+       enable_irq (gpio_to_irq(pdata->jogball_key->pin_right));\r
+       DBG("rk28_jogball_resume\n")\r
     return 0;\r
 }\r
 \r
@@ -436,12 +439,11 @@ static struct platform_driver rk28_jogball_driver =
 {\r
        int ret;\r
 \r
-       printk("****************JOGBALL inital\n");\r
+       DBG("rk28_jogball_initl\n");\r
        ret = platform_driver_register(&rk28_jogball_driver);\r
        if (ret < 0){\r
                printk("register rk28_jogball_driver failed!!\n");\r
-       }\r
-       printk("********************JOGBALL inital end\n");\r
+       }       \r
        return ret;\r
 }\r
 \r