Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ab5222ed authored by Sean Young's avatar Sean Young Committed by Mauro Carvalho Chehab
Browse files

media: merge ir_tx_z8f0811_haup and ir_rx_z8f0811_haup i2c devices



These two devices ids are really just one device with multiple
addresses. Probing becomes much simpler if we simply fold this into
one i2c device with two address.

Note that this breaks the lirc_zilog driver, however we will teach
ir-kbd-i2c to do what lirc_zilog does in a later commit.

Signed-off-by: default avatarSean Young <sean@mess.org>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@s-opensource.com>
parent a6927d81
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -501,8 +501,8 @@ static const struct i2c_device_id ir_kbd_id[] = {
	/* Generic entry for any IR receiver */
	{ "ir_video", 0 },
	/* IR device specific entries should be added here */
	{ "ir_rx_z8f0811_haup", 0 },
	{ "ir_rx_z8f0811_hdpvr", 0 },
	{ "ir_z8f0811_haup", 0 },
	{ "ir_z8f0811_hdpvr", 0 },
	{ }
};

+1 −7
Original line number Diff line number Diff line
@@ -25,13 +25,7 @@
#define CX18_HW_418_AV			(1 << 4)
#define CX18_HW_GPIO_MUX		(1 << 5)
#define CX18_HW_GPIO_RESET_CTRL		(1 << 6)
#define CX18_HW_Z8F0811_IR_TX_HAUP	(1 << 7)
#define CX18_HW_Z8F0811_IR_RX_HAUP	(1 << 8)
#define CX18_HW_Z8F0811_IR_HAUP	(CX18_HW_Z8F0811_IR_RX_HAUP | \
				 CX18_HW_Z8F0811_IR_TX_HAUP)

#define CX18_HW_IR_ANY (CX18_HW_Z8F0811_IR_RX_HAUP | \
			CX18_HW_Z8F0811_IR_TX_HAUP)
#define CX18_HW_Z8F0811_IR_HAUP		(1 << 7)

/* video inputs */
#define	CX18_CARD_INPUT_VID_TUNER	1
+5 −8
Original line number Diff line number Diff line
@@ -47,8 +47,7 @@ static const u8 hw_addrs[] = {
	0,				/* CX18_HW_418_AV */
	0,				/* CX18_HW_GPIO_MUX */
	0,				/* CX18_HW_GPIO_RESET_CTRL */
	CX18_Z8F0811_IR_TX_I2C_ADDR,	/* CX18_HW_Z8F0811_IR_TX_HAUP */
	CX18_Z8F0811_IR_RX_I2C_ADDR,	/* CX18_HW_Z8F0811_IR_RX_HAUP */
	CX18_Z8F0811_IR_RX_I2C_ADDR,	/* CX18_HW_Z8F0811_IR_HAUP */
};

/* This array should match the CX18_HW_ defines */
@@ -61,8 +60,7 @@ static const u8 hw_bus[] = {
	0,	/* CX18_HW_418_AV */
	0,	/* CX18_HW_GPIO_MUX */
	0,	/* CX18_HW_GPIO_RESET_CTRL */
	0,	/* CX18_HW_Z8F0811_IR_TX_HAUP */
	0,	/* CX18_HW_Z8F0811_IR_RX_HAUP */
	0,	/* CX18_HW_Z8F0811_IR_HAUP */
};

/* This array should match the CX18_HW_ defines */
@@ -74,8 +72,7 @@ static const char * const hw_devicenames[] = {
	"cx23418_AV",
	"gpio_mux",
	"gpio_reset_ctrl",
	"ir_tx_z8f0811_haup",
	"ir_rx_z8f0811_haup",
	"ir_z8f0811_haup",
};

static int cx18_i2c_new_ir(struct cx18 *cx, struct i2c_adapter *adap, u32 hw,
@@ -90,7 +87,7 @@ static int cx18_i2c_new_ir(struct cx18 *cx, struct i2c_adapter *adap, u32 hw,

	/* Our default information for ir-kbd-i2c.c to use */
	switch (hw) {
	case CX18_HW_Z8F0811_IR_RX_HAUP:
	case CX18_HW_Z8F0811_IR_HAUP:
		init_data->ir_codes = RC_MAP_HAUPPAUGE;
		init_data->internal_get_key_func = IR_KBD_GET_KEY_HAUP_XVR;
		init_data->type = RC_PROTO_BIT_RC5 | RC_PROTO_BIT_RC6_MCE |
@@ -129,7 +126,7 @@ int cx18_i2c_register(struct cx18 *cx, unsigned idx)
		return sd != NULL ? 0 : -1;
	}

	if (hw & CX18_HW_IR_ANY)
	if (hw == CX18_HW_Z8F0811_IR_HAUP)
		return cx18_i2c_new_ir(cx, adap, hw, type, hw_addrs[idx]);

	/* Is it not an I2C device or one we do not wish to register? */
+7 −15
Original line number Diff line number Diff line
@@ -109,25 +109,17 @@
#define IVTV_HW_I2C_IR_RX_AVER		(1 << 16)
#define IVTV_HW_I2C_IR_RX_HAUP_EXT	(1 << 17) /* External before internal */
#define IVTV_HW_I2C_IR_RX_HAUP_INT	(1 << 18)
#define IVTV_HW_Z8F0811_IR_TX_HAUP	(1 << 19)
#define IVTV_HW_Z8F0811_IR_RX_HAUP	(1 << 20)
#define IVTV_HW_I2C_IR_RX_ADAPTEC	(1 << 21)

#define IVTV_HW_Z8F0811_IR_HAUP	(IVTV_HW_Z8F0811_IR_RX_HAUP | \
				 IVTV_HW_Z8F0811_IR_TX_HAUP)
#define IVTV_HW_Z8F0811_IR_HAUP		(1 << 19)
#define IVTV_HW_I2C_IR_RX_ADAPTEC	(1 << 20)

#define IVTV_HW_SAA711X   (IVTV_HW_SAA7115 | IVTV_HW_SAA7114)

#define IVTV_HW_IR_RX_ANY (IVTV_HW_I2C_IR_RX_AVER | \
#define IVTV_HW_IR_ANY (IVTV_HW_I2C_IR_RX_AVER | \
			IVTV_HW_I2C_IR_RX_HAUP_EXT | \
			IVTV_HW_I2C_IR_RX_HAUP_INT | \
			   IVTV_HW_Z8F0811_IR_RX_HAUP | \
			IVTV_HW_Z8F0811_IR_HAUP | \
			IVTV_HW_I2C_IR_RX_ADAPTEC)

#define IVTV_HW_IR_TX_ANY (IVTV_HW_Z8F0811_IR_TX_HAUP)

#define IVTV_HW_IR_ANY	  (IVTV_HW_IR_RX_ANY | IVTV_HW_IR_TX_ANY)

/* video inputs */
#define	IVTV_CARD_INPUT_VID_TUNER	1
#define	IVTV_CARD_INPUT_SVIDEO1 	2
+4 −16
Original line number Diff line number Diff line
@@ -117,8 +117,7 @@ static const u8 hw_addrs[] = {
	IVTV_AVERMEDIA_IR_RX_I2C_ADDR,	/* IVTV_HW_I2C_IR_RX_AVER */
	IVTV_HAUP_EXT_IR_RX_I2C_ADDR,	/* IVTV_HW_I2C_IR_RX_HAUP_EXT */
	IVTV_HAUP_INT_IR_RX_I2C_ADDR,	/* IVTV_HW_I2C_IR_RX_HAUP_INT */
	IVTV_Z8F0811_IR_TX_I2C_ADDR,	/* IVTV_HW_Z8F0811_IR_TX_HAUP */
	IVTV_Z8F0811_IR_RX_I2C_ADDR,	/* IVTV_HW_Z8F0811_IR_RX_HAUP */
	IVTV_Z8F0811_IR_RX_I2C_ADDR,	/* IVTV_HW_Z8F0811_IR_HAUP */
	IVTV_ADAPTEC_IR_ADDR,		/* IVTV_HW_I2C_IR_RX_ADAPTEC */
};

@@ -143,8 +142,7 @@ static const char * const hw_devicenames[] = {
	"ir_video",		/* IVTV_HW_I2C_IR_RX_AVER */
	"ir_video",		/* IVTV_HW_I2C_IR_RX_HAUP_EXT */
	"ir_video",		/* IVTV_HW_I2C_IR_RX_HAUP_INT */
	"ir_tx_z8f0811_haup",	/* IVTV_HW_Z8F0811_IR_TX_HAUP */
	"ir_rx_z8f0811_haup",	/* IVTV_HW_Z8F0811_IR_RX_HAUP */
	"ir_z8f0811_haup",	/* IVTV_HW_Z8F0811_IR_HAUP */
	"ir_video",		/* IVTV_HW_I2C_IR_RX_ADAPTEC */
};

@@ -181,18 +179,8 @@ static int ivtv_i2c_new_ir(struct ivtv *itv, u32 hw, const char *type, u8 addr)
	struct IR_i2c_init_data *init_data = &itv->ir_i2c_init_data;
	unsigned short addr_list[2] = { addr, I2C_CLIENT_END };

	/* Only allow one IR transmitter to be registered per board */
	if (hw & IVTV_HW_IR_TX_ANY) {
		if (itv->hw_flags & IVTV_HW_IR_TX_ANY)
			return -1;
		memset(&info, 0, sizeof(struct i2c_board_info));
		strlcpy(info.type, type, I2C_NAME_SIZE);
		return i2c_new_probed_device(adap, &info, addr_list, NULL)
							   == NULL ? -1 : 0;
	}

	/* Only allow one IR receiver to be registered per board */
	if (itv->hw_flags & IVTV_HW_IR_RX_ANY)
	if (itv->hw_flags & IVTV_HW_IR_ANY)
		return -1;

	/* Our default information for ir-kbd-i2c.c to use */
@@ -211,7 +199,7 @@ static int ivtv_i2c_new_ir(struct ivtv *itv, u32 hw, const char *type, u8 addr)
		init_data->type = RC_PROTO_BIT_RC5;
		init_data->name = itv->card_name;
		break;
	case IVTV_HW_Z8F0811_IR_RX_HAUP:
	case IVTV_HW_Z8F0811_IR_HAUP:
		/* Default to grey remote */
		init_data->ir_codes = RC_MAP_HAUPPAUGE;
		init_data->internal_get_key_func = IR_KBD_GET_KEY_HAUP_XVR;
Loading