freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

[計(jì)算機(jī)軟件及應(yīng)用]基于高通msm8x60的i2c驅(qū)動(dòng)終極講解-資料下載頁(yè)

2025-01-16 07:09本頁(yè)面
  

【正文】 v_probe。函數(shù),下面分析下,該函數(shù)干了什么活:static int platform_drv_probe(struct device *_dev){struct platform_driver *drv = to_platform_driver(_devdriver)。struct platform_device *dev = to_platform_device(_dev)。return drvprobe(dev)。}這個(gè)函數(shù)沒什么東西,就是折騰下,去執(zhí)行platform中的探測(cè)函數(shù)。到處算是驅(qū)動(dòng)框架分析完畢,下一節(jié)開始分析具體的probe探測(cè)函數(shù),由于注冊(cè)設(shè)備和注冊(cè)驅(qū)動(dòng)時(shí),都要調(diào)用對(duì)應(yīng)驅(qū)動(dòng)的探測(cè)函數(shù),所以重點(diǎn)看的就是探測(cè)函數(shù)?;诟咄∕SM 8x60的I2C驅(qū)動(dòng)終極講解(8)(20120422 17:31)標(biāo)簽:轉(zhuǎn)載 分類:linux driver study原文地址:基于高通MSM 8x60的I2C驅(qū)動(dòng)終極講解(8)作者:shangbaogen接著上一節(jié),看咱們的probe函數(shù),代碼還是只看主線。代碼很長(zhǎng),兩個(gè)字:淡定。static int __devinit qup_i2c_probe(struct platform_device *pdev){struct qup_i2c_dev*dev。struct resource*qup_mem, *gsbi_mem, *qup_io, *gsbi_io。struct resource *err_irq。struct clk *clk, *pclk。struct msm_i2c_platform_data *pdata。const char *qup_apps_clk_name = qup_clk。pdata = pdev。//取出平臺(tái)設(shè)備的platform_data/*通過(guò)名字取出在BSP文件中注冊(cè)的相應(yīng)資源*/qup_mem = platform_get_resource_byname(pdev, IORESOURCE_MEM,qup_phys_addr)。err_irq = platform_get_resource_byname(pdev, IORESOURCE_IRQ,qup_err_intr)。/*請(qǐng)求資源,告訴其他驅(qū)動(dòng),該資源已經(jīng)被占用*/qup_io = request_mem_region(qup_memstart, resource_size(qup_mem),pdevname)。/*如果該標(biāo)志沒有設(shè)置,則取出相應(yīng)的資源*/if (!pdatause_gsbi_shared_mode) { {gsbi_mem = platform_get_resource_byname(pdev, IORESOURCE_MEM,gsbi_qup_i2c_addr)。} /*請(qǐng)求該內(nèi)存資源*/gsbi_io = request_mem_region(gsbi_memstart,resource_size(gsbi_mem),pdevname)。}/*如果該clk不為空,通過(guò)名字取出該clk*/if (pdataclk != NULL)qup_apps_clk_name = pdataclk。clk = clk_get(amp。pdevdev, qup_apps_clk_name)。} /*如果該pclk不為空,通過(guò)名字取出該clk*/if (pdatapclk != NULL) {pclk = clk_get(amp。pdevdev, pdatapclk)。} 。/*分配qup_i2c_dev結(jié)構(gòu)體*/dev = kzalloc(sizeof(struct qup_i2c_dev), GFP_KERNEL)。devdev = amp。pdevdev。deverr_irq = err_irqstart。devnum_irqs = 1。devclk = clk。devpclk = pclk。/*映射請(qǐng)求到的內(nèi)存*/devbase = ioremap(qup_memstart, resource_size(qup_mem))。/* Configure GSBI block to use I2C functionality */if (gsbi_mem) {devgsbi = ioremap(gsbi_memstart, resource_size(gsbi_mem))。}/*初始化完dev后,把dev設(shè)置為pdev的dev的私有數(shù)據(jù)*/platform_set_drvdata(pdev, dev)。devone_bit_t = USEC_PER_SEC/pdataclk_freq。devpdata = pdata。devclk_ctl = 0。devpos = 0。/*請(qǐng)求中斷,并且設(shè)置中斷處理函數(shù)*/ret = request_irq(deverr_irq, qup_i2c_interrupt,IRQF_TRIGGER_HIGH, qup_err_intr, dev)。/*去使能該中斷*/disable_irq(deverr_irq)。/*把該dev掛載到devadapter的私有數(shù)據(jù)結(jié)構(gòu)的driver data上*/i2c_set_adapdata(amp。devadapter, dev)。/*設(shè)置該adapter的algo算法結(jié)構(gòu)*/dev = amp。qup_i2c_algo。其中該結(jié)構(gòu)的初始化實(shí)例如下:static const struct i2c_algorithm qup_i2c_algo = {.master_xfer= qup_i2c_xfer,//這是具體的控制器傳輸方法.functionality= qup_i2c_func,//返回該I2C總線所支持的功能}。/*為該adapter的name賦值*/strlcpy(dev,QUP I2C adapter,sizeof(dev))。/*為該adapter的編號(hào)賦值*/dev = pdevid。/*為該控制器的配置gpio*/pdatamsm_i2c_config_gpio(dev, 1)。/*初始化dev的部分變量*/devsuspended = 0。mutex_init(amp。devmlock)。devclk_state = 0。setup_timer(amp。devpwr_timer, qup_i2c_pwr_timer, (unsigned long) dev)。/*把該adapter加入到系統(tǒng)中*/ret = i2c_add_numbered_adapter(amp。devadapter)。}總結(jié)下:探測(cè)函數(shù)所做的工作就是,初始化dev,并把把該dev掛載到devadapter的私有數(shù)據(jù)結(jié)構(gòu)的driver data上,然后設(shè)置adapter,把該adapter加入到系統(tǒng)中。下面的文章主要關(guān)注adapter的注冊(cè)?;诟咄∕SM 8x60的I2C驅(qū)動(dòng)終極講解(9)(20120422 17:31)標(biāo)簽:轉(zhuǎn)載 分類:linux driver study原文地址:基于高通MSM 8x60的I2C驅(qū)動(dòng)終極講解(9)作者:shangbaogen下面繼續(xù)看咱們的adapter吧,有點(diǎn)枯燥,不過(guò)慢慢看,后面的路還長(zhǎng)著呢,堅(jiān)持哈!下面這個(gè)函數(shù)是用靜態(tài)的bus number來(lái)向系統(tǒng)增加一個(gè)adapter。在kernel中提供了兩個(gè)adapter注冊(cè)接口,分別為i2c_add_adapter()和i2c_add_numbered_adapter().由于在系統(tǒng)中可能存在多個(gè)adapter,因?yàn)閷⒚恳粭lI2C總線對(duì)應(yīng)一個(gè)編號(hào),下文中稱為I2C總線號(hào)。對(duì)于i2c_add_adapter()而言,它使用的是動(dòng)態(tài)總線號(hào),即由系統(tǒng)給其分配一個(gè)總線號(hào),而i2c_add_numbered_adapter()則是自己指定總線號(hào),如果這個(gè)總線號(hào)非法或者是被占用,就會(huì)注冊(cè)失敗。高通的adapter驅(qū)動(dòng)使用了i2c_add_numbered_adapter()注冊(cè),總線號(hào)最初保存在platform_data中。int i2c_add_numbered_adapter(struct i2c_adapter *adap){/* cache中的radix ,它是一種高效的搜索樹,在往idr中插入結(jié)構(gòu)的時(shí)候,首先要調(diào)用idr_pre_get()為它預(yù)留足夠的空閑內(nèi)存,然后再調(diào)用idr_get_new_above()將結(jié)構(gòu)插入idr中,(amp。i2c_adapter_idr, adap, adapnr, amp。id)的參數(shù)的含義,它是將adapter結(jié)構(gòu)插入到i2c_adapter_idr中,存放位置的id必須要大于或者等于adapnr,然后將對(duì)應(yīng)的id號(hào)存放在adapter(adapter)對(duì)這個(gè)adapter進(jìn)行進(jìn)一步注冊(cè).idr_pre_get(amp。i2c_adapter_idr, GFP_KERNEL)status = idr_get_new_above(amp。i2c_adapter_idr, adap, adapnr, amp。id)。/*對(duì)adapter進(jìn)一步注冊(cè)*/status = i2c_register_adapter(adap)。}繼續(xù)往下跟蹤這個(gè)函數(shù):static int i2c_register_adapter(struct i2c_adapter *adap){/*初始化adapter的一些成員變量*/rt_mutex_init(amp。adapbus_lock)。INIT_LIST_HEAD(amp。adapuserspace_clients)。/* Set default timeout to 1 second if not already set */if (adaptimeout == 0)adaptimeout = HZ。/*初始化adapter dev成員,然后注冊(cè)該dev*/dev_set_name(amp。adapdev, i2c%d, adapnr)。adap = amp。i2c_bus_type。adap = amp。i2c_adapter_type。res = device_register(amp。adapdev)。/*掃描屬于該總線的板級(jí)的i2C設(shè)備*/if (adapnr __i2c_first_dynamic_bus_num)i2c_scan_static_board_info(adap)。/*探測(cè)總線上的所有i2c設(shè)備驅(qū)動(dòng),同時(shí)完成client、driver、device、adapter的綁定*/dummy = bus_for_each_drv(amp。i2c_bus_type, NULL, adap, __process_new_adapter)。}這篇就分析到這里,下篇重點(diǎn)分析i2c_scan_static_board_info(adap)。函數(shù),該函數(shù)用到的內(nèi)容在板級(jí)時(shí)進(jìn)行了注冊(cè)。基于高通MSM 8x60的I2C驅(qū)動(dòng)終極講解(10)(20120515 11:44)標(biāo)簽:轉(zhuǎn)載 分類:高通I2C原文地址:基于高通MSM 8x60的I2C驅(qū)動(dòng)終極講解(10)作者:shangbaogen接著上一節(jié)講,板級(jí)i2c設(shè)備的初始化,板級(jí)中的代碼如下:就以馬達(dá)驅(qū)動(dòng)isa1200為例:先把用到的數(shù)據(jù)貼出來(lái)。/*該馬達(dá)的平臺(tái)數(shù)據(jù)*/define PMIC_GPIO_HAP_ENABLE 18 /* PMIC GPIO Number 19 */static struct isa1200_platform_dataisa1200_1_pdata= {.name = vibrator,.power_on = isa1200_power,.dev_setup = isa1200_dev_setup,/*gpio to enable haptic*/.hap_en_gpio = PM8058_GPIO_PM_TO_SYS(PMIC_GPIO_HAP_ENABLE),.max_timeout = 15000,.mode_ctrl = PWM_GEN_MODE,.pwm_fd = {.pwm_div = 256,},.is_erm = false,.smart_en = true,.ext_clk_en = true,.chip_en = 1,}。/*該馬達(dá)的板級(jí)結(jié)構(gòu)*/static struct i2c_board_info msm_isa1200_board_info[] = {{I2C_BOARD_INFO(isa1200_1, 0x901),.platform_data = amp。isa1200_1_pdata,},}。struct i2c_registry {u8 machs。int bus。
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1