首页 > 系统相关 >linux——I2C驱动

linux——I2C驱动

时间:2023-04-18 15:00:24浏览次数:32  
标签:count HKA err ret linux msg 驱动 I2C buf

HKA_S32 ISPWriteI2CData(HKA_U8 u8I2cDev, HKA_U8 u8DevAddr, HKA_U32 u32RegAddr,
                        HKA_U32 u32RegAddrByteNum, HKA_U32 u32Data, HKA_U32 u32DataByteNum)
{
    int ret = 0;
    struct i2c_adapter *padap = NULL;
    struct i2c_msg msg;
    char buf[8];
    int count = 0;

    padap = i2c_get_adapter(u8I2cDev);
    if (!padap)
    {
        pr_err("I2C adapter[%d] get error\n", u8I2cDev);
        return -ENODEV;
    }

    switch (u32RegAddrByteNum)
    {
    case 1:
        buf[count++] = u32RegAddr & 0xFF;
        break;
    case 2:
        buf[count++] = (u32RegAddr >> 8) & 0xFF;
        buf[count++] = u32RegAddr & 0xFF;
        break;
    default:
        pr_err("I2C addr bytenum error\n");
        ret = -EINVAL;
        goto err;
    }

    switch (u32DataByteNum)
    {
    case 1:
        buf[count++] = u32Data & 0xFF;
        break;
    case 2:
        buf[count++] = (u32Data >> 8) & 0xFF;
        buf[count++] = u32Data & 0xFF;
        break;
    default:
        pr_err("I2C addr bytenum error\n");
        ret = -EINVAL;
        goto err;
    }

    msg.addr = u8DevAddr;
    msg.flags = 0;
    msg.len = count;
    msg.buf = (char *)buf;
    ret = i2c_transfer(padap, &msg, 1);
    if (ret < 0)
    {
        pr_err("I2c: count:%d, addrsize:%d, datasize:%d\n", count, u32RegAddrByteNum, u32DataByteNum);
        pr_err("I2C write error, dev:%#x, reg:%#x,data:%#x, ret=%d\n", u8DevAddr, u32RegAddr, u32Data, ret);
        ret = -EIO;
        goto err;
    }
//    else
//    {

      pr_debug("[SDK_ISP_DRV]old I2C write OK,reg:%#x,data:%#x \n", u32RegAddr, u32Data);
//    }
    i2c_put_adapter(padap);
    return 0;
err:
    i2c_put_adapter(padap);
    return ret;
}

标签:count,HKA,err,ret,linux,msg,驱动,I2C,buf
From: https://www.cnblogs.com/lattelover/p/17329588.html

相关文章

  • linux蚁剑入门到熟悉文档地址整理
    linux蚁剑入门到熟悉文档地址收录蚁剑GetHub地址帮助文档kali安装出现问题的解决方式kali安装记录linuxdebian下载解压后进入文件内,使用root身份执行./AntSword后选择下载运行环境,新建并选择位置即可之后再次./AntSword即可......
  • linux——堆、栈、内存映射
    C的虚拟内存区域划分CodeArea(代码区):程序代码指令、常量字符串,只可读。StaticArea(静态区、全局区):存放全局变量/常量、静态变量/常量。该区域的大小在程序一加载进内存的时候就已固定,但是静态变量的值是可以改的。Heap(堆):由程序员控制,使用malloc/free来操作。(空间最大)Stack(栈......
  • Linux服务器怎么关闭防火墙
    Linux服务器怎么关闭防火墙在很多情况下,防火墙都会组织一些端口号的通讯。比如我们的tomcat,nginx,redis明明安装的没问题,但在外部就是访问不了,那很有可能就是防护墙的原因了。我是艾西,今天跟大家分享下Linux服务器怎么关闭防火墙一、重启后永久性生效:开启:chkconfigiptableson关闭:c......
  • Linux服务器怎么修改系统时间
    Linux服务器怎么修改系统时间linux服务器的系统时间,有的时候会产生误差,导致我们的程序出现一些延迟,或者其他的一些错误,那么怎么修改linux的系统时间呢?我是艾西,今天又是跟linux小白分享小知识的时间具体操作:我们一般使用“date-s”命令来修改Linux系统时间。比如将系统时间设定成......
  • Linux基础
    1、Linux目录结构1.1Linux系统的目录结构是一颗到撞树。Linux只有一个顶级目录,称之为:根目录Windows系统有多个顶级目录,即各个盘符在Linux系统中表示出现在开头的/表示:根目录出现在后面的/表示:层次关系1.2常见目录说明①./bin:存放常用命令(即二进制可执行程序)......
  • Linux服务器如何清除dns缓存
    DNS缓存是一个临时数据库,用于存储已解释的DNS查询信息。换句话说,每当你访问网站时,你的操作系统和网络浏览器都会保留域名和相应IP地址的记录。这消除对远程DNS服务器重复查询,并允许你的操作系统或浏览器快速解析网站的域名。但是在某些情况下,例如对网络问题进行故障排除或者在更改D......
  • Linux系统上如何禁用
    Linux系统上如何禁用为了保护数据不被泄漏,我们使用软件和硬件防火墙来限制外部未经授权的访问,但是数据泄露也可能发生在内部。为了消除这种可能性,机构会限制和监测访问互联网,同时禁用我是艾西,今天我将聊聊三种不同的方法来禁用方法方法方法方法一、伪安装在本方法中,我们往配置文件......
  • telnet远程管理linux主机及Zlib、openssl、openssh升级1
    一、telent远程管理主机1.安装telent服务服务端:yuminstalltelnet-server-y#安装服务端useradddaipasswddai#创建lhj用户,设置lhj密码,密码有规则要求,大小写数字加符号,输2次即可客户端:yuminstalltelnet-y#安装客户端2.测试telent登录客户端:telnet192.......
  • Linux iwlist command All In One
    LinuxiwlistcommandAllInOnewifiscaniwlist#scanningforwirelessnetworks$sudoiwlistwlan0scan$sudoiwlistwlan0scan>wifi-scan.md$cat./wifi-scan.md|grepESSID$iwconfig#Linux/macOS$ifconfig#Windows$ipconfig#......
  • 搭建高可用的rabbitmq集群 + Mirror Queue + 使用C#驱动连接
    我们知道rabbitmq是一个专业的MQ产品,而且它也是一个严格遵守AMQP协议的玩意,但是要想骚,一定需要拿出高可用的东西出来,这不本篇就跟大家说一下cluster的概念,rabbitmq是erlang写的一个成品,所以知道如何构建erlang的node集群就ok了,他需要一个统一的cookie机制......