越甲八千 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日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度