From 07b8bc5d8fcfc27e81f747835b019f3757885bb8 Mon Sep 17 00:00:00 2001 From: lyx Date: Thu, 19 Aug 2010 23:55:40 -0700 Subject: [PATCH] touchscreen && spi --- arch/arm/mach-rk2818/board-infosdk.c | 69 ++++++++++++------- arch/arm/mach-rk2818/board-raho.c | 66 ++++++++++++------ arch/arm/mach-rk2818/include/mach/board.h | 6 +- drivers/input/gsensor/mma7660.c | 13 +--- drivers/input/touchscreen/xpt2046_ts.c | 28 +------- .../input/touchscreen/xpt2046_ts_320X480.c | 13 +--- drivers/spi/rk2818_spim.c | 20 ++---- 7 files changed, 103 insertions(+), 112 deletions(-) mode change 100644 => 100755 drivers/input/gsensor/mma7660.c diff --git a/arch/arm/mach-rk2818/board-infosdk.c b/arch/arm/mach-rk2818/board-infosdk.c index ed4b5668f129..3c4aa368b896 100755 --- a/arch/arm/mach-rk2818/board-infosdk.c +++ b/arch/arm/mach-rk2818/board-infosdk.c @@ -760,37 +760,60 @@ struct rk2818_i2s_platform_data rk2818_i2s_platdata = { * author: lhhrock-chips.com *****************************************************************************************/ #define SPI_CHIPSELECT_NUM 2 -static int spi_io_init(void) -{ - //cs0 - rk2818_mux_api_set(GPIOB4_SPI0CS0_MMC0D4_NAME, IOMUXA_GPIO0_B4); - //cs1 - rk2818_mux_api_set(GPIOB0_SPI0CSN1_MMC1PCA_NAME, IOMUXA_GPIO0_B0); - //clk - rk2818_mux_api_set(GPIOB_SPI0_MMC0_NAME, IOMUXA_SPI0); - - return 0; -} -static int spi_io_deinit(void) -{ - rk2818_mux_api_mode_resume(GPIOB4_SPI0CS0_MMC0D4_NAME); - rk2818_mux_api_mode_resume(GPIOB0_SPI0CSN1_MMC1PCA_NAME); - rk2818_mux_api_mode_resume(GPIOB_SPI0_MMC0_NAME); - return 0; -} - struct spi_cs_gpio rk2818_spi_cs_gpios[SPI_CHIPSELECT_NUM] = { { .name = "spi cs0", .cs_gpio = RK2818_PIN_PB4, + .cs_iomux_name = GPIOB4_SPI0CS0_MMC0D4_NAME,//if no iomux,set it NULL + .cs_iomux_mode = IOMUXA_GPIO0_B4, }, { .name = "spi cs1", .cs_gpio = RK2818_PIN_PB0, + .cs_iomux_name = GPIOB0_SPI0CSN1_MMC1PCA_NAME, + .cs_iomux_mode = IOMUXA_GPIO0_B0, } }; +static int spi_io_init(struct spi_cs_gpio *cs_gpios, int cs_num) +{ + int i,j,ret; + //clk + rk2818_mux_api_set(GPIOB_SPI0_MMC0_NAME, IOMUXA_SPI0); + //cs + if (cs_gpios) { + for (i=0; i>>>>> lcd cs gpio_request err \n "); goto pin_err; } @@ -1232,13 +1255,11 @@ void lcd_set_iomux(u8 enable) } else { - //gpio_free(RK2818_PIN_PA4); - //rk2818_mux_api_set(CXGPIO_HSADC_SEL_NAME, 1); - // rk2818_mux_api_mode_resume(CXGPIO_HSADC_SEL_NAME); + gpio_free(RK2818_PIN_PH6); + rk2818_mux_api_mode_resume(GPIOH6_IQ_SEL_NAME); gpio_free(RK2818_PIN_PE7); gpio_free(RK2818_PIN_PE6); - //rk2818_mux_api_set(GPIOE_U1IR_I2C1_NAME, 2); rk2818_mux_api_mode_resume(GPIOE_U1IR_I2C1_NAME); } return ; diff --git a/arch/arm/mach-rk2818/board-raho.c b/arch/arm/mach-rk2818/board-raho.c index db51d3f1c361..2a2cfa52b851 100755 --- a/arch/arm/mach-rk2818/board-raho.c +++ b/arch/arm/mach-rk2818/board-raho.c @@ -960,43 +960,65 @@ struct rk2818_i2s_platform_data rk2818_i2s_platdata = { * author: lhhrock-chips.com *****************************************************************************************/ #define SPI_CHIPSELECT_NUM 3 -static int spi_io_init(void) -{ - //cs0 - rk2818_mux_api_set(GPIOB4_SPI0CS0_MMC0D4_NAME, IOMUXA_GPIO0_B4); - //cs1 - rk2818_mux_api_set(GPIOB0_SPI0CSN1_MMC1PCA_NAME, IOMUXA_GPIO0_B0); - //clk - rk2818_mux_api_set(GPIOB_SPI0_MMC0_NAME, IOMUXA_SPI0); - //cs2 - rk2818_mux_api_set(GPIOF5_APWM3_DPWM3_NAME,IOMUXB_GPIO1_B5); - - return 0; -} -static int spi_io_deinit(void) -{ - rk2818_mux_api_mode_resume(GPIOB4_SPI0CS0_MMC0D4_NAME); - rk2818_mux_api_mode_resume(GPIOB0_SPI0CSN1_MMC1PCA_NAME); - rk2818_mux_api_mode_resume(GPIOB_SPI0_MMC0_NAME); - rk2818_mux_api_mode_resume(GPIOF5_APWM3_DPWM3_NAME); - return 0; -} - struct spi_cs_gpio rk2818_spi_cs_gpios[SPI_CHIPSELECT_NUM] = { { .name = "spi cs0", .cs_gpio = RK2818_PIN_PB4, + .cs_iomux_name = GPIOB4_SPI0CS0_MMC0D4_NAME,//if no iomux,set it NULL + .cs_iomux_mode = IOMUXA_GPIO0_B4, }, { .name = "spi cs1", .cs_gpio = RK2818_PIN_PB0, + .cs_iomux_name = GPIOB0_SPI0CSN1_MMC1PCA_NAME, + .cs_iomux_mode = IOMUXA_GPIO0_B0, }, { .name = "spi cs2", .cs_gpio = RK2818_PIN_PF5, + .cs_iomux_name = GPIOF5_APWM3_DPWM3_NAME, + .cs_iomux_mode = IOMUXB_GPIO1_B5, } }; +static int spi_io_init(struct spi_cs_gpio *cs_gpios, int cs_num) +{ + int i,j,ret; + //clk + rk2818_mux_api_set(GPIOB_SPI0_MMC0_NAME, IOMUXA_SPI0); + //cs + if (cs_gpios) { + for (i=0; iirq); - //GPIOClrearInmarkIntr(MMA7660_GPIO_INT); - + enable_irq(this_client->irq); rk28printk("---------------------------------------mma7660_work_func----------------------------------\n"); } @@ -357,9 +353,7 @@ static void mma7660_delaywork_func(struct work_struct *work) if (mma7660_get_data() < 0) rk28printk(KERN_ERR "MMA7660 mma_work_func: Get data failed\n"); - enable_irq(this_client->irq); - //GPIOClrearInmarkIntr(MMA7660_GPIO_INT); - + enable_irq(this_client->irq); rk28printk("---------------------------------------mma7660_delaywork_func------------------------------\n"); } @@ -367,9 +361,6 @@ static void mma7660_delaywork_func(struct work_struct *work) static irqreturn_t mma7660_interrupt(int irq, void *dev_id) { struct mma7660_data *data = dev_id; - - ///GPIOInmarkIntr(MMA7660_GPIO_INT); - //schedule_work(&data->work); disable_irq_nosync(this_client->irq); schedule_delayed_work(&data->delaywork,msecs_to_jiffies(30)); rk28printk("--------------------------------------mma7660_interrupt---------------------------------------\n"); diff --git a/drivers/input/touchscreen/xpt2046_ts.c b/drivers/input/touchscreen/xpt2046_ts.c index 69e2b3d5142b..de597bef2a42 100755 --- a/drivers/input/touchscreen/xpt2046_ts.c +++ b/drivers/input/touchscreen/xpt2046_ts.c @@ -201,25 +201,6 @@ struct dfr_req { struct spi_transfer xfer[4]; }; -static struct xpt2046_platform_data xpt2046_info = { - .model = 2046, - .keep_vref_on = 1, - .swap_xy = 1, - .x_min = 0, - .x_max = 800, - .y_min = 0, - .y_max = 480, - .debounce_max = 7, - .debounce_rep = DEBOUNCE_REPTIME, - .debounce_tol = 20, -#if defined(CONFIG_MACH_RAHO) - .gpio_pendown = RK2818_PIN_PE1, -#else - .gpio_pendown = RK2818_PIN_PE3, -#endif - .penirq_recheck_delay_usecs = 1, - -}; static void xpt2046_enable(struct xpt2046 *ts); static void xpt2046_disable(struct xpt2046 *ts); @@ -698,14 +679,7 @@ static int __devinit xpt2046_probe(struct spi_device *spi) spi->irq = gpio_to_irq(spi->irq); dev_dbg(&spi->dev, "no IRQ?\n"); } - - /* - if (!pdata) { - spi->dev.platform_data = &xpt2046_info; - pdata = spi->dev.platform_data; - } - */ - + if (!pdata) { dev_err(&spi->dev, "empty platform_data\n"); return -EFAULT; diff --git a/drivers/input/touchscreen/xpt2046_ts_320X480.c b/drivers/input/touchscreen/xpt2046_ts_320X480.c index e15e2f415010..18992368edd8 100755 --- a/drivers/input/touchscreen/xpt2046_ts_320X480.c +++ b/drivers/input/touchscreen/xpt2046_ts_320X480.c @@ -342,7 +342,8 @@ static void null_wait_for_sync(void) static void xpt2046_rx(void *xpt) { - struct xpt2046 *ts = xpt; + struct xpt2046 *ts = xpt; + struct xpt2046_platform_data *pdata = ts->spi->dev.platform_data; struct xpt2046_packet *packet = ts->packet; unsigned Rt = 1; u16 x, y; @@ -421,7 +422,7 @@ static void xpt2046_rx(void *xpt) } } - else if (y <= xpt2046_info.y_max) + else if (y <= pdata->y_max) { if (!ts->pendown) { input_report_key(input, BTN_TOUCH, 1); @@ -768,14 +769,6 @@ static int __devinit xpt2046_probe(struct spi_device *spi) spi->irq = gpio_to_irq(spi->irq); dev_dbg(&spi->dev, "no IRQ?\n"); } - - /* - if (!pdata) { - xpt2046printk("-----------------pdata is null -------------------------\n"); - spi->dev.platform_data = &xpt2046_info; - pdata = spi->dev.platform_data; - } - */ if (!pdata) { dev_err(&spi->dev, "empty platform_data\n"); diff --git a/drivers/spi/rk2818_spim.c b/drivers/spi/rk2818_spim.c index 0146ee12be5f..0d68a8d8f26a 100755 --- a/drivers/spi/rk2818_spim.c +++ b/drivers/spi/rk2818_spim.c @@ -928,25 +928,13 @@ static int __init rk2818_spim_probe(struct platform_device *pdev) int irq; int ret,i,j; struct rk2818_spi_platform_data *pdata = pdev->dev.platform_data; - struct spi_cs_gpio *cs_gpios = pdata->chipselect_gpios; if (pdata && pdata->io_init) { - pdata->io_init(); - } - - if (cs_gpios) { - for (i=0; inum_chipselect; i++) { - ret = gpio_request(cs_gpios[i].cs_gpio, cs_gpios[i].name); - if (ret) { - for (j=0;jio_deinit) - pdata->io_deinit(); - return -1; - } + ret = pdata->io_init(pdata->chipselect_gpios, pdata->num_chipselect); + if (ret) { + return -ENXIO; } - } + } regs = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!regs) -- 2.34.1