static int hpd_probe(struct platform_device *pdev) { unsigned int reg; struct tcc_hpd_platform_data *hpd_dev; hpd_dev = pdev->dev.platform_data; if (!machine_is_hdmidp()) return -ENODEV; printk(KERN_INFO "HPD Driver ver. %s (built %s %s)\n", VERSION, __DATE__, __TIME__); hdmi_hpd_clk = clk_get(0, "hdmi"); clk_enable(hdmi_hpd_clk); hpd_port = hpd_dev->hpd_port; gpio_request(hpd_port, "hpd"); #if defined(CONFIG_MACH_M805_892X) tcc_gpio_config(hpd_port, GPIO_FN(0)|GPIO_PULLDOWN); #else tcc_gpio_config(hpd_port, GPIO_FN(0)); #endif gpio_direction_input(hpd_port); if (misc_register(&hpd_misc_device)) { printk(KERN_WARNING "HPD: Couldn't register device 10, %d.\n", HPD_MINOR); return -EBUSY; } spin_lock_init(&hpd_struct.lock); /* disable HPD interrupts */ reg = readb(HDMI_SS_INTC_CON); reg &= ~(1<<HDMI_IRQ_HPD_PLUG); reg &= ~(1<<HDMI_IRQ_HPD_UNPLUG); writeb(reg, HDMI_SS_INTC_CON); atomic_set(&hpd_struct.state, -1); #ifndef CONFIG_OUTPUT_SKIP_KERNEL_LOGO clk_disable(hdmi_hpd_clk); #endif return 0; }
static int cec_probe(struct platform_device *pdev) { u8 *buffer; #if defined(CONFIG_ARCH_TCC92XX) gpio_request(CEC_GPIO_IN, "CEC_IN"); gpio_request(CEC_GPIO_OUT, "CEC_OUT"); gpio_direction_output(CEC_GPIO_IN, 0); gpio_direction_output(CEC_GPIO_OUT, 1); #else gpio_request(CEC_GPIO_COMMON, "CEC"); gpio_direction_output(CEC_GPIO_COMMON, 1); #endif /* CONFIG_ARCH_TCC88XX */ DPRINTK(KERN_INFO "%s\n", __FUNCTION__); if (!machine_is_hdmidp()) return -ENODEV; hdmi_cec_clk = clk_get(0, "hdmi"); ddi_clk = clk_get(0, "ddi"); clk_enable(hdmi_cec_clk); printk(KERN_INFO "CEC Driver ver. %s (built %s %s)\n", VERSION, __DATE__, __TIME__); if (misc_register(&cec_misc_device)) { printk(KERN_WARNING "CEC: Couldn't register device 10, %d.\n", CEC_MINOR); return -EBUSY; } cec_disable_interrupts(); if (request_irq(IRQ_HDMI, cec_irq_handler, IRQF_SHARED, "cec", cec_irq_handler)) { printk(KERN_WARNING "CEC: IRQ %d is not free.\n", IRQ_HDMI); misc_deregister(&cec_misc_device); return -EIO; } init_waitqueue_head(&cec_rx_struct.waitq); spin_lock_init(&cec_rx_struct.lock); init_waitqueue_head(&cec_tx_struct.waitq); buffer = kmalloc(CEC_TX_BUFF_SIZE, GFP_KERNEL); if (!buffer) { printk(KERN_ERR "CEC: kmalloc() failed!\n"); misc_deregister(&cec_misc_device); return -EIO; } cec_rx_struct.buffer = buffer; cec_rx_struct.size = 0; TccCECInterface_Init(); clk_disable(hdmi_cec_clk); return 0; }