static void pmic8058_vib_update(struct work_struct *work) { struct pmic8058_vib *vib = container_of(work, struct pmic8058_vib, work); pmic8058_vib_set(vib, vib->state); }
static void pmic8058_work_handler(struct work_struct *work) { u8 val; int rc; struct pmic8058_vib *info; info = container_of(work, struct pmic8058_vib, work); rc = pmic8058_vib_read_u8(info, &val, VIB_DRV); if (rc < 0) return; /* */ if (info->speed) { info->state = 1; info->level = ((VIB_MAX_LEVELS * info->speed) / MAX_FF_SPEED) + VIB_MIN_LEVEL_mV; info->level /= 100; } else { info->state = 0; info->level = VIB_MIN_LEVEL_mV / 100; } pmic8058_vib_set(info, info->state); }
static int pmic8058_vib_suspend(struct device *dev) { struct pmic8058_vib *vib = dev_get_drvdata(dev); hrtimer_cancel(&vib->vib_timer); cancel_work_sync(&vib->work); /* turn-off vibrator */ pmic8058_vib_set(vib, 0); return 0; }
static int __devexit pmic8058_vib_remove(struct platform_device *pdev) { struct pmic8058_vib *vib = platform_get_drvdata(pdev); cancel_work_sync(&vib->work); if (vib->enabled) pmic8058_vib_set(vib, 0); input_unregister_device(vib->info); kfree(vib); return 0; }