本文转载自:https://blog.csdn.net/u011212816/article/details/80828625

RF driver主要设计到的器件

1、Transceiver

2、RFFE(RF Front End)

(1)PA

(2)ASM

(3)PAPM

其中Transceiver基本是以高通参考设计采用的芯片为主,为WTRXXX系列,但是RFFE由于成本问题,往往不采用参考设计中的芯片,RFFE这边只讨论PA 和ASM,一般分为MiPi 和GRFC

MIPI 设备通过寄存器配置PA以及ASM,GRFC则是通过GPIO配置。

这里涉及的代码为MDM9607芯片的Jolokia版本
关于RFC 涉及到的代码目录有

1、modem_proc/rfc_jolokia//核心目录,存放参考设计的RF driver ,我们自己添加的也在这里

2、modem_proc/rfcdevice_pa//存放MIPI pa 设备

3、modem_proc/rfcdevice_asm//存放MIPI asm 设备

4、modem_proc/rfctarget_jolokia//存放RF硬件部分的nv

5、modem_proc/rfcnv//存放modem版本下定义nv项的文件nvdefintion.xml

如何添加一个新的MIPI pa 芯片

如果RF前端采用了一款新的MIPI 的pa,需要在modem_proc/rfcdevice_pa新建一个PA设备,在添加之前我们需要查看pa的datasheet,主要有两部分需要着重查看:端口结构图,寄存器,以sky77638为例,这款芯片复用了PA 以及ASM

结构图

该器件的输入端口主要有RFIN_HB,RFIN_MB,RFIN_LB,RFIN_VLB,输出端口有HB1、HB2、HB3、MB1、MB2、MB3、MB4、LB1、LB2、LB3、LB4、LB5

ASM部分包括HBRX1和HBRX2。

寄存器

寄存器表比较重要的有:0x00 0x02 0x1d 0x1e 0x1f

0X00:输出端口,输入端口,以及PA模式

0X02 ASM的端口

0X1D 0X1E 0X1F pid mid

看完datasheet,我们需要修改目录下modem_proc/rfcdevice_pa/src

1. Create the rfdevice_pa_XXX_data_ag.h.复制已有的文件,修改类的名称

2. Create the rfdevice_pa_XXX_data_ag.cpp

填加PA_SET_BIAS_REG/DATA

填加PA_set_range_REG/DATA

填加 PA_ON_REG/DATA

填加PA_OFF_REG/DATA

填加 PA_TRIGGER/DATA

填写PID MIDPRO_REV

#define RFDEVICE_PA_SKY_XXX_NUM_PORTS 16//查看reg0x00中port口为16(0000-1111)
#define RFDEVICE_PA_SKY_XXX_PA_SET_BIAS_NUM_REGS 2//reg中有primary bias 和 second bias 在0x01 和0x03,前面没有列出来
static uint8 rfdevice_pa_sky_XXX_pa_set_bias_regs[RFDEVICE_PA_SKY_XXX_PA_SET_BIAS_NUM_REGS] =  {0x01, 0x03};寄存器
static int16 rfdevice_pa_sky_XXX_pa_set_bias_data[RFDEVICE_PA_SKY_XXX_NUM_PORTS][4][RFDEVICE_PA_SKY_XXX_PA_SET_BIAS_NUM_REGS] =
{
......具体值没有通用性
};
#define RFDEVICE_PA_SKY_XXX_PA_SET_RANGE_NUM_REGS 1//pa range
static uint8 rfdevice_pa_sky_XXX_pa_set_range_regs[RFDEVICE_PA_SKY_XXXX_PA_SET_RANGE_NUM_REGS] =  {0x00, };
static int16 rfdevice_pa_sky_XXX_pa_set_range_data[RFDEVICE_PA_SKY_XXXX_NUM_PORTS][4][RFDEVICE_PA_SKY_XXX_PA_SET_RANGE_NUM_REGS] =
{
  { /* PORT NUM: 0 *//* PA's Disable */
    { 0x00, },  /* PA Range: 0 */HPM
    { 0x00, },  /* PA Range: 1 */LPM
    { 0x00, },  /* PA Range: 2 */LPM
    { 0x00, },  /* PA Range: 3 */LPM
  },
.......
};
#define RFDEVICE_PA_SKY_XXX_PA_ON_NUM_REGS 1//一般不设置
static uint8 rfdevice_pa_sky_XXX_pa_on_regs[RFDEVICE_PA_SKY_XXX_PA_ON_NUM_REGS] =  {RFFE_INVALID_REG_ADDR /*Warning: Not Specified*/, };
static int16 rfdevice_pa_sky_XXX_pa_on_data[RFDEVICE_PA_SKY_XXX_NUM_PORTS][RFDEVICE_PA_SKY_XXXPA_ON_NUM_REGS] =
{
  { /* PORT NUM: 0 */
    RF_REG_INVALID,
  },
  .....
};
#define RFDEVICE_PA_SKY_XXX_PA_OFF_NUM_REGS 1
static uint8 rfdevice_pa_sky_XXX_pa_off_regs[RFDEVICE_PA_SKY_XXX_PA_OFF_NUM_REGS] =  {0x00, };
static int16 rfdevice_pa_sky_XXX_pa_off_data[RFDEVICE_PA_SKY_XXX_NUM_PORTS][RFDEVICE_PA_SKY_XXX_PA_OFF_NUM_REGS] =
{
  { /* PORT NUM: 0 */
    0x02, //需要将PA disable PA 改为LOW POWER,所以0X00寄存器设置为2

},
.........
};
#define RFDEVICE_PA_SKY_XXX_PA_TRIGGER_NUM_REGS 1
static uint8 rfdevice_pa_sky_XXX_pa_trigger_regs[RFDEVICE_PA_SKY_XXX_PA_TRIGGER_NUM_REGS] =  {0x1C, };
static int16 rfdevice_pa_sky_XXX_pa_trigger_data[RFDEVICE_PA_SKY_XXX_NUM_PORTS][RFDEVICE_PA_SKY_XXX_PA_TRIGGER_NUM_REGS] =
{
  { /* PORT NUM: 0 */
    0x07, //默认都打开,所以为7
  },
............
};
boolean rfdevice_pa_sky_XXX_v3_data_ag::device_info_get( rfdevice_pa_info_type *pa_info )
{
  {
    pa_info->mfg_id = 0x01A5;//MID
    pa_info->prd_id = 0x1C;//PID
    pa_info->prd_rev = 2;//自定义
    pa_info->num_ports = RFDEVICE_PA_SKY_XXX_NUM_PORTS;
    pa_info->num_pa_ranges = 4;    
    ret_val = TRUE;

}

对以上的代码PA RANGE的配置,值得一提的是,一般虽然设置为4个range,但是其实用不到,具体参考NV #2029 NV_WCDMA_PA_RANGE_MAP_I ,一般设置为{1,0,0,0},如下图,所以我们在PA RANGE中其实第一个是HPM,后面是LPM

3. Modify the rfdevice_pa_factory.cpp file.

#include"rfdevice_pa_XXX_data_ag.h"     // 添加器件XYZ的头文件
.....
   else if ( mfg_id ==  0x01A5 && prd_id == 0x1C  &&prd_rev == 0)
    {//填加这款PA的mid pid prd_rev
        pa_data = rfdevice_pa_XXX_data_ag::get_instance();

}

如何添加一个新的MIPI asm 芯片

mipi asm 配置比pa简单很多,毕竟只是一个单刀多掷的开关,首先依然查看datasheet

结构图

寄存器
0X00是开关真值表

001D 001E 001F 依然是 pid mid

接下来修改目录下modem_proc/rfcdevice_asm/src

1、Create therfdevice_asm_XXX_data_ag.h //复制已有的文件,修改类的名称

2、Create therfdevice_asm_XXX_data_ag.cpp file

ASM_ON_REG

ASM_OFF_REG

ASM_TRIGGER_REG

填写PID MIDPRO_REV

#define RFDEVICE_ASM_XXX_NUM_PORTS 11//真值表个数

#define RFDEVICE_ASM_XXX_ASM_ON_NUM_REGS 1
static uint8 rfdevice_asm_XXX_asm_on_regs[RFDEVICE_ASM_XXX_ASM_ON_NUM_REGS] =  {0x00, };//寄存器地址
static int16 rfdevice_asm_XXX_asm_on_data[RFDEVICE_ASM_XXX_NUM_PORTS][RFDEVICE_ASM_XXX_ASM_ON_NUM_REGS] =
{
  { /* PORT NUM: 0 *//* Isolation*/
    0x00,
  },
  { /* PORT NUM: 1 *//* TRX1 */查看真值表
    0x02,
  },
  { /* PORT NUM: 2 *//* TRX2 */
    0x0A,
  },
  { /* PORT NUM: 3 *//* TRX3 */
    0x0E,
  },
.....
};

#define RFDEVICE_ASM_XXX_ASM_OFF_NUM_REGS 1
static uint8 rfdevice_asm_XXX_asm_off_regs[RFDEVICE_ASM_XXX_ASM_OFF_NUM_REGS] =  {0x00, };
static int16 rfdevice_asm_XXX_asm_off_data[RFDEVICE_ASM_SXXX_NUM_PORTS][RFDEVICE_ASM_XXX_ASM_OFF_NUM_REGS] =
{
  { /* PORT NUM: 0 */
    0x00, //第一个port为关
  },
  ....
};

#define RFDEVICE_ASM_XXX_ASM_TRIGGER_NUM_REGS 1
static uint8 rfdevice_asm_XXX_asm_trigger_regs[RFDEVICE_ASM_XXX_ASM_TRIGGER_NUM_REGS] =  {0x1C, };//trigger寄存器
static int16 rfdevice_asm_XXX_asm_trigger_data[RFDEVICE_ASM_SXXX_NUM_PORTS][RFDEVICE_ASM_XXX_ASM_TRIGGER_NUM_REGS] =
{
  { /* PORT NUM: 0 */
    0x07, //默认为7
  },
......
};
boolean rfdevice_asm_sky_XXX_data_ag::device_info_get( rfdevice_asm_info_type *asm_info )
{
    asm_info->mfg_id = 0x1A5;//PID
    asm_info->prd_id = 0x45;//MID
    asm_info->prd_rev = 0;
    asm_info->num_ports = RFDEVICE_ASM_XXX_NUM_PORTS;
    ret_val = TRUE;
}

3、Modify the rfdevice_asm_factory.cpp file

#include"rfdevice_asm_XXX_data_ag.h"     // 添加器件XYZ的头文件
.....
   else if ( mfg_id ==  0x01A5 && prd_id == 0x1C  &&prd_rev == 0)
    {//填加这款ASM的mid pid prd_rev
        pa_data = rfdevice_asm_XXX_data_ag::get_instance();

}
https://blog.csdn.net/u011212816/article/details/80828625

高通RFC适配RFFE-添加MIPI设备【转】的更多相关文章

  1. 高通(QCOM)sensor bring up

    高通7150平台 1.添加驱动文件 2.添加编译 3.配置json文件 4.高通默认配置 5.部分sensor外挂电源 6.遇到的问题 1.添加驱动文件 路径:adsp_proc/ssc/sensor ...

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

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

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

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

  4. 高通方案的Android设备几种开机模式的进入与退出

    高通方案的Android设备主要有以下几种开机模式,Android.EDL.Fastboot.Recovery和FFBM,其进入及退出的方式如下表. 开机模式 屏幕显示 冷启动 热启动 按键退出 命令 ...

  5. 高通移植mipi LCD的过程LK代码

    lk部分:(实现LCD兼容) 1. 函数定位 aboot_init()来到target_display_init(): 这就是高通原生lk LCD 兼容的关键所在.至于你需要兼容多少LCD 就在whi ...

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

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

  7. 高通安卓调试LCD几方面总结

    来公司上班现在已经整整一个月了,蔽人不才,能力有限,学习进度缓慢,不过也是有一点点的收获与心得,在这里写出来与大家分享,养成良好的记录习惯也免得后忘记. 不啰嗦了,开入正题.来公司一个月左右的时间,主 ...

  8. Android图形合成和显示系统---基于高通MSM8k MDP4平台

    介绍了Android SurfaceFlinger层次以下的图形合成和显示系统,主要基于高通MSM8k MDP4x平台. 做为Android Display专题.SurfaceFlinger的详细介绍 ...

  9. 高通android开发摘要

    一部分是开源的,可以从codeaurora.org上下载,还有一部分是高通产权的,需要从高通的网站上下载. 将高通产权的代码放到:vendor/qcom/proprietary 1. 设置bms一些参 ...

随机推荐

  1. iOS多线程编程之创建线程安全(转载)

    一.多线程的安全隐患 资源共享 1块资源可能会被多个线程共享,也就是多个线程可能会访问同一块资源 比如多个线程访问同一个对象.同一个变量.同一个文件 当多个线程访问同一块资源时,很容易引发数据错乱和数 ...

  2. 修改机器名、IP对arcgis server、portal的影响?

    修改机器名.IP是否对ArcGIS Server .Portal等有影响? 请教赛姐:修改IP对ArcGIS Server .Portal 无影响,不过建议将ArcGIS Server .Portal ...

  3. 2018/03/31 每日一个Linux命令 之 date

    date 命令主要用于查看和修改时间和时区 -- 这里主要学习基本的查看和设置时间和时区的方法. 直接显示日期 date '+%D' 效果 vagrant@hong:~$ date '+%D' 03/ ...

  4. 滑雪---poj1088(动态规划+记忆化搜索)

    题目链接:http://poj.org/problem?id=1088 有两种方法 一是按数值大小进行排序,然后按从小到大进行dp即可: #include <iostream> #incl ...

  5. struts2 OGNL(Object-Graph Navigation Language) 井号,星号,百分号

    1.“#”主要有三种用途: 访问OGNL上下文和Action上下文,#相当于ActionContext.getContext():可以访问这几个ActionContext中的属性. parameter ...

  6. SQL SERVER分区详解(1-5)

    转自: (五)SQL Server分区自动化案例     (四)SQL Server分区管理     (三)索引分区知识详解     (二)SQL Server分区创建过程     (一)SQL Se ...

  7. mysql 权限管理 grant 命令

    只有root账号可以授权,其他账号不能用grant 授权 mysql> select user(); +----------------+ | user() | +--------------- ...

  8. 解决idea工具下tomcat中文乱码问题

    在运行/调试 配置对话框的Startup/Connection面板中, 勾选Pass environment variables. 并添加一个environment variable, Name填 J ...

  9. mathType插入公式编号,及对公式编号的字体进行修改。调整公式上下间距。

    一:插入 公式编号. 1:首先设置公式格式.点击 mathtype>insert number >format 2:有简单格式和 高级格式:              https://we ...

  10. PAT 1016 Phone Bills[转载]

    1016 Phone Bills (25)(25 分)提问 A long-distance telephone company charges its customers by the followi ...