static int mali_probe(struct platform_device *pdev) { int err; MALI_DEBUG_PRINT(2, ("mali_probe(): Called for platform device %s\n", pdev->name)); if (NULL != mali_platform_device) { /* Already connected to a device, return error */ MALI_PRINT_ERROR(("mali_probe(): The Mali driver is already connected with a Mali device.")); return -EEXIST; } mali_platform_device = pdev; if (mali_platform_init() != _MALI_OSK_ERR_OK) { /* Platform-specific initialization failed, return error */ MALI_PRINT_ERROR(("mali_probe(): mali_platform_init() failed.")); return -EFAULT; } if (_MALI_OSK_ERR_OK == _mali_osk_wq_init()) { /* Initialize the Mali GPU HW specified by pdev */ if (_MALI_OSK_ERR_OK == mali_initialize_subsystems()) { /* Register a misc device (so we are accessible from user space) */ err = mali_miscdevice_register(pdev); if (0 == err) { /* Setup sysfs entries */ err = mali_sysfs_register(mali_dev_name); if (0 == err) { MALI_DEBUG_PRINT(2, ("mali_probe(): Successfully initialized driver for platform device %s\n", pdev->name)); return 0; } else { MALI_PRINT_ERROR(("mali_probe(): failed to register sysfs entries")); } mali_miscdevice_unregister(); } else { MALI_PRINT_ERROR(("mali_probe(): failed to register Mali misc device.")); } mali_terminate_subsystems(); } else { MALI_PRINT_ERROR(("mali_probe(): Failed to initialize Mali device driver.")); } _mali_osk_wq_term(); } mali_platform_device = NULL; return -EFAULT; }
static int mali_remove(struct platform_device *pdev) { MALI_DEBUG_PRINT(2, ("mali_remove() called for platform device %s\n", pdev->name)); mali_sysfs_unregister(); mali_miscdevice_unregister(); mali_terminate_subsystems(); _mali_osk_wq_term(); mali_platform_device = NULL; return 0; }