static int bma250_config(struct driver_data *dd, int bw, int range)
{
	int                 rc = 0;
	char                bypass = 0;
	struct bma250_platform_data *pdata = dd->ic_dev->dev.platform_data;

	if (slave_hw)
		pdata->bypass_state(READ_BYPASS_STATE, &bypass);

	if (!slave_hw || !bypass) {
		FIFO_ACCESS_MUTEX_LOCK();
		if (bw) {
			rc = bma250_bw_handler(dd);
			if (rc)
				goto config_error;
		}
		if (range) {
			rc = bma250_range_handler(dd);
			if (rc)
				goto config_error;
		}
		FIFO_ACCESS_MUTEX_UNLOCK();
	}
	return rc;

config_error:
	FIFO_ACCESS_MUTEX_UNLOCK();
	printk(KERN_ERR "%s: Configuration error.\n", __func__);
	return rc;
}
Esempio n. 2
0
static int bma250_config(struct driver_data *dd)
{
    int rc;

    rc = bma250_bw_handler(dd);
    if (rc)
        goto config_error;

    rc = bma250_range_handler(dd);
    if (rc)
        goto config_error;

    schedule_delayed_work(&dd->work_data, dd->delay_jiffies);
    return rc;

config_error:
    bma250_power_down(dd);
    return rc;
}