static long mypwm_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
{
switch (cmd)
{
case PWM_DUTY:
break;
case PWM_PERIOD: //if cmd=1 即进入 case PWM_IOCTL_SET_FREQ
if (arg == 0) //如果设置的频率参数是 0
return -EINVAL; //返回错误信息,表示向参数传递了无效的参数
//PWM_Set_Freq(arg); //否则设置频率
break;
case PWM_OFF: // if cmd=2 即进入 case PWM_IOCTL_STOP
myPWM_Stop();
break;
default:
break;
}
return 0;
}
static int pwm_init(void)
{
int ret;
sema_init(&lock, 1);
printk ("\tmypwm initializ...\r\n");
ret = myPWM_Init();
if (ret < 0)
{
return ret;
}
printk ("\tmypwm initialized\r\n");
ret = misc_register(&pwm_misc); //注册一个 misc 设备
return ret;
}