static int s5pv210_spdif_cfg_gpio(struct platform_device *pdev) { s3c_gpio_cfgpin(S5PV210_GPC1(0), (0x3)<<0); s3c_gpio_cfgpin(S5PV210_GPC1(1), (0x3)<<4); return 0; }
static int s5pv210_pcm_cfg_gpio(struct platform_device *pdev) { switch (pdev->id) { case 0: s3c_gpio_cfgpin(S5PV210_GPI(0), S3C_GPIO_SFN(3)); s3c_gpio_cfgpin(S5PV210_GPI(1), S3C_GPIO_SFN(3)); s3c_gpio_cfgpin(S5PV210_GPI(2), S3C_GPIO_SFN(3)); s3c_gpio_cfgpin(S5PV210_GPI(3), S3C_GPIO_SFN(3)); s3c_gpio_cfgpin(S5PV210_GPI(4), S3C_GPIO_SFN(3)); break; case 1: s3c_gpio_cfgpin(S5PV210_GPC0(0), S3C_GPIO_SFN(3)); s3c_gpio_cfgpin(S5PV210_GPC0(1), S3C_GPIO_SFN(3)); s3c_gpio_cfgpin(S5PV210_GPC0(2), S3C_GPIO_SFN(3)); s3c_gpio_cfgpin(S5PV210_GPC0(3), S3C_GPIO_SFN(3)); s3c_gpio_cfgpin(S5PV210_GPC0(4), S3C_GPIO_SFN(3)); break; case 2: s3c_gpio_cfgpin(S5PV210_GPC1(0), S3C_GPIO_SFN(2)); s3c_gpio_cfgpin(S5PV210_GPC1(1), S3C_GPIO_SFN(2)); s3c_gpio_cfgpin(S5PV210_GPC1(2), S3C_GPIO_SFN(2)); s3c_gpio_cfgpin(S5PV210_GPC1(3), S3C_GPIO_SFN(2)); s3c_gpio_cfgpin(S5PV210_GPC1(4), S3C_GPIO_SFN(2)); break; default: printk(KERN_DEBUG "Invalid PCM Controller number!"); return -EINVAL; } return 0; }
static int smdkc110_set_gpio(int id) { switch(id) { case 0: s3c_gpio_cfgpin (S5PV210_GPC1(0), S3C_GPIO_SFN(3)); s3c_gpio_cfgpin (S5PV210_GPC1(1), S3C_GPIO_SFN(3)); s3c_gpio_cfgpin (S5PV210_GPC1(2), S3C_GPIO_SFN(3)); s3c_gpio_cfgpin (S5PV210_GPC1(3), S3C_GPIO_SFN(3)); s3c_gpio_cfgpin (S5PV210_GPC1(4), S3C_GPIO_SFN(3)); s3c_gpio_setpull(S5PV210_GPC1(0), S3C_GPIO_PULL_NONE); s3c_gpio_setpull(S5PV210_GPC1(1), S3C_GPIO_PULL_NONE); s3c_gpio_setpull(S5PV210_GPC1(2), S3C_GPIO_PULL_NONE); s3c_gpio_setpull(S5PV210_GPC1(3), S3C_GPIO_PULL_NONE); s3c_gpio_setpull(S5PV210_GPC1(4), S3C_GPIO_PULL_NONE); break; case 1: s3c_gpio_cfgpin (S5PV210_GPC0(0), S3C_GPIO_SFN(3)); s3c_gpio_cfgpin (S5PV210_GPC0(1), S3C_GPIO_SFN(3)); s3c_gpio_cfgpin (S5PV210_GPC0(2), S3C_GPIO_SFN(3)); s3c_gpio_cfgpin (S5PV210_GPC0(3), S3C_GPIO_SFN(3)); s3c_gpio_cfgpin (S5PV210_GPC0(4), S3C_GPIO_SFN(3)); s3c_gpio_setpull(S5PV210_GPC0(0), S3C_GPIO_PULL_NONE); s3c_gpio_setpull(S5PV210_GPC0(1), S3C_GPIO_PULL_NONE); s3c_gpio_setpull(S5PV210_GPC0(2), S3C_GPIO_PULL_NONE); s3c_gpio_setpull(S5PV210_GPC0(3), S3C_GPIO_PULL_NONE); s3c_gpio_setpull(S5PV210_GPC0(4), S3C_GPIO_PULL_NONE); break; case 2: s3c_gpio_cfgpin (S5PV210_GPI(0), S3C_GPIO_SFN(3)); s3c_gpio_cfgpin (S5PV210_GPI(1), S3C_GPIO_SFN(3)); s3c_gpio_cfgpin (S5PV210_GPI(2), S3C_GPIO_SFN(3)); s3c_gpio_cfgpin (S5PV210_GPI(3), S3C_GPIO_SFN(3)); s3c_gpio_cfgpin (S5PV210_GPI(4), S3C_GPIO_SFN(3)); s3c_gpio_setpull(S5PV210_GPI(0), S3C_GPIO_PULL_NONE); s3c_gpio_setpull(S5PV210_GPI(1), S3C_GPIO_PULL_NONE); s3c_gpio_setpull(S5PV210_GPI(2), S3C_GPIO_PULL_NONE); s3c_gpio_setpull(S5PV210_GPI(3), S3C_GPIO_PULL_NONE); s3c_gpio_setpull(S5PV210_GPI(4), S3C_GPIO_PULL_NONE); break; default: debug_msg("Not a valid PCM IP Number. - %d\n", id); return -EINVAL; } return 0; }
int s3cfb_lcd_on(struct platform_device *pdev) { int err; printk("LCD.....on\n"); //GPC1_0 -->LCD 3.3V enable err = gpio_request(S5PV210_GPC1(0), "GPC1"); if (err) { printk(KERN_ERR "failed to request GPH0 for " "LVDS chip enable\n"); return err; } gpio_direction_output(S5PV210_GPC1(0), 1); gpio_set_value(S5PV210_GPC1(0), 1); gpio_free(S5PV210_GPC1(0)); #ifdef CONFIG_FB_BYD_8688 //GPG3_6 -->PINCTL err = gpio_request(S5PV210_GPG3(6), "GPG3"); if (err) { printk(KERN_ERR "failed to request GPH0 for " "LVDS chip enable\n"); return err; } gpio_direction_output(S5PV210_GPG3(6), 1); gpio_set_value(S5PV210_GPG3(6), 1); gpio_free(S5PV210_GPG3(6)); //GPG3_4 -->VCOM enable err = gpio_request(S5PV210_GPG3(4), "GPG3"); if (err) { printk(KERN_ERR "failed to request GPH0 for " "LVDS chip enable\n"); return err; } gpio_direction_input(S5PV210_GPG3(4)); //gpio_direction_output(S5PV210_GPG3(4), 0); //gpio_set_value(S5PV210_GPG3(4), 0); gpio_free(S5PV210_GPG3(4)); #endif return 0; }
static void led_exit(void) { gpio_free(S5PV210_GPC1(3)); device_remove_file(pled->led_device, &dev_attr_control); device_destroy(pled->led_class,MKDEV(0, 0)); class_destroy(pled->led_class); dev_set_drvdata(pled->led_device,NULL); kfree(pled); }
static int led_init(void) { int ret = 0; pled = kmalloc(sizeof(struct led_dev), GFP_KERNEL); if (IS_ERR(pled)) { printk(KERN_ALERT "Led: No enough memory for private struct\n"); ret = PTR_ERR(pled); goto failure_init_led; } memset(pled, 0, sizeof(struct led_dev)); pled->led_class = class_create(THIS_MODULE, "leds"); if (IS_ERR(pled->led_class)) { printk(KERN_ALERT "Led: Cannot create a device class\n"); ret = PTR_ERR(pled->led_class); goto failure_create_class; } pled->led_device = device_create(pled->led_class, NULL, MKDEV(0, 0), NULL, "leds"); if (IS_ERR(pled->led_device)) { printk(KERN_ALERT "Led: Cannot create a device /dev/leds"); ret = PTR_ERR(pled->led_device); goto failure_create_device; } ret = device_create_file(pled->led_device, &dev_attr_control); if (ret < 0) { printk(KERN_ALERT "Led: Cannot create a device attribure\n"); goto failure_create_attribure; } pled->config = led_config; pled->state = 0; ret = gpio_request(S5PV210_GPC1(3), "leds"); if(ret) { printk(KERN_ALERT "Led: Cannot request gpio\n"); goto failure_request_gpio; } dev_set_drvdata(pled->led_device, pled); return 0; failure_request_gpio: device_remove_file(pled->led_device,&dev_attr_control); failure_create_attribure: device_destroy(pled->led_class, MKDEV(0, 0)); failure_create_device: class_destroy(pled->led_class); failure_create_class: kfree(pled); failure_init_led: return ret; }
int s3cfb_lcd_on(struct platform_device *pdev) { int err; err = gpio_request(S5PV210_GPC1(4), "GPC1"); if (err) { printk(KERN_ERR "failed to request GPC1 for " "lcd reset control\n"); return err; } gpio_direction_output(S5PV210_GPC1(4), 1); mdelay(100); gpio_set_value(S5PV210_GPC1(4), 0); mdelay(10); gpio_set_value(S5PV210_GPC1(4), 1); mdelay(10); gpio_free(S5PV210_GPC1(4)); #if defined(CONFIG_FB_S3C_LTN101NT05) err = gpio_request(S5PV210_GPH3(7), "GPH3"); if (err) { printk(KERN_ERR "failed to request GPH3 for " "lcd control\n"); return err; } gpio_direction_output(S5PV210_GPH3(7), 1); mdelay(10); gpio_free(S5PV210_GPH3(7)); #endif return 0; }
static int s5pv210_cfg_i2s(struct platform_device *pdev) { /* configure GPIO for i2s port */ switch (pdev->id) { case 1: s3c_gpio_cfgpin(S5PV210_GPC0(0), S3C_GPIO_SFN(2)); s3c_gpio_cfgpin(S5PV210_GPC0(1), S3C_GPIO_SFN(2)); s3c_gpio_cfgpin(S5PV210_GPC0(2), S3C_GPIO_SFN(2)); s3c_gpio_cfgpin(S5PV210_GPC0(3), S3C_GPIO_SFN(2)); s3c_gpio_cfgpin(S5PV210_GPC0(4), S3C_GPIO_SFN(2)); break; case 2: s3c_gpio_cfgpin(S5PV210_GPC1(0), S3C_GPIO_SFN(4)); s3c_gpio_cfgpin(S5PV210_GPC1(1), S3C_GPIO_SFN(4)); s3c_gpio_cfgpin(S5PV210_GPC1(2), S3C_GPIO_SFN(4)); s3c_gpio_cfgpin(S5PV210_GPC1(3), S3C_GPIO_SFN(4)); s3c_gpio_cfgpin(S5PV210_GPC1(4), S3C_GPIO_SFN(4)); break; case 0: s3c_gpio_cfgpin(S5PV210_GPI(0), S3C_GPIO_SFN(2)); s3c_gpio_cfgpin(S5PV210_GPI(1), S3C_GPIO_SFN(2)); s3c_gpio_cfgpin(S5PV210_GPI(2), S3C_GPIO_SFN(2)); s3c_gpio_cfgpin(S5PV210_GPI(3), S3C_GPIO_SFN(2)); s3c_gpio_cfgpin(S5PV210_GPI(4), S3C_GPIO_SFN(2)); s3c_gpio_cfgpin(S5PV210_GPI(5), S3C_GPIO_SFN(2)); s3c_gpio_cfgpin(S5PV210_GPI(6), S3C_GPIO_SFN(2)); break; default: printk(KERN_ERR "Invalid Device %d\n", pdev->id); return -EINVAL; } return 0; }
static int s5pv210_cfg_i2s(struct platform_device *pdev) { switch (pdev->id) { case 0: s3c_gpio_cfgpin_range(S5PV210_GPI(0), 7, S3C_GPIO_SFN(2)); break; case 1: s3c_gpio_cfgpin_range(S5PV210_GPC0(0), 5, S3C_GPIO_SFN(2)); break; case 2: s3c_gpio_cfgpin_range(S5PV210_GPC1(0), 5, S3C_GPIO_SFN(4)); break; default: printk(KERN_ERR "Invalid Device %d\n", pdev->id); return -EINVAL; } return 0; }
module_param(mpstring, charp, 0); MODULE_PARM_DESC(mpstring, "one character string "); module_param_array(mparray, int, NULL, 0); MODULE_PARM_DESC(mparray, "one integer array"); struct led_gpio_table{ unsigned long gpio; char *name; }; extern void led_control(unsigned long gpio,int flags); static struct led_gpio_table gpio_info[] = { [0] = { .gpio = S5PV210_GPC1(3), .name = "GPC1_3" }, [1] = { .gpio = S5PV210_GPC1(4), .name = "GPC1_4" } }; static int led_init(void) { int i; printk("%s\n", __FUNCTION__); for (i = 0; i < ARRAY_SIZE(gpio_info); i++) {
.ngpio = S5PV210_GPIO_B_NR, .label = "GPB", }, }, { .base = S5PV210_GPC0_BASE, .config = &gpio_cfg, .chip = { .base = S5PV210_GPC0(0), .ngpio = S5PV210_GPIO_C0_NR, .label = "GPC0", }, }, { .base = S5PV210_GPC1_BASE, .config = &gpio_cfg, .chip = { .base = S5PV210_GPC1(0), .ngpio = S5PV210_GPIO_C1_NR, .label = "GPC1", }, }, { .base = S5PV210_GPD0_BASE, .config = &gpio_cfg, .chip = { .base = S5PV210_GPD0(0), .ngpio = S5PV210_GPIO_D0_NR, .label = "GPD0", }, }, { .base = S5PV210_GPD1_BASE, .config = &gpio_cfg, .chip = {
#include <plat/gpio-cfg.h> #include <plat/gpio-cfg-helpers.h> #define DEVICE_NAME "led" /* 应用程序执行ioctl(fd, cmd, arg)时的第2个参数 */ #define IOCTL_GPIO_ON 1 #define IOCTL_GPIO_OFF 0 /* 用来指定LED所用的GPIO引脚 */ static unsigned long gpio_table [] = { S5PV210_GPC1(3), S5PV210_GPC1(4), }; /* 用来指定GPIO引脚的功能:输出 */ static unsigned int gpio_cfg_table [] = { S3C_GPIO_SFN(1), S3C_GPIO_SFN(1), }; //static char gpio_name[][]={{"GPC1_3"},{"GPC1_4"}};
static void led_config(struct led_dev *dev, int value) { gpio_direction_output(S5PV210_GPC1(3),value); dev->state = value; }
static int s5pv210_spdif_cfg_gpio(struct platform_device *pdev) { s3c_gpio_cfgpin_range(S5PV210_GPC1(0), 2, S3C_GPIO_SFN(3)); return 0; }
{ .name = "led_green", .gpio = S5PV210_GPJ3(2), .active_low = 0, .default_state = LEDS_GPIO_DEFSTATE_ON, }, { .name = "led_red", .gpio = S5PV210_GPJ3(3), .active_low = 0, .default_state = LEDS_GPIO_DEFSTATE_OFF, }, #endif { .name = "button-backlight", .gpio = S5PV210_GPC1(1), .active_low = 0, .default_state = LEDS_GPIO_DEFSTATE_OFF, }, }; static struct gpio_led_platform_data gpio_led_info = { .leds = gpio_leds, .num_leds = ARRAY_SIZE(gpio_leds), }; struct platform_device s3c_device_led = { .name = "leds-gpio", .id = -1, .dev = { .platform_data = &gpio_led_info,