static ssize_t es8323_proc_write(struct file *file, const char __user *buffer,
size_t len, loff_t *data)
{
char *cookie_pot;
char *p;
int reg;
int value;
cookie_pot = (char *)vmalloc( len );
if (!cookie_pot)
{
return -ENOMEM;
}
else
{
if (copy_from_user( cookie_pot, buffer, len ))
return -EFAULT;
}
switch(cookie_pot[0])
{
case 'r':
case 'R':
printk("Read reg debug\n");
if(cookie_pot[1] ==':')
{
strsep(&cookie_pot,":");
while((p=strsep(&cookie_pot,",")))
{
reg = simple_strtol(p,NULL,16);
// value = codec_read(i2c_client,reg);
value = snd_soc_read(es8323_codec, reg);
printk("codec_read:0x%04x = 0x%04x\n",reg,value);
}
printk("\n");
}
else
{
printk("Error Read reg debug.\n");
printk("For example: echo r:22,23,24,25>es8323_ts\n");
}
break;
case 'w':
case 'W':
printk("Write reg debug\n");
if(cookie_pot[1] ==':')
{
strsep(&cookie_pot,":");
while((p=strsep(&cookie_pot,"=")))
{
reg = simple_strtol(p,NULL,16);
p=strsep(&cookie_pot,",");
value = simple_strtol(p,NULL,16);
// codec_write(i2c_client,reg,value);
snd_soc_write(es8323_codec, reg, value);
printk("codec_write:0x%04x = 0x%04x\n",reg,value);
}
printk("\n");
}
else
{
printk("Error Write reg debug.\n");
printk("For example: w:22=0,23=0,24=0,25=0>es8323_ts\n");
}
break;
case 'a':
printk("Dump reg \n");
for(reg = 0; reg < 0x6e; reg+=2)
{
// value = codec_read(i2c_client,reg);
value = snd_soc_read(es8323_codec, reg);
printk("codec_read:0x%04x = 0x%04x\n",reg,value);
}
break;
default:
printk("Help for es8323_ts .\n-->The Cmd list: \n");
printk("-->'d&&D' Open or Off the debug\n");
printk("-->'r&&R' Read reg debug,Example: echo 'r:22,23,24,25'>es8323_ts\n");
printk("-->'w&&W' Write reg debug,Example: echo 'w:22=0,23=0,24=0,25=0'>es8323_ts\n");
break;
}
return len;
}
static const struct file_operations es8323_proc_fops = {
.owner = THIS_MODULE,
.write = es8323_proc_write,
};
static int es8323_proc_init(void)
{
proc_create_data("es8323_pcm_ts", 0777 /* default mode */,
NULL /* parent dir */, &es8323_proc_fops,
NULL /* client data */);
return 0;
}
https://github.com/jesstess/ldd4/blob/master/scull/main.c
https://blog.youkuaiyun.com/wbd880419/article/details/51955805
https://stackoverflow.com/questions/26808325/implicit-declaration-of-function-create-proc-entry