iTOP-4412οLEDܣ
2014-06-12
2014-06-12
iTOP-4412ӢṩLEDܣԭͼʾ

ԭͼԿLEDһӵԴVSYSϣһͨܽӵأͨܵĻԵرLEDܵĻֱͨװӵİExynos 4412GPIO GPL2_0GPK1_1ϡ
һ½ѾiTOP-4412GPIOLED潫õһ½ڽܵļGPIOĺ
LEDںleds_initʵ£
static int __init leds_init(void)
{
return platform_driver_register(&leds_driver);
}
úں˺platform_driver_registerںעһӲ豸IJһplatform_driverṹleds_driver£
static struct platform_driver leds_driver = {
.probe = leds_probe,
.remove = leds_remove,
.suspend = leds_suspend,
.resume = leds_resume,
.driver = {
.name = DRIVER_NAME,
.owner = THIS_MODULE,
},
};
ں˵platform_driver_registerעӲ豸ʱջõplatform_driverṹprobe̽⺯iTOP-4412LED̽⺯leds_probe£
static int leds_probe(struct platform_device *pdev)
int ret, i;
char *banner = "leds Initialize\n";
printk(banner);
for(i=0; i< LED_NUM; i++ )
{
ret = gpio_request(led_gpios[i], "LED");
if (ret) {
printk("%s: request GPIO %d for LED failed, ret = %d\n", DRIVER_NAME,
led_gpios[i], ret);
return ret;
}
s3c_gpio_cfgpin(led_gpios[i], S3C_GPIO_OUTPUT);
gpio_set_value(led_gpios[i], 1);
}
ret = misc_register(&leds_dev);
if(ret<0)
{
printk("leds
goto exit;
}
return 0;
exit:
misc_deregister(&leds_dev);
return ret;
}
ʹGPIOIJLEDGPIOŵĹΪĬߵƽLEDGPIOĶled_gpiosУ£
static int led_gpios[] = {
EXYNOS4_GPL2(0),
EXYNOS4_GPK1(1),
};
ŻصLED̽⺯¿Żmisc_registerںעַ豸misc_registerݵIJmiscdevicemiscdevice豸ǶʽϵͳõñȽ϶һ豸Linuxں˵include/linuxĿ¼Miscdevice.hļҪԼmisc device豸ŶʵΪЩַ豸Ԥȷַ豸룬Щ豸10 һmisc deviceʵmisc_register10register_chrdev()ġiTOP-4412LEDmiscdeviceĽṹ£
static struct miscdevice leds_dev = {
.minor = MISC_DYNAMIC_MINOR,
.fops = &leds_ops,
.name = "leds",
};
ĶԿminor豸ŶMISC_DYNAMIC_MINORmiscϵͳ豸ŶMISC_DYNAMIC_MINORôעʱں˻ᶯ̬Ϊ豸豸šLED/devu¼´豸ڵleds
ṩ豸ļļopen,release,ioctlϲӦȵopenleds豸Ȼioctlledleds_ioctlʵʾ
long leds_ioctl(struct file *filp,unsigned int cmd,unsigned long arg)
{
printk("debug: leds_ioctl cmd is %d\n" , cmd);
switch(cmd)
{
case 0:
case 1:
if (arg > LED_NUM) {
return -EINVAL;
}
gpio_set_value(led_gpios[arg], cmd);
break;
default:
return -EINVAL;
}
return 0;
}
ͨĴ룬֪ϲӦʹioctlҪcmdargcmdled״̬01argǴĸled