tp 驱动分析记录 cyttsp_i2c.c


自己的备忘记录 : 2012/03/15


static int cyttsp_init(void)
{
    int ret;

    cyttsp_info("Cypress TrueTouch(R) Standard Product\n");
    cyttsp_info("I2C Touchscreen Driver (Built %s @ %s)\n", \
        __DATE__, __TIME__);

    cyttsp_ts_wq = create_singlethread_workqueue("cyttsp_ts_wq");

/*

create_workqueue  用于创建一个 workqueue 队列,为系统中的每个 CPU 都创建一个内核线程

create_singlethread_workqueue   用于创建 workqueue ,只创建一个内核线程

destroy_workqueue  释放 workqueue 队列

schedule_work     调度执行一个具体的任务,执行的任务将会被挂入 Linux 系统提供的 workqueue —— keventd_wq

schedule_delayed_work 延迟一定时间去执行一个具体的任务,功能与 schedule_work 类似,多了一个延迟时间

*/

    if (cyttsp_ts_wq == NULL) {
        cyttsp_debug("No memory for cyttsp_ts_wq\n");
        return -ENOMEM;
    }

    ret = i2c_add_driver(&cyttsp_driver);   //添加I2C驱动

    return ret;

}


===================================================


static struct i2c_driver cyttsp_driver = {
    .driver = {
        .name = CY_I2C_NAME,
        .owner = THIS_MODULE,
        .pm = &cyttsp_pm_ops,   //电源管理接口
    },
    .probe = cyttsp_probe,
    .remove = __devexit_p(cyttsp_remove),
    .id_table = cyttsp_id,
};


===================================================


static int __devinit cyttsp_probe(struct i2c_client *client,
            const struct i2c_device_id *id)
{
    struct cyttsp *ts;
    int error;
    int retval = CY_OK;

    cyttsp_info("Start Probe 1.2\n");

    /* allocate and clear memory */
    ts = kzalloc(sizeof(struct cyttsp), GFP_KERNEL);
    if (ts == NULL) {
        cyttsp_xdebug1("err kzalloc for cyttsp\n");
        retval = -ENOMEM;
    }


    //前面有觉得奇怪,在cyttsp_driver

----------------------

static struct i2c_driver cyttsp_driver = {
    .driver = {
        .name = CY_I2C_NAME,
        .owner = THIS_MODULE,
        .pm = &cyttsp_pm_ops,   // 为什么是用这个

    },

//    .suspend    = xxx_suspend,   //而不是用这两个,这之间有什么区别
//    .resume     = xxx_resume,

    .probe = cyttsp_probe,
    .remove = __devexit_p(cyttsp_remove),
    .id_table = cyttsp_id,

};  

------------------------

// 到这里差不多明白了

  .suspend    = xxx_suspend,  
  .resume     = xxx_resume,

//是系统的睡眠唤醒接口,是不可控的,也就是说:在整个系统睡眠和唤醒时会自动掉用,

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值