示例#1
0
static int yas_acc_suspend(struct i2c_client *client, pm_message_t mesg)
{
    struct yas_acc_private_data *data = i2c_get_clientdata(client);
    struct yas_acc_driver *driver = data->driver;

	dbg_func_in();

	dbg("%s : data->suspend = %d / data->suspend_enable = %d\n", __func__, data->suspend, yas_acc_get_enable(driver));

#ifndef PANTECH_AVOID_DEADLOCK
    mutex_lock(&data->data_mutex);
#endif

    if (data->suspend == 0) {
        data->suspend_enable = yas_acc_get_enable(driver);
        if (data->suspend_enable) {
#ifndef PANTECH_AVOID_DEADLOCK
            cancel_delayed_work_sync(&data->work);
#endif
            yas_acc_set_enable(driver, 0);
        }
    }
    data->suspend = 1;
	
#ifndef PANTECH_AVOID_DEADLOCK
    mutex_unlock(&data->data_mutex);
#endif

#ifdef POWER_ON_OFF
	geomagnetic_set_power(0);
#endif
	dbg_func_out();

    return 0;
}
static ssize_t yas_acc_enable_show(struct device *dev,
                                   struct device_attribute *attr,
                                   char *buf)
{
    struct input_dev *input = to_input_dev(dev);
    struct yas_acc_private_data *data = input_get_drvdata(input);

    return sprintf(buf, "%d\n", yas_acc_get_enable(data->driver));
}
static int yas_acc_suspend(struct i2c_client *client, pm_message_t mesg)
{
    struct yas_acc_private_data *data = i2c_get_clientdata(client);
    struct yas_acc_driver *driver = data->driver;

    mutex_lock(&data->data_mutex);

    if (data->suspend == 0) {
        data->suspend_enable = yas_acc_get_enable(driver);
        if (data->suspend_enable) {
            cancel_delayed_work_sync(&data->work);
            yas_acc_set_enable(driver, 0);
        }
    }
    data->suspend = 1;

    mutex_unlock(&data->data_mutex);

    return 0;
}
void yas_acc_early_suspend(struct early_suspend *h)
{
    struct yas_acc_private_data *data =
        container_of(h, struct yas_acc_private_data, early_suspend);
    struct yas_acc_driver *driver = data->driver;

    mutex_lock(&data->data_mutex);

    if (data->suspend == 0) {
        data->suspend_enable = yas_acc_get_enable(driver);
        if (data->suspend_enable) {
            cancel_delayed_work_sync(&data->work);
            yas_acc_set_enable(driver, 0);
        }
    }
    data->suspend = 1;
    mutex_unlock(&data->data_mutex);

#ifdef WILLOW_SENSOR_REGULATOR_CONTROL
    regulator_disable(data->regulator);
#endif

}
static int yas_acc_suspend(struct i2c_client *client, pm_message_t mesg)
{
    struct yas_acc_private_data *data = i2c_get_clientdata(client);
    struct yas_acc_driver *driver = data->driver;

    mutex_lock(&data->data_mutex);

#ifdef WILLOW_SENSOR_REGULATOR_CONTROL
    regulator_disable(data->regulator);
#endif

    if (data->suspend == 0) {
        data->suspend_enable = yas_acc_get_enable(driver);
        if (data->suspend_enable) {
            cancel_delayed_work_sync(&data->work);
            yas_acc_set_enable(driver, 0);
        }
    }
    data->suspend = 1;

    mutex_unlock(&data->data_mutex);

    return 0;
}
示例#6
0
static int yas_acc_resume(struct i2c_client *client)
{
    struct yas_acc_private_data *data = i2c_get_clientdata(client);
    struct yas_acc_driver *driver = data->driver;
    int delay;

	dbg_func_in();
#ifdef POWER_ON_OFF
	geomagnetic_set_power(1);
#endif

#ifndef PANTECH_AVOID_DEADLOCK
    mutex_lock(&data->data_mutex);
#endif

	dbg("%s : data->suspend = %d / data->suspend_enable = %d / delay = %d\n", __func__, data->suspend, yas_acc_get_enable(driver), yas_acc_get_delay(driver));

    if (data->suspend == 1) {
        if (data->suspend_enable) {
            delay = yas_acc_get_delay(driver);
#ifndef PANTECH_AVOID_DEADLOCK
            schedule_delayed_work(&data->work, delay_to_jiffies(delay) + 1);
#endif
            yas_acc_set_enable(driver, 1);
        }
    }
    data->suspend = 0;

#ifndef PANTECH_AVOID_DEADLOCK
    mutex_unlock(&data->data_mutex);
#endif
	dbg_func_out();

    return 0;
}