我是靠谱客的博主 无情时光,最近开发中收集的这篇文章主要介绍移植DAC芯片MCP4725驱动到NUC980,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

本文介绍了移植DAC芯片MCP4725的方法。

因为官方提供的linux-4.4.x虽然有一个mcp4725.c的驱动,但该驱动适合无dts的老的应用场景,而我的系统使用了dts树所以需要更换该驱动,具体方法为:

从网站linux/mcp4725.c at master · torvalds/linux · GitHub

下载mcp4725.c,下载的该文件要做下面调整才能被正常编译使用,具体如下:

1 增加头文件:#include <linux/of_device.h>

2 找到IIO_ENUM_AVAILABLE并删除第二个参数,变成如下形式:

IIO_ENUM_AVAILABLE("powerdown_mode",

                           &mcp472x_powerdown_mode_enum[MCP4725]),

        IIO_ENUM_AVAILABLE("powerdown_mode",

                           &mcp472x_powerdown_mode_enum[MCP4726]),

3 找到device_get_match_data改成of_device_get_match_data

 if (dev_fwnode(&client->dev))

                data->id = (uintptr_t)of_device_get_match_data(&client->dev);

        else

         ......

4 替换include/linux/iio/dac/mcp4725.h为下面内容:

....

struct mcp4725_platform_data {

bool use_vref;

bool vref_buffered;

};

....

5 修改文件:

drivers/base/property.c +108,允许dev_fwnode 被外部调用:

struct fwnode_handle *dev_fwnode(struct device *dev)

{

        return IS_ENABLED(CONFIG_OF) && dev->of_node ?

                &dev->of_node->fwnode : dev->fwnode;

}

EXPORT_SYMBOL_GPL(dev_fwnode);

6 调整include/linux/property.h,对输出的函数进行声明

struct fwnode_handle *dev_fwnode(struct device *dev);

7  因为DAC芯片是挂接在I2c1总线上,需要修改文件nuc980-iot.dtsi,增加蓝色部分:

i2c1: i2c1@b0081000 {

                        compatible = "nuvoton,nuc980-i2c1";

.........

                        #address-cells = <1>;

                        #size-cells = <0>;

                        mcp4725@61 {

                        compatible = "microchip,mcp4725";

                                reg = <0x61>;

                        };

编译正常后刷写到板子内部后进入/sys/devices/iio:deviceX即可看到节点信息,这里的X请根据自己的系统实际情况进行替换。

可以写入DA值然后实际用万用表进行测试验证。

echo 2000 > out_voltage0_raw

 

最后

以上就是无情时光为你收集整理的移植DAC芯片MCP4725驱动到NUC980的全部内容,希望文章能够帮你解决移植DAC芯片MCP4725驱动到NUC980所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部