static __devinit int tspdrv_probe(struct platform_device *pdev) { int ret, i, rc; /* initialized below */ DbgOut((KERN_INFO "tspdrv: tspdrv_probe.\n")); motor_min_strength = g_nlra_gp_clk_n*MOTOR_MIN_STRENGTH/100; if(!pdev->dev.of_node){ DbgOut(KERN_ERR "tspdrv: tspdrv probe failed, DT is NULL"); return -ENODEV; } rc = tspdrv_parse_dt(pdev); if(rc) return rc; virt_mmss_gp0_base = ioremap(MSM_MMSS_GP0_BASE,0x28); if (!virt_mmss_gp0_base) panic("tspdrv : Unable to ioremap MSM_MMSS_GP0 memory!"); vibrator_drvdata.power_onoff = NULL; vibrator_drvdata.pwm_dev = NULL; ret = misc_register(&miscdev); if (ret) { DbgOut((KERN_ERR "tspdrv: misc_register failed.\n")); iounmap(virt_mmss_gp0_base); return ret; } DbgRecorderInit(()); vibetonz_clk_on(&pdev->dev); ImmVibeSPI_ForceOut_Initialize(); VibeOSKernelLinuxInitTimer(); /* Get and concatenate device name and initialize data buffer */ g_cchdevice_name = 0; for (i = 0; i < NUM_ACTUATORS; i++) { char *szName = g_szdevice_name + g_cchdevice_name; ImmVibeSPI_Device_GetName(i, szName, VIBE_MAX_DEVICE_NAME_LENGTH); /* Append version information and get buffer length */ strlcat(szName, VERSION_STR, sizeof(VERSION_STR)); g_cchdevice_name += strnlen(szName, sizeof(szName)); g_samples_buffer[i].nindex_playing_buffer = -1;/* Not playing */ g_samples_buffer[i].actuator_samples[0].nbuffer_size = 0; g_samples_buffer[i].actuator_samples[1].nbuffer_size = 0; } wake_lock_init(&vib_wake_lock, WAKE_LOCK_SUSPEND, "vib_present"); vibetonz_start(); return 0; }
static __devinit int tspdrv_probe(struct platform_device *pdev) { int ret, i, rc; /* initialized below */ DbgOut((KERN_INFO "tspdrv: tspdrv_probe.\n")); motor_min_strength = g_nlra_gp_clk_n*MOTOR_MIN_STRENGTH/100; if(!pdev->dev.of_node){ DbgOut(KERN_ERR "tspdrv: tspdrv probe failed, DT is NULL"); return -ENODEV; } rc = tspdrv_parse_dt(pdev); if(rc) return rc; #if defined(CONFIG_MACH_HLTEDCM) || defined(CONFIG_MACH_HLTEKDI) || defined(CONFIG_MACH_JS01LTEDCM) virt_mmss_gp1_base = ioremap(MSM_MMSS_GP3_BASE,0x28); #elif defined(CONFIG_SEC_BERLUTI_PROJECT) || defined(CONFIG_MACH_S3VE3G_EUR) virt_mmss_gp1_base = ioremap(MSM_MMSS_GP0_BASE,0x28); #else virt_mmss_gp1_base = ioremap(MSM_MMSS_GP1_BASE,0x28); #endif if (!virt_mmss_gp1_base) panic("tspdrv : Unable to ioremap MSM_MMSS_GP1 memory!"); #if defined(CONFIG_MOTOR_DRV_MAX77803) || defined(CONFIG_MOTOR_DRV_MAX77804K) || defined(CONFIG_MOTOR_DRV_MAX77828) vibrator_drvdata.power_onoff = max77803_haptic_power_onoff; #else vibrator_drvdata.power_onoff = NULL; #endif vibrator_drvdata.pwm_dev = NULL; #ifdef IMPLEMENT_AS_CHAR_DRIVER g_nmajor = register_chrdev(0, MODULE_NAME, &fops); if (g_nmajor < 0) { DbgOut((KERN_ERR "tspdrv: can't get major number.\n")); ret = g_nmajor; iounmap(virt_mmss_gp1_base); return ret; } #else ret = misc_register(&miscdev); if (ret) { DbgOut((KERN_ERR "tspdrv: misc_register failed.\n")); iounmap(virt_mmss_gp1_base); return ret; } #endif DbgRecorderInit(()); vibetonz_clk_on(&pdev->dev); ImmVibeSPI_ForceOut_Initialize(); VibeOSKernelLinuxInitTimer(); /* Get and concatenate device name and initialize data buffer */ g_cchdevice_name = 0; for (i = 0; i < NUM_ACTUATORS; i++) { char *szName = g_szdevice_name + g_cchdevice_name; ImmVibeSPI_Device_GetName(i, szName, VIBE_MAX_DEVICE_NAME_LENGTH); /* Append version information and get buffer length */ strlcat(szName, VERSION_STR, sizeof(VERSION_STR)); g_cchdevice_name += strnlen(szName, sizeof(szName)); g_samples_buffer[i].nindex_playing_buffer = -1;/* Not playing */ g_samples_buffer[i].actuator_samples[0].nbuffer_size = 0; g_samples_buffer[i].actuator_samples[1].nbuffer_size = 0; } wake_lock_init(&vib_wake_lock, WAKE_LOCK_SUSPEND, "vib_present"); vibetonz_start(); vib_dev = device_create(sec_class, NULL, 0, NULL, "vib"); if (IS_ERR(vib_dev)) { pr_info("Failed to create device for samsung vib\n"); } ret = sysfs_create_file(&vib_dev->kobj, &dev_attr_vib_tuning.attr); if (ret) { pr_info("Failed to create sysfs group for samsung specific led\n"); } return 0; }