/*!
******************************************************************************

@Function    SYSDEVU_VDECRegisterDriver

******************************************************************************/
IMG_RESULT SYSDEVU_VDECRegisterDriver(
    SYSDEVU_sInfo *  psInfo
)
{
    IMG_UINT32 ui32Result = IMG_ERROR_GENERIC_FAILURE;

    if(IMG_FALSE == gbDevDetected)
    {
        printk(KERN_INFO "SYSDEVU1_Initialise\n");

        psSysDev = psInfo;

		ui32Result = platform_driver_register(&local_driver);
		if (ui32Result != 0) 
		{
			return IMG_ERROR_DEVICE_NOT_FOUND;
		}
        if (request_irq(module_irq, IsrCb, 0, "goldfish_device", psSysDev)) 
        {
            printk(KERN_ERR "Goldfish: Failed to get IRQ\n");
            return IMG_ERROR_GENERIC_FAILURE;
        }

        gbDevDetected = IMG_TRUE;

        SYSDEVU_SetDevMap(psInfo, 0, 0, 0, 0, 0, 0, 0);

        SYSDEVU_SetDeviceOps(psInfo, &device_ops);

        ui32Result = SYSMEMKM_AddSystemMemory(psInfo, &psInfo->sMemPool);
    }

    return ui32Result;
}
Exemplo n.º 2
0
IMG_RESULT SYSDEVU_RegisterDriver(SYSDEVU_sInfo *sysdev) {
	int ret = 0;
	gpsInfo = sysdev;

	ret = platform_driver_register(&local_driver);
	if (ret != 0) {
		ret = IMG_ERROR_DEVICE_NOT_FOUND;
		goto failure_register;
	}

	if (device_detected != IMG_TRUE) {
		ret = IMG_ERROR_DEVICE_NOT_FOUND;
		goto failure_detect;
	}

	reg_base_addr = ioremap(module_reg_base, module_reg_size);
	if (!reg_base_addr) {
		printk(KERN_ERR "Failed to remap registers\n");
		ret = IMG_ERROR_GENERIC_FAILURE;
		goto failure_map_reg;
	}

	if (request_irq(module_irq, handle_interrupt, 0, DEVICE_NAME, gpsInfo)) {
		printk(KERN_ERR "Failed to get IRQ\n");
		ret = IMG_ERROR_GENERIC_FAILURE;
		goto failure_request_irq;
	}

	SYSDEVU_SetDevMap(sysdev, ((IMG_UINT32 *)module_reg_base), ((IMG_UINT32 *)reg_base_addr), module_reg_size, IMG_NULL, IMG_NULL, 0, 0);
	SYSDEVU_SetDevFuncs(sysdev, free_device, handle_resume, handle_suspend);

	ret = SYSMEMKM_AddSystemMemory(&sysdev->sMemPool);
	if(IMG_SUCCESS != ret)
	{
		goto failure_add_sys_mem;
	}

	/* Return success...*/
	return IMG_SUCCESS;

failure_add_sys_mem:
failure_request_irq:
	iounmap(reg_base_addr);
failure_map_reg:
failure_detect:
	platform_driver_unregister(&local_driver);
failure_register:
	gpsInfo = IMG_NULL;
	return ret;
}