Beispiel #1
0
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;
}
Beispiel #2
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;
}