QCOM 8976 porting SPI device
生活随笔
收集整理的這篇文章主要介紹了
QCOM 8976 porting SPI device
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
最近porting一個fingerprint的spi設備到板子上,看了一下線路圖,gpio8-gpio11,查了一下80-NM328里的p26說gpio8,9是BLSP 3
但是再看SP80-NU154-6SC發現沒有BLSP 3的address,所以重新看HW給的gpio.exl,發現HW把BLSP 1的QUP 3非常像,于是就試一試
地址是0x78B7000
首先得新建一個SPI bus
@@ -51,6 +51,7 @@
? ? ? ? ? ? ? ? sdhc1 = &sdhc_1; /* SDC1 eMMC slot */
? ? ? ? ? ? ? ? sdhc2 = &sdhc_2; /* SDC2 SD card slot */
? ? ? ? ? ? ? ? spi0 = &spi_0;
+ ? ? ? ? ? ? ? ?spi2 = &spi_2;/*matthew_xuan*/
? ? ? ? };
?
? ? ? ? memory {
@@ -2041,6 +2042,31 @@
? ? ? ? ? ? ? ? qcom,master-id = <86>;
? ? ? ? };
?
+
+ ? ? ? spi_2: spi@0x78B7000 { /* BLSP1 QUP3 matthew_xuan*/
+ ? ? ? ? ? ? ? compatible = "qcom,spi-qup-v2";
+ ? ? ? ? ? ? ? reg-names = "spi_physical", "spi_bam_physical";
+ ? ? ? ? ? ? ? reg = <0x78B7000 0x600>,
+ ? ? ? ? ? ? ? ? ? ? <0x7886000 0x1f000>;
+ ? ? ? ? ? ? ? interrupt-names = "spi_irq", "spi_bam_irq";
+ ? ? ? ? ? ? ? interrupts = <0 97 0>, <0 240 0>; ?//SP80-NU154-6SC里define
+ ? ? ? ? ? ? ? spi-max-frequency = <19200000>;
+ ? ? ? ? ? ? ? pinctrl-names = "spi_default", "spi_sleep";
+ ? ? ? ? ? ? ? pinctrl-0 = <&spi2_default &spi2_cs2_active>; //自己到msm8976-pinctrl.dtsi加
+ ? ? ? ? ? ? ? pinctrl-1 = <&spi2_sleep &spi2_cs2_sleep>; ?//自己到msm8976-pinctrl.dtsi加
+ ? ? ? ? ? ? ? clocks = <&clock_gcc clk_gcc_blsp1_ahb_clk>,?
+ ? ? ? ? ? ? ? ? ? ? ? ?<&clock_gcc clk_gcc_blsp1_qup3_spi_apps_clk>; //到80-NU767-1的P84里的表格里看
+ ? ? ? ? ? ? ? clock-names = "iface_clk", "core_clk";
+ ? ? ? ? ? ? ? qcom,infinite-mode = <0>;
+ ? ? ? ? ? ? ? qcom,use-bam;
+ ? ? ? ? ? ? ? qcom,use-pinctrl;
+ ? ? ? ? ? ? ? qcom,ver-reg-exists;
+ ? ? ? ? ? ? ? qcom,bam-consumer-pipe-index = <8>;//到80-NU767-1的P84里的表格里看
+ ? ? ? ? ? ? ? qcom,bam-producer-pipe-index = <9>;
+ ? ? ? ? ? ? ? qcom,master-id = <86>;
+ ? ? ? };
+
定義那些gpio
?/*matthew_xuan*/
+ ? ? ? ? ? ? spi2_active {
+ ? ? ? ? ? ? ? ? ? ? ? /* MOSI, MISO, CLK */
+ ? ? ? ? ? ? ? ? ? ? ? qcom,pins = <&gp 8>, <&gp 9>, <&gp 11>;
+ ? ? ? ? ? ? ? ? ? ? ? qcom,num-grp-pins = <3>;
+ ? ? ? ? ? ? ? ? ? ? ? qcom,pin-func = <1>;
+ ? ? ? ? ? ? ? ? ? ? ? label = "spi2-active";
+ ? ? ? ? ? ? ? ? ? ? ? /* active state */
+ ? ? ? ? ? ? ? ? ? ? ? spi2_default: spi2_default {
+ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? drive-strength = <12>; /* 12 MA */
+ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? bias-disable = <0>; /* No PULL */
+ ? ? ? ? ? ? ? ? ? ? ? };
+ ? ? ? ? ? ? ? };
+
+ ? ? ? ? ? ? ? spi2_suspend {
+ ? ? ? ? ? ? ? ? ? ? ? /* MOSI, MISO, CLK */
+ ? ? ? ? ? ? ? ? ? ? ? qcom,pins = <&gp 8>, <&gp 9>, <&gp 11>;
+ ? ? ? ? ? ? ? ? ? ? ? qcom,num-grp-pins = <3>;
+ ? ? ? ? ? ? ? ? ? ? ? qcom,pin-func = <0>;
+ ? ? ? ? ? ? ? ? ? ? ? label = "spi2-suspend";
+ ? ? ? ? ? ? ? ? ? ? ? /* suspended state */
+ ? ? ? ? ? ? ? ? ? ? ? spi2_sleep: spi2_sleep {
+ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? drive-strength = <2>; /* 2 MA */
+ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? bias-pull-down; /* PULL Down */
+ ? ? ? ? ? ? ? ? ? ? ? };
+ ? ? ? ? ? ? ? };
+
+ ? ? ? ? ? ? ? spi2_cs0_active {
+ ? ? ? ? ? ? ? ? ? ? ? /* CS */
+ ? ? ? ? ? ? ? ? ? ? ? qcom,pins = <&gp 10>;
+ ? ? ? ? ? ? ? ? ? ? ? qcom,num-grp-pins = <1>;
+ ? ? ? ? ? ? ? ? ? ? ? qcom,pin-func = <1>;
+ ? ? ? ? ? ? ? ? ? ? ? label = "spi2-cs2-active";
+ ? ? ? ? ? ? ? ? ? ? ? spi2_cs2_active: cs2_active {
+ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? drive-strength = <2>;
+ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? bias-disable = <0>;
+ ? ? ? ? ? ? ? ? ? ? ? };
+ ? ? ? ? ? ? ? };
+
+ ? ? ? ? ? ? ? spi2_cs0_suspend {
+ ? ? ? ? ? ? ? ? ? ? ? /* CS */
+ ? ? ? ? ? ? ? ? ? ? ? qcom,pins = <&gp 10>;
+ ? ? ? ? ? ? ? ? ? ? ? qcom,num-grp-pins = <1>;
+ ? ? ? ? ? ? ? ? ? ? ? qcom,pin-func = <0>;
+ ? ? ? ? ? ? ? ? ? ? ? label = "spi2-cs2-suspend";
+ ? ? ? ? ? ? ? ? ? ? ? spi2_cs2_sleep: cs2_sleep {
+ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? drive-strength = <2>;
+ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? bias-disable = <0>;
+ ? ? ? ? ? ? ? ? ? ? ? };
+ ? ? ? ? ? ? ? };
+ ? ? ? ? ? ? ?/*matthew_xuan*/
+
+然后把device加進去
+&spi_2 { /* BLSP1 QUP3 */
+ ? ? ? validity@0 {
+ ? ? ? ? ? ? ? compatible = "validity,metallica";
+ ? ? ? ? ? ? ? reg = <0>;
+ ? ? ? ? ? ? ? interrupt-parent = <&msmgpio>;
+ ? ? ? ? ? ? ? ?interrupts = <106 0x8>;
+ ? ? ? ? ? ? ? ?spi-max-frequency = <4800000>;
+ ? ? ? ? ? ? ? ?rst-gpio = <&msmgpio 138 0>;
+ ? ? ? ? ? ? ? vdd-io-supply = <&pm8950_l6>;
+ ? ? ? ? ? ? ? /*vdd-phy-supply = <&pm8226_lvs1>;*/
+ ? ? ? ? ? ? ??
+ ? ? ? ? ? ? ??
+ ? ? ? };
但是再看SP80-NU154-6SC發現沒有BLSP 3的address,所以重新看HW給的gpio.exl,發現HW把BLSP 1的QUP 3非常像,于是就試一試
地址是0x78B7000
首先得新建一個SPI bus
@@ -51,6 +51,7 @@
? ? ? ? ? ? ? ? sdhc1 = &sdhc_1; /* SDC1 eMMC slot */
? ? ? ? ? ? ? ? sdhc2 = &sdhc_2; /* SDC2 SD card slot */
? ? ? ? ? ? ? ? spi0 = &spi_0;
+ ? ? ? ? ? ? ? ?spi2 = &spi_2;/*matthew_xuan*/
? ? ? ? };
?
? ? ? ? memory {
@@ -2041,6 +2042,31 @@
? ? ? ? ? ? ? ? qcom,master-id = <86>;
? ? ? ? };
?
+
+ ? ? ? spi_2: spi@0x78B7000 { /* BLSP1 QUP3 matthew_xuan*/
+ ? ? ? ? ? ? ? compatible = "qcom,spi-qup-v2";
+ ? ? ? ? ? ? ? reg-names = "spi_physical", "spi_bam_physical";
+ ? ? ? ? ? ? ? reg = <0x78B7000 0x600>,
+ ? ? ? ? ? ? ? ? ? ? <0x7886000 0x1f000>;
+ ? ? ? ? ? ? ? interrupt-names = "spi_irq", "spi_bam_irq";
+ ? ? ? ? ? ? ? interrupts = <0 97 0>, <0 240 0>; ?//SP80-NU154-6SC里define
+ ? ? ? ? ? ? ? spi-max-frequency = <19200000>;
+ ? ? ? ? ? ? ? pinctrl-names = "spi_default", "spi_sleep";
+ ? ? ? ? ? ? ? pinctrl-0 = <&spi2_default &spi2_cs2_active>; //自己到msm8976-pinctrl.dtsi加
+ ? ? ? ? ? ? ? pinctrl-1 = <&spi2_sleep &spi2_cs2_sleep>; ?//自己到msm8976-pinctrl.dtsi加
+ ? ? ? ? ? ? ? clocks = <&clock_gcc clk_gcc_blsp1_ahb_clk>,?
+ ? ? ? ? ? ? ? ? ? ? ? ?<&clock_gcc clk_gcc_blsp1_qup3_spi_apps_clk>; //到80-NU767-1的P84里的表格里看
+ ? ? ? ? ? ? ? clock-names = "iface_clk", "core_clk";
+ ? ? ? ? ? ? ? qcom,infinite-mode = <0>;
+ ? ? ? ? ? ? ? qcom,use-bam;
+ ? ? ? ? ? ? ? qcom,use-pinctrl;
+ ? ? ? ? ? ? ? qcom,ver-reg-exists;
+ ? ? ? ? ? ? ? qcom,bam-consumer-pipe-index = <8>;//到80-NU767-1的P84里的表格里看
+ ? ? ? ? ? ? ? qcom,bam-producer-pipe-index = <9>;
+ ? ? ? ? ? ? ? qcom,master-id = <86>;
+ ? ? ? };
+
定義那些gpio
?/*matthew_xuan*/
+ ? ? ? ? ? ? spi2_active {
+ ? ? ? ? ? ? ? ? ? ? ? /* MOSI, MISO, CLK */
+ ? ? ? ? ? ? ? ? ? ? ? qcom,pins = <&gp 8>, <&gp 9>, <&gp 11>;
+ ? ? ? ? ? ? ? ? ? ? ? qcom,num-grp-pins = <3>;
+ ? ? ? ? ? ? ? ? ? ? ? qcom,pin-func = <1>;
+ ? ? ? ? ? ? ? ? ? ? ? label = "spi2-active";
+ ? ? ? ? ? ? ? ? ? ? ? /* active state */
+ ? ? ? ? ? ? ? ? ? ? ? spi2_default: spi2_default {
+ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? drive-strength = <12>; /* 12 MA */
+ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? bias-disable = <0>; /* No PULL */
+ ? ? ? ? ? ? ? ? ? ? ? };
+ ? ? ? ? ? ? ? };
+
+ ? ? ? ? ? ? ? spi2_suspend {
+ ? ? ? ? ? ? ? ? ? ? ? /* MOSI, MISO, CLK */
+ ? ? ? ? ? ? ? ? ? ? ? qcom,pins = <&gp 8>, <&gp 9>, <&gp 11>;
+ ? ? ? ? ? ? ? ? ? ? ? qcom,num-grp-pins = <3>;
+ ? ? ? ? ? ? ? ? ? ? ? qcom,pin-func = <0>;
+ ? ? ? ? ? ? ? ? ? ? ? label = "spi2-suspend";
+ ? ? ? ? ? ? ? ? ? ? ? /* suspended state */
+ ? ? ? ? ? ? ? ? ? ? ? spi2_sleep: spi2_sleep {
+ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? drive-strength = <2>; /* 2 MA */
+ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? bias-pull-down; /* PULL Down */
+ ? ? ? ? ? ? ? ? ? ? ? };
+ ? ? ? ? ? ? ? };
+
+ ? ? ? ? ? ? ? spi2_cs0_active {
+ ? ? ? ? ? ? ? ? ? ? ? /* CS */
+ ? ? ? ? ? ? ? ? ? ? ? qcom,pins = <&gp 10>;
+ ? ? ? ? ? ? ? ? ? ? ? qcom,num-grp-pins = <1>;
+ ? ? ? ? ? ? ? ? ? ? ? qcom,pin-func = <1>;
+ ? ? ? ? ? ? ? ? ? ? ? label = "spi2-cs2-active";
+ ? ? ? ? ? ? ? ? ? ? ? spi2_cs2_active: cs2_active {
+ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? drive-strength = <2>;
+ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? bias-disable = <0>;
+ ? ? ? ? ? ? ? ? ? ? ? };
+ ? ? ? ? ? ? ? };
+
+ ? ? ? ? ? ? ? spi2_cs0_suspend {
+ ? ? ? ? ? ? ? ? ? ? ? /* CS */
+ ? ? ? ? ? ? ? ? ? ? ? qcom,pins = <&gp 10>;
+ ? ? ? ? ? ? ? ? ? ? ? qcom,num-grp-pins = <1>;
+ ? ? ? ? ? ? ? ? ? ? ? qcom,pin-func = <0>;
+ ? ? ? ? ? ? ? ? ? ? ? label = "spi2-cs2-suspend";
+ ? ? ? ? ? ? ? ? ? ? ? spi2_cs2_sleep: cs2_sleep {
+ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? drive-strength = <2>;
+ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? bias-disable = <0>;
+ ? ? ? ? ? ? ? ? ? ? ? };
+ ? ? ? ? ? ? ? };
+ ? ? ? ? ? ? ?/*matthew_xuan*/
+
+然后把device加進去
+&spi_2 { /* BLSP1 QUP3 */
+ ? ? ? validity@0 {
+ ? ? ? ? ? ? ? compatible = "validity,metallica";
+ ? ? ? ? ? ? ? reg = <0>;
+ ? ? ? ? ? ? ? interrupt-parent = <&msmgpio>;
+ ? ? ? ? ? ? ? ?interrupts = <106 0x8>;
+ ? ? ? ? ? ? ? ?spi-max-frequency = <4800000>;
+ ? ? ? ? ? ? ? ?rst-gpio = <&msmgpio 138 0>;
+ ? ? ? ? ? ? ? vdd-io-supply = <&pm8950_l6>;
+ ? ? ? ? ? ? ? /*vdd-phy-supply = <&pm8226_lvs1>;*/
+ ? ? ? ? ? ? ??
+ ? ? ? ? ? ? ??
+ ? ? ? };
+};
上面所有的spec都在我的下載里,歡迎下載
總結
以上是生活随笔為你收集整理的QCOM 8976 porting SPI device的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 百度地图 sdk 使用小结(行动轨迹)
- 下一篇: python按字母顺序排列_在pytho