From b6b87b2edcdb7d08733623919b179b3cf11517e9 Mon Sep 17 00:00:00 2001 From: lyx Date: Tue, 24 Aug 2010 20:45:14 -0700 Subject: [PATCH] l/p sensor: move gpio define to board_raho.c --- arch/arm/mach-rk2818/board-raho.c | 3 +++ drivers/input/misc/capella_cm3602.c | 39 +++++++++++++++++++++-------- include/linux/capella_cm3602.h | 3 +++ 3 files changed, 35 insertions(+), 10 deletions(-) mode change 100644 => 100755 drivers/input/misc/capella_cm3602.c mode change 100644 => 100755 include/linux/capella_cm3602.h diff --git a/arch/arm/mach-rk2818/board-raho.c b/arch/arm/mach-rk2818/board-raho.c index b91f5b215fbd..bf450804ae47 100755 --- a/arch/arm/mach-rk2818/board-raho.c +++ b/arch/arm/mach-rk2818/board-raho.c @@ -1399,6 +1399,9 @@ static int capella_cm3602_power(int on) static struct capella_cm3602_platform_data capella_cm3602_pdata = { .power = capella_cm3602_power, + .irq_pin = SPI_GPIO_P6_04, + .pwd_out_pin = SPI_GPIO_P4_07, + .ps_shutdown_pin = SPI_GPIO_P4_08, //.p_out = MAHIMAHI_GPIO_PROXIMITY_INT_N }; diff --git a/drivers/input/misc/capella_cm3602.c b/drivers/input/misc/capella_cm3602.c old mode 100644 new mode 100755 index 0fb6b2d703a6..7863d8df2d61 --- a/drivers/input/misc/capella_cm3602.c +++ b/drivers/input/misc/capella_cm3602.c @@ -26,6 +26,7 @@ #include #include #include +#include #include #define D(x...) printk(x) @@ -46,7 +47,7 @@ static bool time_enable = true; static int capella_cm3602_report(struct capella_cm3602_data *data) { //int val = gpio_get_value(data->pdata->p_out); - int val = spi_gpio_get_pinlevel(SPI_GPIO_P6_04); + int val = gpio_get_value(data->pdata->irq_pin); if (val < 0) { pr_err("%s: gpio_get_value error %d\n", __func__, val); return val; @@ -80,8 +81,8 @@ static int capella_cm3602_enable(struct capella_cm3602_data *data) D("%s: already enabled\n", __func__); return 0; } - spi_gpio_set_pinlevel(SPI_GPIO_P4_07, SPI_GPIO_LOW); //CM3605_PWD output - spi_gpio_set_pinlevel(SPI_GPIO_P4_08, SPI_GPIO_LOW); //CM3605_PS_SHUTDOWN + gpio_set_value(data->pdata->pwd_out_pin, SPI_GPIO_LOW); //CM3605_PWD output + gpio_set_value(data->pdata->ps_shutdown_pin, SPI_GPIO_LOW); //CM3605_PS_SHUTDOWN data->pdata->power(1); data->enabled = !rc; if (!rc) @@ -98,8 +99,8 @@ static int capella_cm3602_disable(struct capella_cm3602_data *data) D("%s: already disabled\n", __func__); return 0; } - spi_gpio_set_pinlevel(SPI_GPIO_P4_07, SPI_GPIO_HIGH); //CM3605_PWD output - spi_gpio_set_pinlevel(SPI_GPIO_P4_08, SPI_GPIO_HIGH); //CM3605_PS_SHUTDOWN + gpio_set_value(data->pdata->pwd_out_pin, GPIO_HIGH); //CM3605_PWD output + gpio_set_value(data->pdata->ps_shutdown_pin, GPIO_HIGH); //CM3605_PS_SHUTDOWN data->pdata->power(0); data->enabled = 0; return rc; @@ -107,10 +108,9 @@ static int capella_cm3602_disable(struct capella_cm3602_data *data) void cm3602_work_handler(struct work_struct *work) { - struct capella_cm3602_data *pdata; - int val = spi_gpio_get_pinlevel(SPI_GPIO_P6_04); - pdata = container_of(work, struct capella_cm3602_data, cm3602_work); + struct capella_cm3602_data *pdata = container_of(work, struct capella_cm3602_data, cm3602_work); + int val = gpio_get_value(pdata->pdata->irq_pin); printk("-------------------cm3602_work_handler,pinlevel:%d----------------\n",val); if (val == 1) { @@ -159,7 +159,26 @@ static int capella_cm3602_setup(struct capella_cm3602_data *ip) } */ - rc = spi_request_gpio_irq(SPI_GPIO_P6_04,capella_cm3602_irq_handler,SPI_GPIO_EDGE_FALLING,ip); + rc = gpio_request(pdata->pwd_out_pin, "cm3602 out"); + if (rc) { + pr_err("%s: request gpio %d failed \n", __func__, pdata->pwd_out_pin); + return rc; + } + rc = gpio_request(pdata->ps_shutdown_pin, "shut down pin"); + if (rc) { + gpio_free(pdata->pwd_out_pin); + pr_err("%s: request gpio %d failed \n", __func__, pdata->ps_shutdown_pin); + return rc; + } + rc = gpio_request(pdata->irq_pin, "cm3602 irq"); + if (rc) { + gpio_free(pdata->pwd_out_pin); + gpio_free(pdata->ps_shutdown_pin); + pr_err("%s: request gpio %d failed \n", __func__, pdata->irq_pin); + return rc; + } + rc = gpio_direction_input(pdata->irq_pin); + rc = request_irq(gpio_to_irq(pdata->irq_pin),capella_cm3602_irq_handler,SPI_GPIO_EDGE_FALLING,NULL, NULL); if (rc < 0) { pr_err("%s: request_irq failed for gpio %d (%d)\n", __func__, @@ -195,7 +214,7 @@ static int capella_cm3602_setup(struct capella_cm3602_data *ip) fail_free_irq: free_irq(irq, 0);*/ fail_free_p_out: - gpio_free(pdata->p_out); + gpio_free(pdata->irq_pin); done: return rc; } diff --git a/include/linux/capella_cm3602.h b/include/linux/capella_cm3602.h old mode 100644 new mode 100755 index 7f1de9b912a2..2979edc17016 --- a/include/linux/capella_cm3602.h +++ b/include/linux/capella_cm3602.h @@ -31,6 +31,9 @@ struct capella_cm3602_platform_data { int (*power)(int); /* power to the chip */ int p_out; /* proximity-sensor outpuCAPELLA_CM3602_IOCTL_ENABLE,t */ + int irq_pin; + int pwd_out_pin; + int ps_shutdown_pin; }; #endif /* __KERNEL__ */ -- 2.34.1