Exemplo n.º 1
0
static int w9966_rReg_i2c(struct w9966_dev* cam, int reg)
{
	int data;

	w9966_i2c_setsda(cam, 0);
	w9966_i2c_setscl(cam, 0);

	if (
		w9966_i2c_wbyte(cam, W9966_I2C_W_ID) == -1 ||
		w9966_i2c_wbyte(cam, reg) == -1
	)
		return -1;

	w9966_i2c_setsda(cam, 1);
	if (w9966_i2c_setscl(cam, 1) == -1)
		return -1;
	w9966_i2c_setsda(cam, 0);
	w9966_i2c_setscl(cam, 0);

	if (
		w9966_i2c_wbyte(cam, W9966_I2C_R_ID) == -1 ||
		(data = w9966_i2c_rbyte(cam)) == -1
	)
		return -1;

	w9966_i2c_setsda(cam, 0);

	if (w9966_i2c_setscl(cam, 1) == -1)
		return -1;
	w9966_i2c_setsda(cam, 1);

	return data;
}
Exemplo n.º 2
0
// Read a register from the i2c device.
// Expects claimed pdev. -1 on error
static int w9966_i2c_rreg(struct w9966_dev* cam, int device, int reg)
{
	int data;

	w9966_i2c_setsda(cam, 0);
	w9966_i2c_setscl(cam, 0);

	if (!w9966_i2c_wbyte(cam, device << 1) ||
	    !w9966_i2c_wbyte(cam, reg))
		return -1;

	w9966_i2c_setsda(cam, 1);
	if (!w9966_i2c_setscl(cam, 1))
		return -1;

	w9966_i2c_setsda(cam, 0);
	w9966_i2c_setscl(cam, 0);

	if (!w9966_i2c_wbyte(cam, (device << 1) | 1) ||
	    (data = w9966_i2c_rbyte(cam)) == -1)
		return -1;

	w9966_i2c_setsda(cam, 0);

	if (!w9966_i2c_setscl(cam, 1))
		return -1;

	w9966_i2c_setsda(cam, 1);

	return data;
}
Exemplo n.º 3
0
/* Write a register to the i2c device.
   Expects claimed pdev. -1 on error */
static int w9966_write_reg_i2c(struct w9966 *cam, int reg, int data)
{
	w9966_i2c_setsda(cam, 0);
	w9966_i2c_setscl(cam, 0);

	if (w9966_i2c_wbyte(cam, W9966_I2C_W_ID) == -1 ||
			w9966_i2c_wbyte(cam, reg) == -1 ||
			w9966_i2c_wbyte(cam, data) == -1)
		return -1;

	w9966_i2c_setsda(cam, 0);
	if (w9966_i2c_setscl(cam, 1) == -1)
		return -1;

	w9966_i2c_setsda(cam, 1);

	return 0;
}
Exemplo n.º 4
0
// Write a register to the i2c device.
// Expects claimed pdev.
// 1 on success, else 0
static int w9966_i2c_wreg(struct w9966_dev* cam, int device, int reg, int data)
{
	w9966_i2c_setsda(cam, 0);
	w9966_i2c_setscl(cam, 0);

	if (!w9966_i2c_wbyte(cam, device << 1) ||
	    !w9966_i2c_wbyte(cam, reg) ||
	    !w9966_i2c_wbyte(cam, data))
		return 0;

	w9966_i2c_setsda(cam, 0);
	if (!w9966_i2c_setscl(cam, 1))
		return 0;

	w9966_i2c_setsda(cam, 1);

	return 1;
}
Exemplo n.º 5
0
static int w9966_i2c_rbyte(struct w9966 *cam)
{
	unsigned char data = 0x00;
	int i;

	w9966_i2c_setsda(cam, 1);

	for (i = 0; i < 8; i++) {
		if (w9966_i2c_setscl(cam, 1) == -1)
			return -1;
		data = data << 1;
		if (w9966_i2c_getsda(cam))
			data |= 0x01;

		w9966_i2c_setscl(cam, 0);
	}
	return data;
}
Exemplo n.º 6
0
// Write a byte with ack to the i2c bus.
// Expects a claimed pdev.
// 1 on success, else 0
static int w9966_i2c_wbyte(struct w9966_dev* cam, int data)
{
	int i;
	for (i = 7; i >= 0; i--) {
		w9966_i2c_setsda(cam, (data >> i) & 0x01);

		if (!w9966_i2c_setscl(cam, 1) ||
		    !w9966_i2c_setscl(cam, 0))
			return 0;
	}
	w9966_i2c_setsda(cam, 1);

	if (!w9966_i2c_setscl(cam, 1) ||
	    !w9966_i2c_setscl(cam, 0))
		return 0;

	return 1;
}
Exemplo n.º 7
0
// Read a data byte with ack from the i2c-bus
// Expects a claimed pdev. -1 on error
static int w9966_i2c_rbyte(struct w9966_dev* cam)
{
	u8 data = 0x00;
	int i;

	w9966_i2c_setsda(cam, 1);

	for (i = 0; i < 8; i++)
	{
		if (!w9966_i2c_setscl(cam, 1))
			return -1;
		data = data << 1;
		if (w9966_i2c_getsda(cam))
			data |= 0x01;

		w9966_i2c_setscl(cam, 0);
	}
	return data;
}
Exemplo n.º 8
0
// Write a byte with ack to the i2c bus.
// Expects a claimed pdev. -1 on error
static int w9966_i2c_wbyte(struct w9966_dev* cam, int data)
{
	int i;
	for (i = 7; i >= 0; i--)
	{
		w9966_i2c_setsda(cam, (data >> i) & 0x01);

		if (w9966_i2c_setscl(cam, 1) == -1)
			return -1;
		w9966_i2c_setscl(cam, 0);
	}

	w9966_i2c_setsda(cam, 1);

	if (w9966_i2c_setscl(cam, 1) == -1)
		return -1;
	w9966_i2c_setscl(cam, 0);

	return 0;
}