static int sensor_active(struct i2c_client *client, int enable, int rate)
{
struct sensor_private_data *sensor =
(struct sensor_private_data *) i2c_get_clientdata(client);
int result = 0;
int status = 0;
sensor->ops->ctrl_data = sensor_read_reg(client, sensor->ops->ctrl_reg);
//sensor->ops->ctrl_data = sensor_read_reg(client, client->addr);
//register setting according to chip datasheet
if(enable)
{
status = AFA750_ENABLE; //afa750
sensor->ops->ctrl_data |= status;
}
else
{
status = ~AFA750_ENABLE; //afa750
sensor->ops->ctrl_data &= status;
}
DBG("%s:reg=0x%x,reg_ctrl=0x%x,enable=%d\n",__func__,sensor->ops->ctrl_reg, sensor->ops->ctrl_data, enable);
printk("%s:reg=0x%x, addr = 0x%x reg_ctrl_data=0x%x,enable=%d\n",__func__,sensor->ops->ctrl_reg, client->addr,sensor->ops->ctrl_data, enable);
result = sensor_write_reg(client, sensor->ops->ctrl_reg, sensor->ops->ctrl_data);
if(result){
printk("%s:fail to active sensor,result = %d\n",__func__,result);
}
return result;
}
为什么result返回的会是负值,是不是ctrl_reg和ctrl_data的问题?求大神解答
------解决方案--------------------
弱弱地问一下:
sensor_write_reg是公用的Linux内核组件的API么?还是厂家的驱动程序定义实现的?
另外,是任何时候都返回负值么?还是设置某些寄存器的时候会是正确的?
有没有可能你写了只读寄存器?