\r
#include "rk29_adc.h"\r
\r
-//#define ADC_TEST\r
+#define ADC_TEST\r
\r
struct rk29_adc_device {\r
int irq;\r
{\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
}\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
#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 */