MT6735 alsps驱动P/L sensor问题

这个坑真的非常蛋疼,查了几天才知道原因,我使用的时候必须先打开L-sensor在打开P-sensor这样后者才会有中断不断的触发,接收到数据;如果是先打开P-sensor则会没有中断触发,无数据,而且先打开L-sensor的时候不可以两者同时打开,不然P-sensor也会接收不到数据。网上查了很多资料关于这个错误遇到的人非常少,那我们看下怎样去解决。

在alsps.c文件中

//获取als数据
int als_data_report(struct input_dev *dev, int value, int status)
{
	struct alsps_context *cxt = NULL;
    
	cxt  = alsps_context_obj;
	//ALSPS_LOG("+als_data_report! %d, %d\n",value,status);
	//force trigger data update after sensor enable.
	if (cxt->is_get_valid_als_data_after_enable == false)
	{
		input_report_abs(dev, EVENT_TYPE_ALS_VALUE, value+1);
		cxt->is_get_valid_als_data_after_enable = true;
	}
  	input_report_abs(dev, EVENT_TYPE_ALS_VALUE, value);
	input_report_abs(dev, EVENT_TYPE_ALS_STATUS, status);
	input_sync(dev);
	return 0;
}
//获取ps数据
int ps_data_report(struct input_dev *dev, int value,int status)
{
	//ALSPS_LOG("+ps_data_report! %d, %d\n",value,status);
	input_report_rel(dev, EVENT_TYPE_PS_VALUE, (value+1));
	input_report_rel(dev, EVENT_TYPE_PS_STATUS, status);
	input_sync(dev); 
	return 0;
}

我使用的是stk3311这个传感器,通过上面我们可以打log看到驱动stk3x1x.c中函数stk3x1x_get_ps_value获取数据,然后在调用alsps中的ps_data_report,然后看到input_report_rel(dev, EVENT_TYPE_PS_VALUE, (value+1));直接就默认为远距离,所以这里判断下

//获取als数据
int als_data_report(struct input_dev *dev, int value, int status)
{
	struct alsps_context *cxt = NULL;
    
	cxt  = alsps_context_obj;
	//ALSPS_LOG("+als_data_report! %d, %d\n",value,status);
	//force trigger data update after sensor enable.
	if (cxt->is_get_valid_als_data_after_enable == false)
	{
		input_report_abs(dev, EVENT_TYPE_ALS_VALUE, value+1);
		cxt->is_get_valid_als_data_after_enable = true;
	}
  	input_report_abs(dev, EVENT_TYPE_ALS_VALUE, value);
	input_report_abs(dev, EVENT_TYPE_ALS_STATUS, status);
	input_sync(dev);
	return 0;
}
//获取ps数据
int ps_data_report(struct input_dev *dev, int value,int status)
{
	//ALSPS_LOG("+ps_data_report! %d, %d\n",value,status);
	struct alsps_context *cxt = NULL;
    
	cxt  = alsps_context_obj;
	if (cxt->is_get_valid_ps_data_after_enable == true)
	{
		input_report_abs(dev, EVENT_TYPE_ALS_VALUE, value);
		cxt->is_get_valid_ps_data_after_enable = false;
	}
	input_report_rel(dev, EVENT_TYPE_PS_VALUE, (value+1));
	input_report_rel(dev, EVENT_TYPE_PS_STATUS, status);
	input_sync(dev); 
	return 0;
}

这样就完美解决问题


  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值