工具/软件:Linux
您好!
我的 bq27426电量监测计驱动器有问题。 在探测函数"bq_FG_probe ()"中、我有一个问题:我们是否需要执行 函数"devm_request_threaded_IRQ"前的函数"FG_Psy_register"、或者我们是否需要在函数"devm_request_threaded_IRQ"前执行函数"FG_Psy_register"?
以下是探测器函数的完整代码:
静态 int bq_fG_probe (struct i2c_client *客户端、
const 结构 i2c_device_id *id)
{
内转台;
struct bq_fG_chip *bq;
U8 *寄存器;
bq = devm_kzalloc (&client->dev、sizeof (*bq)、GFP_kernel);
如果(!bq){
PR_ERR ("无法分配内存\n");
return -ENOMEM;
}
bq->dev =&client->dev;
bq->client = client;
bq->chip = id->driver_data;
bq->batt_soc =-ENODATA;
bq->batt_FCC =-ENODATA;
bq->batt_rm =-ENODATA;
bq->batt_dc =-ENODATA;
bq->batt_volt =-ENODATA;
bq->batt_temp =-ENODATA;
bq->batt_CURR =-ENODATA;
bq->batt_cyclecnt =-ENODATA;
bq->fASH_soc =-EINVAL;
bq->fASH_temp =-EINVAL;
if (bq->chip =BQ27426){
regs = bq27426_regs;
}否则{
PR_ERR("Unexpected fuel gauge:%d\n", bq->chip);
regs = bq27426_regs;
}
memcpy (bq->regs、regs、NUM_regs);
I2C_SET_clientdata (client、bq);
mutex_init (&bq->i2c_rw_lock);
mutex_init (&bq->data_lock);
mutex_init (&bq->update_lock);
mutex_init (&bq->IRQ_COMPLETE);
bq->resume_completed = true;
bq->IRQ_Waiting = false;
bq->vadc_dev = qpnp_get_vadc (bq->dev、"batt_id");
if (is _ERR (bq->vadc_dev)){
RET = PTR_ERR (bq->vadc_dev);
如果(ret ==-EPROBE_DEPRE)
PR_ERR ("未找到 vadc -推迟 RC=%d\n"、ret);
其他
PR_ERR ("vadc 属性缺失、rc=%d\n"、ret);
回程;
}
RET = bq_pars_dt (bq);
如果(ret < 0){
dev_err (&client->dev、"无法解析 DT 节点\n");
//goto destroy_mutex;
}
#if BQAS_Updater
init_work (&bq->update_work、fG_update_Bqfs_workfunc);
fG_pars_Batt_id (bq);
FG_UPDATE_bqfs (bq);
#endif
if (client->IRQ){
RET = devm_request_threaded_IRQ (&client->dev、client->IRQ、NULL、
FG_IRQ_THread、
IRQF_TRIGGER_FALLING | IRQF_OneShot、
"bq 燃油表 IRQ"、bq);
如果(ret < 0){
PR_ERR("Request IRQ for IRQ=%d failed,ret =%d\n", client->IRQ,ret;
转至 ERR_1;
}
enable_IRQ_WAKE (client->IRQ);
}
DEVICE_INIT_WAKEUP (bq->dev、1);
bq->fw_ver = fG_read_fw_version (bq);
FG_Psy_register (bq);
create_debugfs_entry (bq);
RET = sysfs_create_group (&bq->dev->kobj、&fG_attR_group);
如果(RET){
PR_ERR ("注册 sysfs 失败、错误:%d\n"、ret);
}
determine initial_status (bq);
PR_ERR ("bq 电量监测计探针成功、%s 固件版本:%d\n"、
device2str[bq->chip]、bq->fw_ver);
返回0;
ERR_1:
fG_psy_unregister (bq);
回程;
}
感谢您的回复!
薛浩贤