update adc drivers
authorkfx <kfx@rock-chips.com>
Mon, 28 Feb 2011 09:12:52 +0000 (17:12 +0800)
committerkfx <kfx@rock-chips.com>
Mon, 28 Feb 2011 09:12:52 +0000 (17:12 +0800)
drivers/adc/plat/rk29_adc.c
drivers/adc/plat/rk29_adc.h

index e95a35592bb4752182a0de409ab0da1e311a9eb5..fec8071d6d0f581856e1da4b4e592bf1674e2cef 100755 (executable)
@@ -19,7 +19,7 @@
 \r
 #include "rk29_adc.h"\r
 \r
-//#define ADC_TEST\r
+#define ADC_TEST\r
 \r
 struct rk29_adc_device {\r
        int                                     irq;\r
@@ -32,15 +32,20 @@ static void rk29_adc_start(struct adc_host *adc)
 {\r
        struct rk29_adc_device *dev  = adc_priv(adc);\r
        int chn = adc->cur->chn;\r
-       \r
-       writel(ADC_CTRL_IRQ_ENABLE|ADC_CTRL_POWER_UP|ADC_CTRL_START|ADC_CTRL_CH(chn),\r
+\r
+       writel(0, dev->regs + ADC_CTRL);\r
+       writel(ADC_CTRL_POWER_UP|ADC_CTRL_CH(chn), dev->regs + ADC_CTRL);\r
+       udelay(SAMPLE_RATE);\r
+\r
+       writel(readl(dev->regs + ADC_CTRL)|ADC_CTRL_IRQ_ENABLE|ADC_CTRL_START, \r
                dev->regs + ADC_CTRL);\r
+       return;\r
 }\r
 static void rk29_adc_stop(struct adc_host *adc)\r
 {\r
        struct rk29_adc_device *dev  = adc_priv(adc);\r
        \r
-       writel(ADC_CTRL_IRQ_STATUS, dev->regs + ADC_CTRL);\r
+       writel(0, dev->regs + ADC_CTRL);\r
 }\r
 static int rk29_adc_read(struct adc_host *adc)\r
 {\r
@@ -68,16 +73,21 @@ static void callback(struct adc_client *client, void *param, int result)
 }\r
 static int rk29_adc_test(void)\r
 {\r
-       int sync_read = 0;\r
-       struct adc_client *client = adc_register(1, callback, NULL);\r
+       int sync_read = 0, i, j = 10;\r
+       struct adc_client *client =NULL;\r
 \r
-       while(1)\r
+       while(j--)\r
        {\r
+               client = adc_register(i, callback, NULL);\r
                adc_async_read(client);\r
-               udelay(20);\r
+               mdelay(1000);\r
                sync_read = adc_sync_read(client);\r
                dev_info(client->adc->dev, "[chn%d] sync_read = %d\n", client->chn, sync_read);\r
-               udelay(20);\r
+               adc_unregister(client);\r
+               mdelay(1000);\r
+               i++;\r
+               if(i >= 4)\r
+                       i = 0;\r
        }\r
        adc_unregister(client);\r
        return 0;\r
index c595427d7f8c95d86fe1539934911db1050c74bc..7164c087644b187dfe39d38b818370379fb2327b 100755 (executable)
 #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 */