#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
#endif\r
\r
/* Debug */\r
-#define JB_DEBUG 0\r
+//#define JB_DEBUG 0\r
\r
#ifdef JB_DEBUG\r
#define DBG printk\r
\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
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
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
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
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
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
\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
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
//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
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
\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
{\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