核心原始碼arch\arm\plat-s3c24xx\s3c2410-clock.c
/* standard clock definitions */static struct clk init_clocks_off[] = {{.name= "nand",.id= -1,.parent= &clk_h,.enable= s3c2410_clkcon_enable,.ctrlbit= S3C2410_CLKCON_NAND,}, {.name= "sdi",.id= -1,.parent= &clk_p,.enable= s3c2410_clkcon_enable,.ctrlbit= S3C2410_CLKCON_SDI,}, {.name= "adc",.id= -1,.parent= &clk_p,.enable= s3c2410_clkcon_enable,.ctrlbit= S3C2410_CLKCON_ADC,}, {.name= "i2c",.id= -1,.parent= &clk_p,.enable= s3c2410_clkcon_enable,.ctrlbit= S3C2410_CLKCON_IIC,}, {.name= "iis",.id= -1,.parent= &clk_p,.enable= s3c2410_clkcon_enable,.ctrlbit= S3C2410_CLKCON_IIS,}, {.name= "spi",.id= -1,.parent= &clk_p,.enable= s3c2410_clkcon_enable,.ctrlbit= S3C2410_CLKCON_SPI,}};static struct clk init_clocks[] = {{.name= "lcd",.id= -1,.parent= &clk_h,.enable= s3c2410_clkcon_enable,.ctrlbit= S3C2410_CLKCON_LCDC,}, {.name= "gpio",.id= -1,.parent= &clk_p,.enable= s3c2410_clkcon_enable,.ctrlbit= S3C2410_CLKCON_GPIO,}, {.name= "usb-host",.id= -1,.parent= &clk_h,.enable= s3c2410_clkcon_enable,.ctrlbit= S3C2410_CLKCON_USBH,}, {.name= "usb-device",.id= -1,.parent= &clk_h,.enable= s3c2410_clkcon_enable,.ctrlbit= S3C2410_CLKCON_USBD,}, {.name= "timers",.id= -1,.parent= &clk_p,.enable= s3c2410_clkcon_enable,.ctrlbit= S3C2410_CLKCON_PWMT,}, {.name= "uart",.id= 0,.parent= &clk_p,.enable= s3c2410_clkcon_enable,.ctrlbit= S3C2410_CLKCON_UART0,}, {.name= "uart",.id= 1,.parent= &clk_p,.enable= s3c2410_clkcon_enable,.ctrlbit= S3C2410_CLKCON_UART1,}, {.name= "uart",.id= 2,.parent= &clk_p,.enable= s3c2410_clkcon_enable,.ctrlbit= S3C2410_CLKCON_UART2,}, {.name= "rtc",.id= -1,.parent= &clk_p,.enable= s3c2410_clkcon_enable,.ctrlbit= S3C2410_CLKCON_RTC,}, {.name= "watchdog",.id= -1,.parent= &clk_p,.ctrlbit= 0,}, {.name= "usb-bus-host",.id= -1,.parent= &clk_usb_bus,}, {.name= "usb-bus-gadget",.id= -1,.parent= &clk_usb_bus,},};
從這裡我們可以看到系統啟動時,那些時鐘使能了,那些被禁止了,所以我們的ADC時鐘在系統啟動後是不能使用的。
要使用ADC時鐘首先我們需要獲得ADC時鐘,然後使能它。
獲得時鐘函數
struct clk *clk_get(struct device *dev, const char *id)
第一個參數中,因為clk->id一般為-1,所以直接傳入NULL就可以了。
如果clk->id不為-1,函數會通過第一個參數傳入的dev擷取dev->bus_id。
第二個參數是一個字串,用來指定你要擷取的時鐘的名字。參數傳入後,核心尋找到一個dev->id(或者-1)是否與clk->id一致,並且con_id與clk->name一致的時鐘,如果不一致就會擷取失敗。所以,我這裡的函數應該是:clk_get(NULL,
“adc”)。
使能時鐘函數
int clk_enable(struct clk *clk)
禁止時鐘函數
void clk_disable(struct clk *clk)
之後我們就可以使用ADC了。