高通APQ8074 spi 接口配置

8074 平台含有两个BLSP(BAM Low-Speed Peripheral) , 每一个BLSP含有两个QUP, 每一个QUP可以被配置为I2C, SPI, UART, UIM接口, BLSP是高通对于低速接口的一种管理方式。

每个QUP是和特定的引脚相关的, 如下图所示,比如下面的引脚是属于BLSP8的, 也就是第二个BLSP的第二个QUP,

注意这些引脚只能被配置到第二个BLSP的第2个QUP上,可以通过继续查看高通相关资料

QUP的中断相关信息

得到这些信息后,如果只是要将SPI配置成FIFO模式,而不是BAM模式,需要修改如下文件

diff --git a/arch/arm/boot/dts/msm8974.dtsi b/arch/arm/boot/dts/msm8974.dtsi
index 4178acf..649aa87 100644
--- a/arch/arm/boot/dts/msm8974.dtsi
+++ b/arch/arm/boot/dts/msm8974.dtsi
@@ -20,6 +20,7 @@
        aliases {
                spi0 = &spi_0;
                spi7 = &spi_7;
+               spi8 = &spi_8;
                sdhc1 = &sdhc_1; /* SDC1 eMMC slot */
                sdhc2 = &sdhc_2; /* SDC2 SD card slot */
                sdhc3 = &sdhc_3; /* SDC3 SDIO slot */
@@ -888,6 +889,27 @@
                qcom,master-id = <86>;
        };
 
+       spi_8: spi@f9964000 {
+               compatible = "qcom,spi-qup-v2";
+               reg = <0xf9964000 0x1000>;
+               interrupts = <0 102 0>;
+               spi-max-frequency = <19200000>;
+               #address-cells = <1>;
+               #size-cells = <0>;
+               qcom,gpio-clk  = <&msmgpio 48 0>; /* CLK */
+               qcom,gpio-miso = <&msmgpio 46 0>; /* MISO */
+               qcom,gpio-mosi = <&msmgpio 45 0>; /* MOSI */
+               qcom,gpio-cs0 = <&msmgpio 47 0>;
+
+               qcom,master-id = <84>;
+
+               spidev@0 { //Slave driver and CS ID
+                       compatible = "qcom,spi_name"; //Manufacture, and Mode
+                       reg = <0>; //Same as CS ID
+                       spi-max-frequency = <3200000>; //Max Frequency for Device
+               };
+       };
+
        qcom,clock-krait@f9016000 {
                compatible = "qcom,clock-krait-8974";
                reg = <0xf9016000 0x20>,

/*使能 spi驱动, 可以修改spidev.c的 compatible 把名字修改为device tree相同的名字,之后kernel会挂在这个设备到spi总线,dev目录下将会出现spidev8.0的设备节点*/

diff --git a/arch/arm/configs/msm8974_defconfig b/arch/arm/configs/msm8974_defconfig
index a12538a..74c51e6 100755
--- a/arch/arm/configs/msm8974_defconfig
+++ b/arch/arm/configs/msm8974_defconfig
@@ -315,7 +315,7 @@ CONFIG_I2C_CHARDEV=y
 CONFIG_I2C_QUP=y
 CONFIG_SPI=y
 CONFIG_SPI_QUP=y
-CONFIG_SPI_SPIDEV=m
+CONFIG_SPI_SPIDEV=y
 CONFIG_SPMI=y
 CONFIG_SPMI_MSM_PMIC_ARB=y
 CONFIG_MSM_QPNP_INT=y

修改gpio SPI属性,注意GPIO的function不要和已经注册的function 冲突

diff --git a/arch/arm/mach-msm/board-8974-gpiomux.c b/arch/arm/mach-msm/board-8974-gpiomux.c
index cec1a8f..6d67f18 100755
--- a/arch/arm/mach-msm/board-8974-gpiomux.c
+++ b/arch/arm/mach-msm/board-8974-gpiomux.c
@@ -683,6 +683,35 @@ static struct msm_gpiomux_config msm_blsp_configs[] __initdata = {
                        [GPIOMUX_SUSPENDED] = &gpio_suspend_config[0],
                },
        },
+
+       {
+               .gpio = 45,      /* BLSP2 QUP1 SPI_DATA_MOSI */
+               .settings = {
+                       [GPIOMUX_ACTIVE] = &gpio_spi_config,
+                       [GPIOMUX_SUSPENDED] = &gpio_suspend_config[1],
+               },
+       },
+       {
+               .gpio = 46,      /* BLSP2 QUP1 SPI_DATA_MISO */
+               .settings = {
+                       [GPIOMUX_ACTIVE] = &gpio_spi_config,
+                       [GPIOMUX_SUSPENDED] = &gpio_suspend_config[1],
+               },
+       },
+       {
+               .gpio = 48,      /* BLSP2 QUP1 SPI_CLK */
+               .settings = {
+                       [GPIOMUX_ACTIVE] = &gpio_spi_config,
+                       [GPIOMUX_SUSPENDED] = &gpio_suspend_config[0],
+               },
+       },
+       {
+               .gpio = 47,      /* BLSP2 QUP1 SPI_CS0_N */
+               .settings = {
+                       [GPIOMUX_ACTIVE] = &gpio_spi_config,
+                       [GPIOMUX_SUSPENDED] = &gpio_suspend_config[0],
+               },
+       },
 };

diff --git a/arch/arm/mach-msm/clock-8974.c b/arch/arm/mach-msm/clock-8974.c
index 128a363..adff33a 100755
--- a/arch/arm/mach-msm/clock-8974.c
+++ b/arch/arm/mach-msm/clock-8974.c
@@ -4967,7 +4967,8 @@ static struct clk_lookup msm_clocks_8974_common[] __initdata = {
        CLK_LOOKUP("core_clk", gcc_blsp2_qup1_i2c_apps_clk.c, ""),
        CLK_LOOKUP("core_clk", gcc_blsp2_qup1_spi_apps_clk.c, ""),
        CLK_LOOKUP("core_clk", gcc_blsp2_qup2_i2c_apps_clk.c, ""),
-       CLK_LOOKUP("core_clk", gcc_blsp2_qup2_spi_apps_clk.c, ""),
+       CLK_LOOKUP("iface_clk", gcc_blsp2_ahb_clk.c, "f9964000.spi"),
+       CLK_LOOKUP("core_clk", gcc_blsp2_qup2_spi_apps_clk.c, "f9964000.spi"),
        CLK_LOOKUP("core_clk", gcc_blsp2_qup3_i2c_apps_clk.c, ""),
        CLK_LOOKUP("core_clk", gcc_blsp2_qup3_spi_apps_clk.c, ""),
        CLK_LOOKUP("core_clk", gcc_blsp2_qup4_i2c_apps_clk.c, ""),

最后注意下使能的spidev.c设备驱动,这个驱动也需要修改spi_qsd.c 保存实际传输数据长度的actual_lenght字段不会被赋值,需要对spidev.c文件进行少许的修改

diff --git a/drivers/spi/spidev.c b/drivers/spi/spidev.c
index aaf0265..efb7d07 100644
--- a/drivers/spi/spidev.c
+++ b/drivers/spi/spidev.c

@@ -198,14 +204,14 @@ spidev_read(struct file *filp, char __user *buf, size_t count, loff_t *f_pos)
 
        mutex_lock(&spidev->buf_lock);
        status = spidev_sync_read(spidev, count);
-       if (status > 0) {
+       if (status >= 0) {
                unsigned long   missing;
 
-               missing = copy_to_user(buf, spidev->buffer, status);
-               if (missing == status)
+               missing = copy_to_user(buf, spidev->buffer, count);
+               if (missing == count)
                        status = -EFAULT;
                else
-                       status = status - missing;
+                       status = count - missing;
        }
        mutex_unlock(&spidev->buf_lock);

之后可以通过打开dev/spidev8.0文件进行SPI设备的读写测试,需要注意的是,如果你用dragonboard, 需要注意一下电平转换芯片的电压,一定要在PMIC中时能对应的电压。

高通APQ8074 spi 接口配置的更多相关文章

  1. 【转】高通平台android 环境配置编译及开发经验总结

    原文网址:http://blog.csdn.net/dongwuming/article/details/12784535 1.高通平台android开发总结 1.1 搭建高通平台环境开发环境 在高通 ...

  2. 高通调试 SPI 屏的 bug

    1. spi调试问题: 问题描述: spi屏幕lk启动的时候正常出现小企鹅,到kernel启动的过程黑屏并且花屏才到开机动画: 2. 黑屏的三个阶段: 参照:黑屏分析 分析开机过程黑屏,首先需要定位黑 ...

  3. 高通spi 屏幕 -lk代码分析

    lk SPI驱动 1. 初始化时钟 在lk中,我们是从kmain开始执行下来的,而执行顺序则是先初始化时钟,也就是在platform_early_init函数中开始执行的: 在这里我们需要修改这个函数 ...

  4. 最新内核3.4)Linux 设备树加载I2C client adapter 的流程(内核3.4 高通)【转】

    转自:https://blog.csdn.net/lsn946803746/article/details/52515225 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转 ...

  5. STC8A8K64S4A12通过SPI接口操作基于ST7920的LCD12864液晶模块

    文章地址:https://www.cnblogs.com/jqdy/p/12665430.html 1. 硬件连接 1.1 64引脚的STC8A8K64S4A12 使用的是最小核心板,所以引脚皆引出可 ...

  6. [转帖]高通推出八核笔电处理器骁龙8cx 能超英特尔吗?

    高通推出八核笔电处理器骁龙8cx 能超英特尔吗? https://baijiahao.baidu.com/s?id=1619154699684981202&wfr=spider&for ...

  7. 嵌入式物联网之SPI接口原理与配置

    本实验采用W25Q64芯片 W25Q64是华邦公司推出的大容量SPI FLASH产品,其容量为64Mb.该25Q系列的器件在灵活性和性能方面远远超过普通的串行闪存器件.W25Q64将8M字节的容量分为 ...

  8. 高通平台 lcd driver 调试小结

    一.概述 1.1 简介 本文档主要包括LCD模块的驱动流程分析.Framebuffer相关知识.Gralloc等相关内容,以及LCD调试的一些经验和相关bug的分析和讲解. 1.2  开发环境 And ...

  9. Linux加载DTS设备节点的过程(以高通8974平台为例)

    DTS是Device Tree Source的缩写,用来描述设备的硬件细节.在过去的ARM Linux中,arch/arm/plat-xxx和arch/arm/mach-xxx中充斥着大量的垃圾代码, ...

随机推荐

  1. JSON讲解和“弹窗”

    json定义形式{key1:value1, key2:value2, key3:value3.....} 例: title>JSON讲解</title> <script src ...

  2. 几款python集成开发环境

    以下软件的测试环境为ArchLinux64位系统.对软件的介绍很粗略,详细介绍参考官网. 1-名称:eric 官网:http://eric-ide.python-projects.org/ 特点:该软 ...

  3. opencv载入,显示及保存图像

    1.声明一个表示图像的变量,在OpenCV2中,这个变量是cv::Mat类型,该类是用于保存图像以及其他矩阵数据的数据结构.默认情况下它们的尺寸为0. cv::Mat  image;       // ...

  4. js 点击按钮显示下拉菜单

    <li> <a id = "rank" onclick="showGroup()"></a></li><l ...

  5. 【python cookbook】【数据结构与算法】14.对不原生支持比较操作的对象排序

    问题:想在同一个类的实例之间做排序,但是它们并不原生支持比较操作. 解决方案:使用内建的sorted()函数可接受一个用来传递可调用对象的参数key,sorted利用该可调用对象返回的待排序对象中的某 ...

  6. CSS选择器无法找到td

    .table >  tr > td  <----这样无法找到td 因为table在浏览器下会自动生成tbody,这样即可 .table > tbody > tr > ...

  7. Hibernate,JPA注解@Version

    Hibernate实现悲观锁和乐观锁. 1,悲观锁 用例代码如下: 数据库DDL语句: hibernate.cfg.xml java类 以上代码(除下面的main之外)同乐观锁. main packa ...

  8. Hive与数据库的异同

    一.Hive简介 Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行.其优点是学习 ...

  9. 浏览器的不兼容,归纳几点html编码要素

    1.文字本身的大小不兼容.同样是font-size:14px的宋体文字,在不同浏览器下占的空间是不一样的,ie下实际占高16px,下留白3px,ff下实际占高17px,上留白1px,下留白3px,op ...

  10. Linux下Date命令的用法

    转自http://blog.chinaunix.net/uid-8223172-id-2511672.html linux下date的用法比较复杂,但是也用的比较多,尤其是shell里面.现总结一下自 ...