コード例 #1
0
//[*]--------------------------------------------------------------------------------------------------[*]
static int bh1780_suspend(struct i2c_client *client, pm_message_t mesg)
{
	struct bh1780_data *bh1780 = i2c_get_clientdata(client);

	if(bh1780->enabled) cancel_delayed_work_sync(&bh1780->work);
	bh1780_power_down(bh1780);

	return 0;
}
コード例 #2
0
static int bh1780_suspend(struct i2c_client *client, pm_message_t mesg)
{
	struct bh1780_data *bh1780 = i2c_get_clientdata(client);

	mutex_lock(&bh1780->enable_mutex);

	if (bh1780_get_enable(&client->dev)) {
		cancel_delayed_work_sync(&bh1780->work);
		bh1780_power_down(bh1780);
	}

	mutex_unlock(&bh1780->enable_mutex);

	return 0;
}
コード例 #3
0
static void bh1780_set_enable(struct device *dev, int enable)
{
	struct i2c_client *client = to_i2c_client(dev);
	struct bh1780_data *bh1780 = i2c_get_clientdata(client);
	int delay = atomic_read(&bh1780->delay);

	mutex_lock(&bh1780->enable_mutex);

	if (enable) {                   /* enable if state will be changed */
		if (!atomic_cmpxchg(&bh1780->enable, 0, 1)) {
			bh1780_power_up(bh1780);
			schedule_delayed_work(&bh1780->work,
					      delay_to_jiffies(delay) + 1);
		}
	} else {                        /* disable if state will be changed */
		if (atomic_cmpxchg(&bh1780->enable, 1, 0)) {
			cancel_delayed_work_sync(&bh1780->work);
			bh1780_power_down(bh1780);
		}
	}
	atomic_set(&bh1780->enable, enable);

	mutex_unlock(&bh1780->enable_mutex);
}