From 1b96f3e9a6ed9c10ffd6a80492c5ae8f7d1185fb Mon Sep 17 00:00:00 2001 From: kfx Date: Mon, 28 Feb 2011 17:12:52 +0800 Subject: [PATCH] update adc drivers --- drivers/adc/plat/rk29_adc.c | 28 +++++++++++++++++++--------- drivers/adc/plat/rk29_adc.h | 7 ++----- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/drivers/adc/plat/rk29_adc.c b/drivers/adc/plat/rk29_adc.c index e95a35592bb4..fec8071d6d0f 100755 --- a/drivers/adc/plat/rk29_adc.c +++ b/drivers/adc/plat/rk29_adc.c @@ -19,7 +19,7 @@ #include "rk29_adc.h" -//#define ADC_TEST +#define ADC_TEST struct rk29_adc_device { int irq; @@ -32,15 +32,20 @@ static void rk29_adc_start(struct adc_host *adc) { struct rk29_adc_device *dev = adc_priv(adc); int chn = adc->cur->chn; - - writel(ADC_CTRL_IRQ_ENABLE|ADC_CTRL_POWER_UP|ADC_CTRL_START|ADC_CTRL_CH(chn), + + writel(0, dev->regs + ADC_CTRL); + writel(ADC_CTRL_POWER_UP|ADC_CTRL_CH(chn), dev->regs + ADC_CTRL); + udelay(SAMPLE_RATE); + + writel(readl(dev->regs + ADC_CTRL)|ADC_CTRL_IRQ_ENABLE|ADC_CTRL_START, dev->regs + ADC_CTRL); + return; } static void rk29_adc_stop(struct adc_host *adc) { struct rk29_adc_device *dev = adc_priv(adc); - writel(ADC_CTRL_IRQ_STATUS, dev->regs + ADC_CTRL); + writel(0, dev->regs + ADC_CTRL); } static int rk29_adc_read(struct adc_host *adc) { @@ -68,16 +73,21 @@ static void callback(struct adc_client *client, void *param, int result) } static int rk29_adc_test(void) { - int sync_read = 0; - struct adc_client *client = adc_register(1, callback, NULL); + int sync_read = 0, i, j = 10; + struct adc_client *client =NULL; - while(1) + while(j--) { + client = adc_register(i, callback, NULL); adc_async_read(client); - udelay(20); + mdelay(1000); sync_read = adc_sync_read(client); dev_info(client->adc->dev, "[chn%d] sync_read = %d\n", client->chn, sync_read); - udelay(20); + adc_unregister(client); + mdelay(1000); + i++; + if(i >= 4) + i = 0; } adc_unregister(client); return 0; diff --git a/drivers/adc/plat/rk29_adc.h b/drivers/adc/plat/rk29_adc.h index c595427d7f8c..7164c087644b 100755 --- a/drivers/adc/plat/rk29_adc.h +++ b/drivers/adc/plat/rk29_adc.h @@ -16,17 +16,14 @@ #define ADC_STAS_BUSY (1<<0) #define ADC_CTRL 0x08 -#define ADC_CTRL_CH(ch) ((ch)<<0) +#define ADC_CTRL_CH(ch) (0x07 - ((ch)<<0)) #define ADC_CTRL_POWER_UP (1<<3) #define ADC_CTRL_START (1<<4) #define ADC_CTRL_IRQ_ENABLE (1<<5) #define ADC_CTRL_IRQ_STATUS (1<<6) #define ADC_CLK_RATE 1 //1M -/* maximum conversion rate of 100KSPS with 1MHZ ADC converter clock. - * SET: real conversion rate is half of maximum conversion rate - */ -#define SAMPLE_RATE ((1000/100) * 2 /(ADC_CLK_RATE)) +#define SAMPLE_RATE (20/ADC_CLK_RATE) //20 CLK #endif /* __ASM_RK29_ADC_H */ -- 2.34.1