![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
#include <linux/init.h> // __init __exit #include <linux/module.h> // module_init module_exit #include <mach/regs-gpio.h> #include <mach/gpio-bank.h> #include <asm/io.h> //writel #include <linux/ioport.h> //request_mem_region #include <asm/string.h> #include <linux/leds.h> #define GPJ0_REGBASE 0xE0200240 typedef struct GPJ0REG { volatile unsigned int gpj0Con; volatile unsigned int gpj0Dat; }gpj0_reg_t; gpj0_reg_t *pgpj0_reg =NULL; struct led_classdev cdev1; struct led_classdev cdev2; struct led_classdev cdev3; void s5pv210_led1_set(struct led_classdev *led_cdev,enum led_brightness brightness); void s5pv210_led2_set(struct led_classdev *led_cdev,enum led_brightness brightness); void s5pv210_led3_set(struct led_classdev *led_cdev,enum led_brightness brightness); void s5pv210_led1_set(struct led_classdev *led_cdev,enum led_brightness brightness) { printk(KERN_INFO "s5pv210_led1_set successful %d\n",brightness); if(brightness == LED_OFF) { writel((readl(&pgpj0_reg->gpj0Con)&0xff0fffff),&pgpj0_reg->gpj0Con); writel((readl(&pgpj0_reg->gpj0Con)|0x00100000),&pgpj0_reg->gpj0Con); writel((readl(&pgpj0_reg->gpj0Dat)|(0x01<<5)),&pgpj0_reg->gpj0Dat); } else { writel((readl(&pgpj0_reg->gpj0Con)&0xff0fffff),&pgpj0_reg->gpj0Con); writel((readl(&pgpj0_reg->gpj0Con)|0x00100000),&pgpj0_reg->gpj0Con); writel((readl(&pgpj0_reg->gpj0Dat)&(~(0x01<<5))),&pgpj0_reg->gpj0Dat); } } void s5pv210_led2_set(struct led_classdev *led_cdev,enum led_brightness brightness) { printk(KERN_INFO "s5pv210_led2_set successful %d\n",brightness); if(brightness == LED_OFF) { writel((readl(&pgpj0_reg->gpj0Con)&0xfff0ffff),&pgpj0_reg->gpj0Con); writel((readl(&pgpj0_reg->gpj0Con)|0x00010000),&pgpj0_reg->gpj0Con); writel((readl(&pgpj0_reg->gpj0Dat)|(0x01<<4)),&pgpj0_reg->gpj0Dat); } else { writel((readl(&pgpj0_reg->gpj0Con)&0xfff0ffff),&pgpj0_reg->