找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 22|回复: 0

新世界Uboot启动系统时WiFi模块无法使用的解答

[复制链接]

1

主题

0

回帖

19

积分

新手上路

积分
19
发表于 昨天 22:46 | 显示全部楼层 |阅读模式
这个问题是前几天群友提出来的,当时以为SDIO1驱动有问题(Uboot设备树是没初始化SDIO1的),后来发现TF版在进系统后能识别TF卡,证明SDIO这部分并没有问题。

从原理图上可以看到(2K0300_99PAI_V1.1_0531  第8页),WiFi模块的12脚连接到一个叫WLAN_EN的网络,连接到的是2K0300的TIM1_CH1引脚,查阅2K0300手册可知这个脚是GPIO81。由于手头没有万用表,用DSLogic逻辑分析仪探测,这个引脚确实是低电平。在Linux中使用GPIO功能可以激活这个引脚,但重启后会复位到低电平。

由于Linux中似乎并没有给MMC
子系统留有片选IO口的能力,需要自己改一下内核源码。
  1. // 文件:(旧世界内核)drivers/mmc/host/ls2kmci.c

  2. static int ls2k_mci_probe(struct platform_device *pdev)
  3. {
  4.     // 省略……
  5.     hotpug_host = host;
  6.     local_irq_save(flags);
  7.     if (request_irq(host->irq, ls2k_mci_irq, 0, DRIVER_NAME, host)) {
  8.         dev_err(&pdev->dev, "failed to request mci interrupt.\n");
  9.         ret = -ENOENT;
  10.         goto probe_iounmap;
  11.     }
  12.     // 以下是加入的代码
  13.     host->cs_gpio = of_get_named_gpio(pdev->dev.of_node, "cs-gpios", 0);
  14.     if (gpio_is_valid(host->cs_gpio)) {
  15.         gpio_direction_output(host->cs_gpio, 1);
  16.         printk("%s: Toggled CS GPIO = 1 for %s\n", __func__, mmc_hostname(mmc));
  17.     } else {
  18.         printk("%s: Cannot get CS GPIO for %s\n", __func__, mmc_hostname(mmc));
  19.     }
  20.     // 以上是加入的代码
复制代码
上面这个基本就是让龙芯MMC驱动能读取一个cs-gpios属性来得到一个用于片选的GPIO引脚;当然应该还要判断是否存在这个属性,不过只是测试用途就没有写,欢迎各位继续折腾。

设备树里相应添加一个:
  1. // 文件:(旧世界内核)arch/loongarch/boot/dts/loongson/loongson_2k0300_pai_99_wifi.dts

  2. &sdio1{
  3.     status = "okay";
  4.     pinctrl-names = "default";
  5.     pinctrl-0 = <&sdio1_6bit>;
  6.     cs-gpios = <&gpa5 1 GPIO_ACTIVE_HIGH>;
  7. };
复制代码
重点就是加的cs-gpios那一行,我也没怎么玩过DTS,这个只能说是能用。改完之后编译内核启动应该就能加载WiFi驱动了,WiFi模块下面那个电阻应该能测到高电平。





您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Discuz! X

GMT+8, 2024-9-20 05:49 , Processed in 0.075872 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表