static int felica_cen_write(u8 arg, struct felica_dev *dev)
{
	int i;
	u8 state;

	if (!dev)
		return -EINVAL;
	dev_dbg(dev->device_cen.this_device, ": %s\n", __func__);

	if (arg > 0x1) {
		dev_err(dev->device_cen.this_device,
			"%s: Error. Invalid val @CEN write.\n", __func__);
		return -EINVAL;
	}

	for (i = 0; i < CEN_RETRY_MAX; i++) {
		felica_cen_read(&state, dev);
		if (arg == state)
			goto end;
		gpio_set_value_cansleep(
			PM8921_GPIO_PM_TO_SYS(PM_GPIO_FELICA_FF), 0);
		msleep_interruptible(1);
		gpio_set_value_cansleep(
			PM8921_GPIO_PM_TO_SYS(PM_GPIO_FELICA_FF), 1);
		msleep_interruptible(1);
		gpio_set_value_cansleep(
			PM8921_GPIO_PM_TO_SYS(PM_GPIO_FELICA_FF), 0);
	}
	dev_err(dev->device_cen.this_device,
			"%s: Error. Cannot write CEN.\n", __func__);
	return -EIO;

end:
	return 0;
}
Beispiel #2
0
static int felica_cen_write(u8 arg, void *user)
{
	struct cxd2235agg_data *my_data = user;
	int i;
	u8 state;

	if (!my_data)
		return -EINVAL;

	dev_dbg(&my_data->pdev->dev, ": %s: %x\n", __func__, arg);

	if (arg > 0x1) {
		dev_err(&my_data->pdev->dev,
			"%s: Error. Invalid val @CEN write.\n", __func__);
		return -EINVAL;
	}

	for (i = 0; i < CEN_RETRY_MAX; i++) {
		felica_cen_read(&state, my_data);
		if (arg == state)
			goto end;
		gpio_set_value_cansleep(my_data->gpios[FF_PIN], 0);
		msleep_interruptible(1);
		gpio_set_value_cansleep(my_data->gpios[FF_PIN], 1);
		msleep_interruptible(1);
		gpio_set_value_cansleep(my_data->gpios[FF_PIN], 0);
	}

	dev_err(&my_data->pdev->dev, "%s: Error. Cannot write CEN.\n",
		__func__);

	return -EIO;

end:
	return 0;
}