コード例 #1
0
static int sensor_init(struct i2c_client *client)
{	
	int status, i;
	struct sensor_private_data *sensor =
	    (struct sensor_private_data *) i2c_get_clientdata(client);

	for (i = 0; i < 5; i++) {
		status = cm3218_write(client, CM3218_REG_ADDR_CMD,
				CM3218_CMD_ALS_SD);
		if (status >= 0)
			break;
		cm3218_read_ara(client);
	}

	status = cm3218_write(client, CM3218_REG_ADDR_CMD, CM3218_DEFAULT_CMD);
	if (status < 0) {
		dev_err(&client->dev, "Init CM3218 CMD fails\n");
		return status;
	}

	if(sensor->pdata->irq_enable)
	{
		status = cm3218_write(client, CM3218_REG_ADDR_CMD, CM3218_DEFAULT_CMD | CM3218_CMD_ALS_INT_EN);
		if (status < 0) {
			dev_err(&client->dev, "Init CM3218 CMD fails\n");
			return status;
		}
	}

	/* Clean interrupt status */
	cm3218_read(client, CM3218_REG_ADDR_STATUS);
	
	return status;
}
コード例 #2
0
ファイル: cm3218.c プロジェクト: hadess/cm3218
/**
 * cm3218_interrupt_config() - Enable/Disable CM3218 interrupt
 * @cm3218:	pointer of struct cm3218.
 * @enable:	0 to disable; otherwise to enable
 *
 * Config CM3218 interrupt control bit.
 *
 * Return: 0 for success; otherwise for error code.
 */
static int cm3218_interrupt_config(struct cm3218_chip *chip, int enable)
{
	int status;

	/* Force to clean interrupt */
	cm3218_read_ara(chip);

	if (enable)
		chip->conf_regs[CM3218_REG_ADDR_CMD] |=
			CM3218_CMD_ALS_INT_EN;
	else
		chip->conf_regs[CM3218_REG_ADDR_CMD] &=
			~CM3218_CMD_ALS_INT_EN;

	status = i2c_smbus_write_word_data(
			chip->als_client,
			CM3218_REG_ADDR_CMD,
			chip->conf_regs[CM3218_REG_ADDR_CMD]);

	if (status < 0)
		return -ENODEV;

	return status;
}