linux裝置樹中pinctrl的配置(下)
阿新 • • 發佈:2019-01-03
上一篇記錄了裝置樹檔案中管腳普通配置的查詢與確定,這篇介紹一下特殊的配置。
首先還是先看程式碼,看看到底特殊到哪裡。
<span style="font-size:14px;"> pinctrl_gpio_leds: gpioledsgrp { fsl,pins = < MX6QDL_PAD_DISP0_DAT21__GPIO5_IO15 0x80000000 >; }; pinctrl_i2c2: i2c2grp { fsl,pins = < MX6QDL_PAD_EIM_EB2__I2C2_SCL 0x4001b8b1 MX6QDL_PAD_KEY_ROW3__I2C2_SDA 0x4001b8b1 >; };</span>
可以看出來特殊的配置就是後面的值也就是上一篇講的config(pad_ctrl)的值改變了,變為0x80000000和0x4001b8b1了,當我們查詢相應的pad值時是這樣的:
這明顯不和常理,在上圖中顯示高15位全部置0,取值也沒啥用,那麼為什麼設定為0x80000000和0x4001b8b1呢?在網上搜羅一番沒有任何有幫助的文件,只能靠自己了。還是老思路,查詢裝置樹檔案的讀取原始碼,linux-3.18.22/drivers/pinctrl/freescale/pinctrl-imx.c中,找到了驚喜!!!程式碼如下
再將IMX_NO_PAD_CTL使用部分的程式碼貼上(隨便找一處)<span style="font-size:14px;">/* The bits in CONFIG cell defined in binding doc*/ #define IMX_NO_PAD_CTL 0x80000000 /* no pin config need */ #define IMX_PAD_SION 0x40000000 /* set SION */</span>
可以看出來確實如註釋(/* no pin config need */)所述,表示該管腳的配置config(pad_ctrl)無效,或者說不需要。<span style="font-size:14px;"> for (i = j = 0; i < grp->npins; i++) { if (!(grp->pins[i].config & IMX_NO_PAD_CTL)) { new_map[j].type = PIN_MAP_TYPE_CONFIGS_PIN; new_map[j].data.configs.group_or_pin = pin_get_name(pctldev, grp->pins[i].pin); new_map[j].data.configs.configs = &grp->pins[i].config; new_map[j].data.configs.num_configs = 1; j++; } }</span>
同理0x40000000表示設定了SION。但是0x4001b8b1表示什麼意思呢,從上一個註釋(/* The bits in CONFIG cell defined in binding doc*/)可以找到方向,即取binding doc中找,所以開啟linux-3.18.22/Documentation/devicetree/bindings/pinctrl目錄下的fsl,imx6dl-pinctrl.txt檔案,裡面有關於SION的介紹,如下:
再從晶片的參考手冊中查閱可知,SION就相當於一個標誌為(第30位),去掉這一位後config=0x1b8b1,這個值就是從pad_ctrl一節找到的,具體可以參見上一篇關於第6個引數的確定方法。