高通9880芯片点灯

  • 概述
    • OpenWrt点灯套路
    • 9880控制8337端口的led灯
      • 简单介绍
      • QCA9880驱动
      • QCA9880控灯驱动程序
    • 回顾

概述

最近在调试高通9563芯片的GPIO点灯,因为主控芯片GPIO口比较紧缺。所以就把9563出的wan口和lan口的灯交给了9880的GPIO口控制。

OpenWrt点灯套路

Linux内核集成LED模块,很方便就可以完成灯的控制,下面简单回顾下通常GPIO口点灯的几个步骤。

  1. 选中内核gpio点灯驱动,一般驱动名为leds-gpio(/sys/bus/platform/drivers/leds-gpio)。
  2. 如果是MIPS架构需要自己手动注册设备,信息自己携带在gpio_led_platform_data结构体中,同时可注册多个LED设备,最终呈现在sys fs文件系统下(/sys/devices/platform/leds-gpio/leds/LAN1:green:led)。
  3. 以上只是提供一个可操作的设备,具体怎么关联到系统当中,并且随着端口的link状态自动亮灭。这就需要结合LED模块提供的另外一个属性,LED触发模式。这个可以在注册设备时进行配置,也可在系统起来时进行脚本配置(root@mexon:/sys/devices/pci0000:00/0000:00:00.0/leds/LED0# cat trigger
    none [switch0] timer default-on netdev usbport phy0rx phy0tx phy0assoc phy0radio phy0tpt phy1rx phy1tx phy1assoc phy1radio phy1tpt)。
  4. 例如在OpenWrt中,有自动化配置脚本控制LED设备,进行触发模式选择。在openwrt/target/linux/ar71xx/base-files/etc/board.d/01_leds中配置switch芯片出的端口link状态。
    ucidef_set_led_switch “wan” “WAN” “LED3”(注册的led设备) “switch0”(触发器名称)“0x02”(端口掩码)
    此处如果有多个LED设备,可持续配置。

    MPP6600)ucidef_set_led_switch "wan"  "WAN" "LED3" "switch0" "0x02"ucidef_set_led_switch "lan1" "LAN1" "LED2" "switch0" "0x04"ucidef_set_led_switch "lan2" "LAN2" "LED1" "switch0" "0x08"ucidef_set_led_switch "lan3" "LAN3" "LED0" "switch0" "0x10"ucidef_set_led_timer "run" "RUN" "MPP6600:green:run" "1000" "1000"#ucidef_set_led_wlan "wlan2g" "WLAN 2.4 GHz" "MPP6600:green:2G" "phy1tpt"
    

9880控制8337端口的led灯

简单介绍

控制芯片为9563,通过GMAC接口连接高通的8337switch芯片,该芯片可配置单wan口或多wan口,其余均做lan口(软件通过swconfig进行vlan隔离即可)。由于9563上的GPIO口有限,9880又支持可配置的GPIO口。所以我们的8337link就采用9880GPIO口控制方式。

QCA9880驱动

采用开源 ath10k,内核选中即可。

这个地方选中Enable LED support是支持9880wifi状态灯的控制,这个灯是系统默认wifi状态点灯。并且ath10k驱动也仅仅支持这一个GPIO的控制,默认是9880上的GPIO1。接下来就是要在这里做手脚,进行代码改造。

QCA9880控灯驱动程序

  1. ath10k在进行核心初始化时,会注册led设备。
    ath10k_leds_register-默认注册一个wifi灯,此处进行扩展,扩展结构体如下:

    struct {struct gpio_led wifi_led;struct led_classdev cdev;char label[48];u32 gpio_state_pin;} leds[10];
    

    然后循环调用led_classdev_register注册函数,把所需要操作的所有GPIO口都以LED设备的方式注册进去。

  2. 9880GPIO口配置
    使能对应的GPIO口以及配置GPIO口的方向。ath10k_wmi_gpio_config、ath10k_wmi_gpio_output。

  3. 需要关注下,对应的GPIO口是否被占用,有很多芯片GPIO口都是可复用的,芯片复位后有时会作其它功能(比如JTag)。

    /* 使能GPIO口 */
    for(i = 0; i < 5; ++ i)
    {ath10k_wmi_gpio_config(ar, ar->leds[i].wifi_led.gpio, 0,WMI_GPIO_PULL_NONE, WMI_GPIO_INTTYPE_DISABLE);ath10k_wmi_gpio_output(ar, ar->leds[i].wifi_led.gpio, 1);
    }
    /* 关掉GPIO口复用 */
    if(ar->hif.ops != NULL && ar->hif.ops->read32 != NULL)
    {val = ar->hif.ops->read32(ar, GPIO_BASE_ADDRESS + 0xb0);val |= 1;if(ar->hif.ops->write32 != NULL)ar->hif.ops->write32(ar, GPIO_BASE_ADDRESS + 0xb0, val);
    }
    return 0;
    
  4. 在注册设备的时候,会同时传递一个回调函数,做LED灯亮度调整用的。在这个回调函数中,需要重新解析GPIO口,因为之前这个地方仅仅控制一个GPIO口,现在要操作多个GPIO口。这里可以通过设备名称获取GPIO口的端口号。

    /* 只要是解析出当前的GPIO口号,然后去具体设置某个GPIO口 */
    int i = 0;
    if(!strcmp(led_cdev->name, "LED0"))
    {i = 1;
    }
    else if(!strcmp(led_cdev->name, "LED1"))
    {i = 2;
    }
    else if(!strcmp(led_cdev->name, "LED2"))
    {i = 3;
    }
    else if(!strcmp(led_cdev->name, "LED3"))
    {i = 4;
    }
    else
    {i = 0;
    }
    

    最后根据解析出来的端口号,可对GPIO的输出做控制。

    struct ath10k *ar = container_of(led_cdev, struct ath10k,leds[i].cdev);
    struct gpio_led *led = &ar->leds[i].wifi_led;
    ar->leds[i].gpio_state_pin = (brightness != LED_OFF) ^ led->active_low;
    ath10k_wmi_gpio_output(ar, led->gpio, ar->leds[i].gpio_state_pin);
    
  5. 由于OpenWrt编译机制,不能直接修改build_dir下代码,否则clean之后修改部分会丢失。这里有两种方法,一是解压dl下backports大包,修改源码之后再压缩,然后修改 Makefile下的校验码即可,二是打补丁,网上有很多教程,而且方便快捷,无需修改源码。

回顾

该部分内容主要掌握Linux LED设备操作及结合OpenWrt脚本配置即可。其中涉及的知识比较多,但是还是比较浅显,需要自己去深入学习。

高通WLAN芯片点灯方法-QCA9563操控9880GPIO进行点灯相关推荐

  1. “高通”字库芯片的使用方法

    STM32+字库 "高通"字库芯片的使用方法 "高通"字库芯片的使用方法 STM32+字库 前言 一.电路设计 二.程序设计 代码如下: 整体代码部分 1.字库 ...

  2. 高通8155车载芯片_WEY来“摩卡”云首秀,搭载高通8155芯片

    本期亮点  "咖啡"一词源自埃塞俄比亚的一个名叫卡法的古镇,在希腊语中"Kaweh"的意思是"力量与热情",而摩卡咖啡代表着创新和更多可能性 ...

  3. 高通 wlan 调试总结随笔

    高通 wlan 调试总结随笔 1. 进入ftm模式 2. 抓取wifi log 2.1 抓取 Android log 2.1.1 How to enable wifi verbose log? 2.1 ...

  4. 高通MDM9X07_MDM8207_MDM9628 芯片手册使用介绍

    高通MDM9X07_MDM8207_MDM9628 芯片手册使用介绍 找了很久的资料:高通MDM9X07_MDM8207_MDM9628 芯片手册免费分享给大家,只是截取部分资料,更详细的资料请到下方 ...

  5. 高通WLAN框架学习(1)- -WIFI的认证和log的抓取

    本章节主要学习下高通WIFI的认证和log的抓取 1.WLAN的基本描述 本博客主要介绍下高通WLAN的概述,涵盖了可用于WLAN以及WLAN.蓝牙和LTE共存的调试方法. 还说明了软件调试可用的配置 ...

  6. 云栖科技评论第28期:高通宣布芯片内置亚马逊Alexa

    1.高通宣布芯片内置亚马逊Alexa 高通宣布芯片内置亚马逊Alexa [新闻摘要]高通宣布,旗下收购公司CSR的8670/8675芯片系列将内置亚马逊Alexa唤醒词支持.CSR蓝牙芯片占据业界高端 ...

  7. 芯片对蓝牙耳机影响有多大?南卡N2s发布,搭载高通3040芯片

    被众多数码媒体.评测机构誉为"最具性价比蓝牙耳机"的Nank南卡N2s今年又有新动作,发布了Nank南卡N2系列的升级版本Nank南卡N2s真无线蓝牙耳机. 作为升级版,Nank南 ...

  8. 高通MSM8998芯片参考资料免费下载

    高通MSM8998芯片参考资料免费下载 今日分享是高通MSM8998芯片的基础知识,现在分享是比较基础的资料,还有其他的项目案例和参考资料找个时间再分享出来,资料都在闯客网技术论坛上,也是可以免费下载 ...

  9. 高通MSM8998芯片数据资料参考

    高通MSM8998芯片数据资料参考 今日分享是高通MSM8998芯片的基础知识,现在分享是比较基础的资料,还有其他的项目案例和参考资料找个时间再分享出来,资料都在闯客网技术论坛上,也是可以免费下载的, ...

  10. 鸿蒙os适配平板,华为新平板搭载高通4G芯片,鸿蒙OS已适配完成,友商随时可用...

    上半年大家最期待,却又一直被鸽的产品有两款.一款是小米平板5,第三方放了很多烟雾弹,结果被官宣在下半年发布.另外一款是华为P50系列手机,从3月份就一直传,一直到现在都没有具体的发布时间.小米的平板会 ...

最新文章

  1. flex swf和movieclip之前的微妙关系
  2. Nginx重启时丢失nginx.pid文件解决方法nginx: [emerg] open() “/var/run/nginx/nginx.pid“ failed (2: No such fi
  3. 9个用于构建容错系统的开源工具
  4. ai电磁组属于什么组_RPA+AI 创新案例挑战赛 2020 【专业组】amp;【校园组】优胜名单来也!...
  5. 【BZOJ4653】[Noi2016]区间 双指针法+线段树
  6. net框架通用对象操作
  7. PHP中的$_SERVER['PATH_INFO']
  8. php动态交叉表,PHP Array交叉表实现代码
  9. 5·19网络故障:DNS服务器被攻击
  10. 数字公式识别的学习笔记(legacy)
  11. 几种常见排序算法的时间复杂度和简单描述
  12. vue-cli搭建项目引入jquery和jquery-weui步骤详解
  13. 2014小米校园招聘笔试(10.13北京)
  14. 树莓派Raspberrypi安装Kali Linux保姆教程(通过树莓派安装ARM Kali教程)
  15. InstallShield 下载安装
  16. 多目标跟踪算法SOART
  17. 两色注塑机的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  18. html 中 鼠标滑轮实现横向滚动
  19. (附源码)小程序校园拼车微信小程序 毕业设计 091617
  20. Netty游戏服务器实战开发(11):Spring+mybatis 手写分库分表策略(续)

热门文章

  1. 小红伞 for 2003
  2. IDEA如何设置鼠标滚轮调整代码大小
  3. 关于wineQQ8.9.19983deepin23版本提升不能在使用请升级,Linux偷懒升级方法
  4. vscode占用C盘空间迁移到其他盘
  5. 计算机数据库相关法规,法律法规数据库-详细页
  6. 网站监控,盘点五款值得使用的网站监控工具
  7. Word如何自动多级编号
  8. 谷粒商城 Day04 sku与spu接口
  9. qnap 文件传输服务器,如何将 QNAP NAS 作为 RADIUS 服务器使用?
  10. 跑腿 php,啦啦外卖跑腿小程序配置详情