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;
}