1 充电时间
int turnoff_chr_time_read(char *page, char **start, off_t off, int count, int *eof, void *data)
{
char *ptr = page;
ptr += sprintf(ptr, "turnoff_chr_time = %d\n", turnoff_chr_time);
*eof = 1;
return (ptr - page);
}
ssize_t turnoff_chr_time_write( struct file *filp, const char __user *buff,
unsigned long len, void *data )
{
if (copy_from_user( &proc_chr_time_data, buff, len )) {
printk("jeeray--->bat turnoff_chr_time_write proc wirte copy failed\n");
}
if (proc_chr_time_data[0] == '1')
{
turnoff_chr_time = 1;
}
else
{
turnoff_chr_time = 0;
}
return len;
}
int init_proc_chr_time(void)
{
int ret=0;
chr_time_proc_entry = create_proc_entry( "turnoff_chr_time", 0664, NULL );
if (chr_time_proc_entry == NULL) {
ret = -ENOMEM;
printk("init_proc_chr_time: Couldn't create proc entry\n");
} else {
chr_time_proc_entry->write_proc = turnoff_chr_time_write;
chr_time_proc_entry->read_proc = turnoff_chr_time_read;
printk("init_proc_chr_time: loaded.\n");
}
return ret;
}
2 camsensor添加读写节点
prEntry = create_proc_entry("driver/camsensor2", 0, NULL);
if (prEntry) {
prEntry->read_proc = CAMERA_HW_DumpReg_To_Proc;
prEntry->write_proc = CAMERA_HW_Reg_Debug2;
}
else {
PK_ERR("add /proc/driver/camsensor2 entry fail \n");
}
static int CAMERA_HW_Reg_Debug2( struct file *file, const char *buffer, unsigned long count,
void *data)
{
char regBuf[64] = {'\0'};
u32 u4CopyBufSize = (count < (sizeof(regBuf) - 1)) ? (count) : (sizeof(regBuf) - 1);
MSDK_SENSOR_REG_INFO_STRUCT sensorReg;
memset(&sensorReg, 0, sizeof(MSDK_SENSOR_REG_INFO_STRUCT));
if (copy_from_user(regBuf, buffer, u4CopyBufSize))
return -EFAULT;
if (sscanf(regBuf, "%x %x", &sensorReg.RegAddr, &sensorReg.RegData) == 2) {
if (g_pSensorFunc != NULL) {
g_pSensorFunc->SensorFeatureControl(DUAL_CAMERA_SUB_SENSOR, SENSOR_FEATURE_SET_REGISTER, (MUINT8*)&sensorReg, (MUINT32*)sizeof(MSDK_SENSOR_REG_INFO_STRUCT));
g_pSensorFunc->SensorFeatureControl(DUAL_CAMERA_SUB_SENSOR, SENSOR_FEATURE_GET_REGISTER, (MUINT8*)&sensorReg, (MUINT32*)sizeof(MSDK_SENSOR_REG_INFO_STRUCT));
PK_DBG("write addr = 0x%08x, data = 0x%08x\n", sensorReg.RegAddr, sensorReg.RegData);
}
}
else if (sscanf(regBuf, "%x", &sensorReg.RegAddr) == 1) {
if (g_pSensorFunc != NULL) {
g_pSensorFunc->SensorFeatureControl(DUAL_CAMERA_SUB_SENSOR, SENSOR_FEATURE_GET_REGISTER, (MUINT8*)&sensorReg, (MUINT32*)sizeof(MSDK_SENSOR_REG_INFO_STRUCT));
PK_DBG("read addr = 0x%08x, data = 0x%08x\n", sensorReg.RegAddr, sensorReg.RegData);
}
}
return count;
}
static int CAMERA_HW_DumpReg_To_Proc(char *page, char **start, off_t off,
int count, int *eof, void *data)
{
return count;
}