static int k3_vibrator_suspend(struct platform_device *pdev, pm_message_t state) { struct k3_vibrator_data *pdata = platform_get_drvdata(pdev); /* DTS2012070302333 begin: add by kf74453 for vibrator not stop in suspend mode at 2012-07-05 */ int ret = 0; /* DTS2012070302333 end: add by kf74453 for vibrator not stop in suspend mode at 2012-07-05 */ if (pdata == NULL) { dev_err(&pdev->dev, "%s:pdata is NULL\n", __func__); return -ENODEV; } if (!mutex_trylock(&pdata->lock)) { dev_err(&pdev->dev, "%s: mutex_trylock.\n", __func__); return -EAGAIN; } /* DTS2012070302333 begin: modify by kf74453 for vibrator not stop in suspend mode at 2012-07-05 */ if (hrtimer_active(&pdata->timer)) { if (ret) { pr_err("pmu clock enable failed,ret:%d\n", ret); mutex_unlock(&pdata->lock); return ret; } hrtimer_cancel(&pdata->timer); k3_vibrator_regulator_disable(); } return 0; /* DTS2012070302333 end: modify by kf74453 for vibrator not stop in suspend mode at 2012-07-05 */ }
static int k3_vibrator_suspend(struct platform_device *pdev, pm_message_t state) { struct k3_vibrator_data *pdata = platform_get_drvdata(pdev); int ret = 0; if (pdata == NULL) { dev_err(&pdev->dev, "%s:pdata is NULL\n", __func__); return -ENODEV; } if (!mutex_trylock(&pdata->lock)) { dev_err(&pdev->dev, "%s: mutex_trylock.\n", __func__); return -EAGAIN; } if (hrtimer_active(&pdata->timer)) { if (ret) { pr_err("pmu clock enable failed,ret:%d\n", ret); mutex_unlock(&pdata->lock); return ret; } hrtimer_cancel(&pdata->timer); k3_vibrator_regulator_disable(); } return 0; }
static void k3_vibrator_shutdown(struct platform_device *pdev) { struct k3_vibrator_data *pdata = platform_get_drvdata(pdev); if (pdata == NULL) { dev_err(&pdev->dev, "%s:pdata is NULL\n", __func__); return; } if (hrtimer_active(&pdata->timer)) hrtimer_cancel(&pdata->timer); k3_vibrator_regulator_disable(); return ; }
static void k3_vibrator_onoff_handler(struct work_struct *data) { struct k3_vibrator_data *pdata = k3_vibrator_pdata; int on = pdata->value; mutex_lock(&pdata->lock); if (on) { k3_vibrator_regulator_enable(); } else { k3_vibrator_regulator_disable(); } mutex_unlock(&pdata->lock); return ; }