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