越甲八千 2021-06-07 11:51 采纳率: 100%
浏览 24
已结题

linux驱动新加一个驱动,调用不了prop

代码如下:

#include <linux/init.h>
#include <linux/device.h>
#include <linux/kernel.h>
#include <linux/stat.h>
#include <linux/module.h>
#include <linux/iio/iio.h>
#include <linux/iio/sysfs.h>
#include<linux/i2c.h>

//设备树匹配表
static const struct of_device_id of_i2c_match[] = {
    { .compatible = "tsys02d", },
    { }
};


//传统设备表,最后一项必须为空,用来标识结束符
static const struct i2c_device_id tsys02d_id[] = {
    {"tsys02d", 0},
    {}
};

MODULE_DEVICE_TABLE(i2c, tsys02d_id);

ssize_t  MyRead  (struct i2c_client *client)  
{  
    struct  i2c_msg  msg[2];  
    unsigned  char  args,  data;  
    args = 0;

    /* 先传读地址 */  
    msg[0].addr =  0x40;  
    msg[0].buf =  &args;  
    msg[0].len =  1;  
    msg[0].flags =  0;  
  
    /* 再 读 */  
    msg[1].addr =  0x40;  
    msg[1].buf =  &data;  
    msg[1].len =  1;  
    msg[1].flags =  1; /* 读 */  
    printk("start   i2c_transfer\n");
    if  (2  ==  i2c_transfer(client->adapter,  msg,  2))
        {  
            printk("read--->%d" , data);
        /* 读成功 */  
                printk("success\n");
        return  1;  
    }  
    else  
        {
        printk("i2c_transfer !=2\n");
        return  -EIO; 
        }
}  


static int tsys02d_probe(struct i2c_client *client,
             const struct i2c_device_id *id)
{
    printk("start in tsys02d_probe\n");

    MyRead(client);

    printk("out tsys02d_probe\n");
    return 0;
}

static int tsys02d_remove(struct i2c_client *client)
{
    printk("mxc_vga_i2c_remove_exit finished..\n");
    return 0;
}

//I2c——driver
static struct i2c_driver tsys02d_driver = {
    .driver = {
         .name = "tsys02d",
         .owner = THIS_MODULE,
         .of_match_table= of_i2c_match,
         },
    .probe = tsys02d_probe,
    .remove = tsys02d_remove,
    .id_table = tsys02d_id,
};

#if 0
static int __init tsts02dinit(void)
{
    printk("tsys02dinit\n");
    int ret = 0;
    ret = i2c_add_driver(&tsys02d_driver);
    return ret;
}

static void __exit tsts02dexit(void)
{
    printk("tsts02dexit\n");
    i2c_del_driver(&tsys02d_driver);
   
}
#endif

//一:设备加入到外设队列中,
//二:告诉程序阅读者该设备是热插拔设备或是说该设备支持热插拔功能。
MODULE_DEVICE_TABLE(i2c, tsys02d_id);

//宏,拆解之后就是init和exit函数
module_i2c_driver(tsys02d_driver);

//module_init(tsts02dinit);
//module_exit(tsts02dexit);

MODULE_DESCRIPTION("20210605i2cdrivertest");
MODULE_AUTHOR("lw");
MODULE_LICENSE("GPL v2");


 

  • 写回答

2条回答 默认 最新

  • 有问必答小助手 2021-06-09 23:25
    关注

    你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答

    本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。

    ​​​​因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月17日
  • 已采纳回答 12月9日

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。