static int __init s5p_hpd_probe(struct platform_device *pdev) { if (misc_register(&hpd_misc_device)) { pr_err("%s::Couldn't register device 10, %d.\n", __func__, HPD_MINOR); return -EBUSY; } init_waitqueue_head(&g_hpd_struct.waitq); spin_lock_init(&g_hpd_struct.lock); atomic_set(&g_hpd_struct.state, -1); atomic_set(&g_hdmi_status, HDMI_OFF); s3c_gpio_cfgpin(S5PV210_GPH1(5), S3C_GPIO_SFN(0xf)); s3c_gpio_setpull(S5PV210_GPH1(5), S3C_GPIO_PULL_DOWN); writel(readl(S5PV210_GPH1DRV)|0x3<<10, S5PV210_GPH1DRV); if (gpio_get_value(S5PV210_GPH1(5))) { atomic_set(&g_hpd_struct.state, HPD_HI); g_last_hpd_state = HPD_HI; } else { atomic_set(&g_hpd_struct.state, HPD_LO); g_last_hpd_state = HPD_LO; } set_irq_type(IRQ_EINT13, IRQ_TYPE_EDGE_BOTH); if (request_irq(IRQ_EINT13, s5p_hpd_irq_handler, IRQF_DISABLED, "hpd", s5p_hpd_irq_handler)) { pr_err("%s::failed to install %s irq\n", __func__, "hpd"); misc_deregister(&hpd_misc_device); return -EIO; } if (s5p_hdmi_register_isr(s5p_hpd_irq_handler, (u8)HDMI_IRQ_HPD_PLUG) != 0) pr_err("%s::s5p_hdmi_register_isr(HDMI_IRQ_HPD_PLUG) fail\n", __func__); if (s5p_hdmi_register_isr(s5p_hpd_irq_handler, (u8)HDMI_IRQ_HPD_UNPLUG) != 0) pr_err("%s::s5p_hdmi_register_isr(HDMI_IRQ_HPD_UNPLUG) fail\n", __func__); return 0; }
static int __init s5p_hpd_probe(struct platform_device *pdev) { if (misc_register(&hpd_misc_device)) { printk(KERN_WARNING " Couldn't register device 10, %d.\n", HPD_MINOR); return -EBUSY; } init_waitqueue_head(&hpd_struct.waitq); spin_lock_init(&hpd_struct.lock); atomic_set(&hpd_struct.state, -1); atomic_set(&hdmi_status, HDMI_OFF); s3c_gpio_cfgpin(S5PV210_GPH1(5), S5PV210_GPH1_5_EXT_INT31_5); s3c_gpio_setpull(S5PV210_GPH1(5), S3C_GPIO_PULL_DOWN); s3c_gpio_set_drvstrength(S5PV210_GPH1(5), S3C_GPIO_DRVSTR_4X); if (gpio_get_value(S5PV210_GPH1(5))) { atomic_set(&hpd_struct.state, HPD_HI); last_hpd_state = HPD_HI; irq_event = EVENT_RISING; } else { atomic_set(&hpd_struct.state, HPD_LO); last_hpd_state = HPD_LO; irq_event = EVENT_FALLING; } set_irq_type(IRQ_EINT13, IRQ_TYPE_EDGE_BOTH); if (request_irq(IRQ_EINT13, s5p_hpd_irq_handler, IRQF_DISABLED, "hpd", s5p_hpd_irq_handler)) { printk(KERN_ERR "failed to install %s irq\n", "hpd"); misc_deregister(&hpd_misc_device); return -EIO; } s5p_hdmi_register_isr((void *) s5p_hpd_irq_handler, (u8)HDMI_IRQ_HPD_PLUG); s5p_hdmi_register_isr((void *) s5p_hpd_irq_handler, (u8)HDMI_IRQ_HPD_UNPLUG); return 0; }
static int __init s5p_hpd_probe(struct platform_device *pdev) { if (misc_register(&hpd_misc_device)) { printk(KERN_WARNING " Couldn't register device 10, %d.\n", HPD_MINOR); return -EBUSY; } init_waitqueue_head(&hpd_struct.waitq); spin_lock_init(&hpd_struct.lock); atomic_set(&hpd_struct.state, -1); #ifdef USEEXTINT s3c_gpio_cfgpin(S5PV210_GPH1(5), S3C_GPIO_SFN(0xf)); s3c_gpio_setpull(S5PV210_GPH1(5), S3C_GPIO_PULL_UP); if (gpio_get_value(S5PV210_GPH1(5))) atomic_set(&hpd_struct.state, HPD_HI); else atomic_set(&hpd_struct.state, HPD_LO); set_irq_type(IRQ_EINT13, IRQ_TYPE_EDGE_BOTH); if (request_irq(IRQ_EINT13, s5p_hpd_irq_handler, IRQF_DISABLED, "hpd", s5p_hpd_irq_handler)){ printk(KERN_ERR "failed to install %s irq\n", "hpd"); misc_deregister(&hpd_misc_device); return -EIO; } #else /* must be checked */ s5p_hdmi_register_isr(s5p_hpd_irq_handler, (u8)HDMI_IRQ_HPD_PLUG); s5p_hdmi_register_isr(s5p_hpd_irq_handler, (u8)HDMI_IRQ_HPD_UNPLUG); #endif return 0; }
static int __init s5p_hpd_probe(struct platform_device *pdev) { if (misc_register(&hpd_misc_device)) { printk(KERN_WARNING " Couldn't register device 10, %d.\n", HPD_MINOR); return -EBUSY; } init_waitqueue_head(&hpd_struct.waitq); spin_lock_init(&hpd_struct.lock); atomic_set(&hpd_struct.state, -1); atomic_set(&hdmi_status, HDMI_OFF); s3c_gpio_cfgpin(S5PV210_GPH1(5), S3C_GPIO_SFN(0xf)); s3c_gpio_setpull(S5PV210_GPH1(5), S3C_GPIO_PULL_DOWN); writel(readl(S5PV210_GPH1DRV)|0x3<<10, S5PV210_GPH1DRV); // by pjlee : Interrupt Signal Change #ifdef CONFIG_MACH_MANGO210_EVT0 if (!gpio_get_value(S5PV210_GPH1(5))) { #else if (gpio_get_value(S5PV210_GPH1(5))) { #endif atomic_set(&hpd_struct.state, HPD_HI); last_hpd_state = HPD_HI; } else { atomic_set(&hpd_struct.state, HPD_LO); last_hpd_state = HPD_LO; } set_irq_type(IRQ_EINT13, IRQ_TYPE_EDGE_BOTH); if (request_irq(IRQ_EINT13, s5p_hpd_irq_handler, IRQF_DISABLED, "hpd", s5p_hpd_irq_handler)) { printk(KERN_ERR "failed to install %s irq\n", "hpd"); misc_deregister(&hpd_misc_device); return -EIO; } s5p_hdmi_register_isr(s5p_hpd_irq_handler, (u8)HDMI_IRQ_HPD_PLUG); s5p_hdmi_register_isr(s5p_hpd_irq_handler, (u8)HDMI_IRQ_HPD_UNPLUG); return 0; } /* * Remove */ static int s5p_hpd_remove(struct platform_device *pdev) { return 0; } #ifdef CONFIG_PM /* * Suspend */ int s5p_hpd_suspend(struct platform_device *dev, pm_message_t state) { return 0; } /* * Resume */ int s5p_hpd_resume(struct platform_device *dev) { return 0; } #else #define s5p_hpd_suspend NULL #define s5p_hpd_resume NULL #endif static struct platform_driver s5p_hpd_driver = { .probe = s5p_hpd_probe, .remove = s5p_hpd_remove, .suspend = s5p_hpd_suspend, .resume = s5p_hpd_resume, .driver = { .name = "s5p-hpd", .owner = THIS_MODULE, }, }; static char banner[] __initdata = "S5PC11X HPD Driver, (c) 2009 Samsung Electronics\n"; int __init s5p_hpd_init(void) { int ret; printk(banner); ret = platform_driver_register(&s5p_hpd_driver); if (ret) { printk(KERN_ERR "Platform Device Register Failed %d\n", ret); return -1; } return 0; }