static int
geomagnetic_resume(struct i2c_client *client)
{
    struct geomagnetic_data *data = i2c_get_clientdata(client);
	dbg_func_in();

	dbg("%s : data->enable = %d\n", __func__, atomic_read(&data->enable));

#ifdef POWER_ON_OFF
	geomagnetic_set_power(1);
#endif

    if (atomic_read(&data->enable)) {
        schedule_delayed_work(&data->work, 0);
        dbg("%s : schedule_delayed_work(&data->work, 0);", __func__);
    }

#if DEBUG
    data->suspend = 0;
#endif

	dbg_func_out();

    return 0;
}
static int
geomagnetic_suspend(struct i2c_client *client, pm_message_t mesg)
{
    struct geomagnetic_data *data = i2c_get_clientdata(client);

	dbg_func_in();

	dbg("%s : data->enable = %d\n", __func__, atomic_read(&data->enable));

    if (atomic_read(&data->enable)) {
        dbg("%s : cancel_delayed_work_sync(&data->work);", __func__);
        cancel_delayed_work_sync(&data->work);
    }
#if DEBUG
    data->suspend = 1;
#endif

#ifdef POWER_ON_OFF //p12911 : ef33s sensor patch
	geomagnetic_set_power(0);
#endif

	dbg_func_out();

    return 0;
}
예제 #3
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;
}
예제 #4
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;
}
예제 #5
0
static int yas_acc_probe(struct i2c_client *client, const struct i2c_device_id *id)
{
    struct yas_acc_private_data *data;
    int err;
	dbg_func_in();
    /* Setup private data */
    data = kzalloc(sizeof(struct yas_acc_private_data), GFP_KERNEL);
    if (!data) {
        err = -ENOMEM;
        goto ERR1;
    }
    yas_acc_set_data(data);

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

    /* Setup i2c client */
    if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
        err = -ENODEV;
        goto ERR2;
    }
    i2c_set_clientdata(client, data);
    data->client = client;

    /* Setup accelerometer core driver */
    err = yas_acc_core_driver_init(data);
    if (err < 0) {
        goto ERR2;
    }

    /* Setup driver interface */
    INIT_DELAYED_WORK(&data->work, yas_acc_work_func);

    /* Setup input device interface */
    err = yas_acc_input_init(data);
    if (err < 0) {
        goto ERR3;
    }

    /* Setup sysfs */
    err = sysfs_create_group(&data->input->dev.kobj, &yas_acc_attribute_group);
    if (err < 0) {
        goto ERR4;
    }
	g_acc = 1;
	dbg_func_out();
#ifdef POWER_ON_OFF
	dbg("acc probe start\n");
	geomagnetic_set_power(0);
	dbg("end\n");
#endif
    return 0;

 ERR4:
    yas_acc_input_fini(data);
 ERR3:
    yas_acc_core_driver_fini(data);
 ERR2:
    kfree(data);
 ERR1:
    return err;
}