예제 #1
0
static int yas_acc_set_delay(struct yas_acc_driver *driver, int delay)
{
    struct yas_acc_private_data *data = yas_acc_get_data();

    if (driver->get_enable()) {
        cancel_delayed_work_sync(&data->work);
        driver->set_delay(actual_delay(delay));
        schedule_delayed_work(&data->work, delay_to_jiffies(delay) + 1);
    } else {
        driver->set_delay(actual_delay(delay));
    }

    return 0;
}
예제 #2
0
static void bma023_set_delay(struct device *dev, int delay)
{
	struct bma023_data *bma023 = dev_get_drvdata(dev);
	int i;
	u8 odr;

	/* determine optimum ODR */
	for (i = 1; (i < ARRAY_SIZE(bma023_odr_table)) &&
		     (actual_delay(delay) >= bma023_odr_table[i].delay); i++)
		;
	odr = bma023_odr_table[i-1].odr;
	atomic_set(&bma023->delay, delay);

	mutex_lock(&bma023->enable_mutex);
	if (bma023_get_enable(dev)) {
		cancel_delayed_work_sync(&bma023->work);
		bma023_update_bits(bma023, BMA023_BANDWIDTH, odr);
		schedule_delayed_work(&bma023->work,
				      delay_to_jiffies(delay) + 1);
	} else {
		bma023_power_up(bma023);
		bma023_update_bits(bma023, BMA023_BANDWIDTH, odr);
		bma023_power_down(bma023);
	}
	mutex_unlock(&bma023->enable_mutex);
}
예제 #3
0
static void adxl345_set_delay(struct device *dev, int delay)
{

    struct i2c_client *client = to_i2c_client(dev);
    struct adxl345_data *adxl345 = i2c_get_clientdata(client);
    u8 odr;
    int i;

    /* determine optimum ODR */
    for (i = 1; (i < ARRAY_SIZE(adxl345_odr_table)) &&
             (actual_delay(delay) >= adxl345_odr_table[i].delay); i++)
        ;
    odr = adxl345_odr_table[i-1].odr;
    atomic_set(&adxl345->delay, delay);

    mutex_lock(&adxl345->enable_mutex);

    if (adxl345_get_enable(dev)) {
        cancel_delayed_work_sync(&adxl345->work);
        adxl345_update_bits(adxl345, ADXL345_BANDWIDTH, odr);
        schedule_delayed_work(&adxl345->work, delay_to_jiffies(delay) + 1);
    } else {
        adxl345_power_up(adxl345);
        adxl345_update_bits(adxl345, ADXL345_BANDWIDTH, odr);
        adxl345_power_down(adxl345);
    }

    mutex_unlock(&adxl345->enable_mutex);
}
예제 #4
0
static int yas_acc_set_delay(struct yas_acc_driver *driver, int delay)
{
#ifdef PANTECH_AVOID_DEADLOCK
        driver->set_delay(actual_delay(delay));
#else
    struct yas_acc_private_data *data = yas_acc_get_data();

    if (driver->get_enable()) {
        cancel_delayed_work_sync(&data->work);
        driver->set_delay(actual_delay(delay));
        schedule_delayed_work(&data->work, delay_to_jiffies(delay) + 1);
    } else {
        driver->set_delay(actual_delay(delay));
    }
#endif

    return 0;
}