Exemple #1
0
void mpu_task_on(void *stack)
{
    mpu_disable();
    mpu_setaddr(4, (int)(stack + 20));
    mpu_setattr(4, mpu_size(CONFIG_TASK_STACK_SIZE) | MPU_RASR_ENABLE | MPU_RASR_ATTR_SCB | MPU_RASR_ATTR_AP_PRW_URW);
    mpu_enable();
}
static int mpu_suspend(struct device *dev)
{
	struct mpu_data *mpu = dev_get_drvdata(dev);

	disable_irq(mpu->client->irq);

	mutex_lock(&mpu->lock);
	mpu_disable(mpu);
	mutex_unlock(&mpu->lock);
	return 0;
}
Exemple #3
0
int mpu_pre_init(void)
{
	int i;

	if (mpu_get_type() != 0x00000800)
		return EC_ERROR_UNIMPLEMENTED;

	mpu_disable();
	for (i = 0; i < 8; ++i)
		mpu_config_region(i, CONFIG_RAM_BASE, CONFIG_RAM_SIZE, 0, 0);

	return EC_SUCCESS;
}
static int __devexit mpu_remove(struct i2c_client *client)
{
	struct mpu_data *mpu = i2c_get_clientdata(client);

	dev_dbg(&client->dev, "enter %s\n", __func__);
	if (client->irq > 0) {
		free_irq(client->irq, mpu);
		gpio_free(mpu->gpio);
	}

	disable_irq(mpu->client->irq);
	input_unregister_device(mpu->input_dev);
	mpu_disable(mpu);
	remove_sysfs_interfaces(&client->dev);
	kfree(mpu);
	return 0;
}
static ssize_t attr_set_enable(struct device *dev,
			       struct device_attribute *attr,
			       const char *buf, size_t size)
{
	struct mpu_data *mpu = dev_get_drvdata(dev);
	unsigned long val;

	if (strict_strtoul(buf, 10, &val))
		return -EINVAL;

	dev_dbg(dev, "gyro set enable %ld\n", val);

	mutex_lock(&mpu->lock);
	if (val)
		mpu_enable(mpu);
	else
		mpu_disable(mpu);
	mpu->enabled = val;
	mutex_unlock(&mpu->lock);

	return size;
}
static int __devinit mpu_probe(struct i2c_client *client,
			const struct i2c_device_id *id)
{
	struct mpu_data *mpu;
	int ret;

	dev_info(&client->dev, "probe start. - new\n");

	mpu = kzalloc(sizeof(struct mpu_data), GFP_KERNEL);
	if (!mpu) {
		ret = -ENOMEM;
		dev_err(&client->dev, "failed to alloc memory: %d\n", ret);
		goto exit_alloc_failed;
	}
	mutex_init(&mpu->lock);
	mpu->client = client;
	i2c_set_clientdata(client, mpu);
	mpu->poll_interval = DEFAULT_POLL_INTERVAL;
	mpu->gpio = client->irq;

	ret = mpu_input_init(mpu);
	if (ret < 0) {
		dev_err(&client->dev, "input init failed\n");
		goto err_input_init_fail;
	}

	ret = mpu_reset(mpu);
	if (ret < 0) {
		dev_err(&client->dev, "reset failed\n");
		goto err_reset;
	}

	ret = mpu_hw_init(mpu);
	if (ret < 0) {
		dev_err(&client->dev, "hw init failed\n");
		goto err_hw_init;
	}

	ret = mpu_setup_irq(mpu);
	if (ret < 0) {
		dev_err(&client->dev,
			"fail to setup irq for gpio %d\n", mpu->gpio);
		goto err_setup_irq;
	}

	mpu->enabled = 0;
	mpu_disable(mpu);

	dev_info(&client->dev, "probed\n");
	return 0;

err_setup_irq:
err_hw_init:
	mpu_disable(mpu);
err_reset:
	input_unregister_device(mpu->input_dev);
	remove_sysfs_interfaces(&client->dev);
err_input_init_fail:
	kfree(mpu);
exit_alloc_failed:
	dev_err(&client->dev, "Driver Init failed\n");
	return ret;
}