螞蟻森林有個行走賺綠色能量的方法,但奈何我的手機不支援運動感測器(本身已支援計步感測器,如果寫個計步器的驅動,那應該就可以顯示步數了。網上搜尋發現了一篇文件(lm80-p0436-9_sensors_porting_guide.pdf),感覺這個有希望。
驅動如下
#include #include #include #include #define poll_default_interval_ms 500
static unsigned long step_count;
struct sensors_classdev step_counter_cdev =;
struct step_counter ;
static int step_counter_set_enable(struct sensors_classdev *sensors_cdev,unsigned int enable)
else
mutex_unlock(&virtual_step_counter->enable_lock);
return 0;
}static ssize_t step_count_show(struct device *dev,struct device_attribute *attr, char *buf)
static ssize_t step_count_store(struct device *dev,struct device_attribute *attr,const char *buf, size_t count)
static device_attr(step_count, s_irusr|s_irgrp|s_iwusr,step_count_show,step_count_store);
int step_counter_poll_delay(struct sensors_classdev *sensors_cdev,unsigned int delay_msec)
static void step_counter_poll(struct work_struct *work)
static struct input_dev *step_counter_init_input(struct device *dev)
return input;
}static int step_counter_probe(struct platform_device *pdev)
init_delayed_work(&virtual_step_counter->dwork, step_counter_poll);
virtual_step_counter->data_wq =create_freezable_workqueue("step_counter_data_work");
if (!virtual_step_counter->data_wq)
atomic_set(&virtual_step_counter->delay, poll_default_interval_ms);
virtual_step_counter->idev=step_counter_init_input(&pdev->dev);
if(!virtual_step_counter->idev)
virtual_step_counter->cdev=step_counter_cdev;
virtual_step_counter->cdev.sensors_enable=step_counter_set_enable;
virtual_step_counter->cdev.sensors_poll_delay=step_counter_poll_delay;
ret=sensors_classdev_register(&virtual_step_counter->idev->dev,&virtual_step_counter->cdev);
if (ret)
mutex_init(&virtual_step_counter->enable_lock);
mutex_init(&virtual_step_counter->step_count_lock);
dev_set_drvdata(&pdev->dev, virtual_step_counter);
ret = device_create_file(&pdev->dev, &dev_attr_step_count);
printk("step_counter_probe ok\n");
return 0;
out_register_classdev:
input_unregister_device(virtual_step_counter->idev);
out_create_workqueue:
out_register_input:
destroy_workqueue(virtual_step_counter->data_wq);
out:
printk("step_counter_probe fail\n");
return ret;
}
static int step_counter_remove(struct platform_device *pdev)
static struct platform_device step_counter_devices =
;static struct platform_driver step_counter_driver =,};
static int sensor_init(void)
static void __exit sensor_exit(void)
module_init(sensor_init);
module_exit(sensor_exit);
module_license("gpl");
相關修改如下
見證成果的時候到了。
高通平台Bring up
3.2.amss 部分編譯 主要由以下部分構成 adsp,boot,debug,modem,rpm,trustzone,wcnss,分別根據高通的說明編譯這些模組,不過其中有些模組我們不會改,直接用release的binary檔案就行,比如 debug,rpm,trustzone,wcnss。3.3...
高通平台mipi panel kernel讀包方法
熟悉高通平台mipi panel kernel讀包方法,我想我們可以是的同一客戶要是使用2塊mipi panel的話我想我們可以通過讀取id來下不同序列而不用更換boot.img,還有能否讀id可以說明mipi通訊是否正常。還有我們只需在lk下面讀一次id再對全域性變數賦值通過lk傳遞到kernel...
高通平台 USB OTG功能
1 什麼是otg?usb otg 是usbon the go 的縮寫,即 otg技術就是實現在沒有 host 的情況下,實現裝置間的資料傳送。2 硬體介面 5根線 usb hs id usb hs d p usb hs d m usb vbus in gnd3 otg線 otg通訊的乙個關鍵是如何判...