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

Commit 4d7a2d67 authored by Jean Delvare's avatar Jean Delvare Committed by Mauro Carvalho Chehab
Browse files

V4L/DVB (11845): ir-kbd-i2c: Use initialization data



For specific boards, pass initialization data to ir-kbd-i2c instead
of modifying the settings after the device is initialized. This is
more efficient and easier to read.

Signed-off-by: default avatarJean Delvare <khali@linux-fr.org>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent c668f32d
Loading
Loading
Loading
Loading
+0 −3
Original line number Diff line number Diff line
@@ -287,10 +287,7 @@ void cx231xx_register_i2c_ir(struct cx231xx *dev)
		return;

	/* REVISIT: instantiate IR device */
}

void cx231xx_set_ir(struct cx231xx *dev, struct IR_i2c *ir)
{
	/* detect & configure */
	switch (dev->model) {

+0 −29
Original line number Diff line number Diff line
@@ -424,34 +424,6 @@ static u32 functionality(struct i2c_adapter *adap)
	return I2C_FUNC_SMBUS_EMUL | I2C_FUNC_I2C;
}

/*
 * attach_inform()
 * gets called when a device attaches to the i2c bus
 * does some basic configuration
 */
static int attach_inform(struct i2c_client *client)
{
	struct cx231xx_i2c *bus = i2c_get_adapdata(client->adapter);
	struct cx231xx *dev = bus->dev;

	switch (client->addr << 1) {
	case 0x8e:
		{
			struct IR_i2c *ir = i2c_get_clientdata(client);
			dprintk1(1, "attach_inform: IR detected (%s).\n",
				 ir->phys);
			cx231xx_set_ir(dev, ir);
			break;
		}
		break;

	default:
		break;
	}

	return 0;
}

static struct i2c_algorithm cx231xx_algo = {
	.master_xfer = cx231xx_i2c_xfer,
	.functionality = functionality,
@@ -462,7 +434,6 @@ static struct i2c_adapter cx231xx_adap_template = {
	.name = "cx231xx",
	.id = I2C_HW_B_CX231XX,
	.algo = &cx231xx_algo,
	.client_register = attach_inform,
};

static struct i2c_client cx231xx_client_template = {
+0 −1
Original line number Diff line number Diff line
@@ -739,7 +739,6 @@ extern struct cx231xx_board cx231xx_boards[];
extern struct usb_device_id cx231xx_id_table[];
extern const unsigned int cx231xx_bcount;
void cx231xx_register_i2c_ir(struct cx231xx *dev);
void cx231xx_set_ir(struct cx231xx *dev, struct IR_i2c *ir);
int cx231xx_tuner_callback(void *ptr, int component, int command, int arg);

/* Provided by cx231xx-input.c */
+15 −16
Original line number Diff line number Diff line
@@ -1915,6 +1915,7 @@ static int em28xx_hint_board(struct em28xx *dev)
void em28xx_register_i2c_ir(struct em28xx *dev)
{
	struct i2c_board_info info;
	struct IR_i2c_init_data init_data;
	const unsigned short addr_list[] = {
		 0x30, 0x47, I2C_CLIENT_END
	};
@@ -1923,12 +1924,9 @@ void em28xx_register_i2c_ir(struct em28xx *dev)
		return;

	memset(&info, 0, sizeof(struct i2c_board_info));
	memset(&init_data, 0, sizeof(struct IR_i2c_init_data));
	strlcpy(info.type, "ir_video", I2C_NAME_SIZE);
	i2c_new_probed_device(&dev->i2c_adap, &info, addr_list);
}

void em28xx_set_ir(struct em28xx *dev, struct IR_i2c *ir)
{
	/* detect & configure */
	switch (dev->model) {
	case (EM2800_BOARD_UNKNOWN):
@@ -1937,22 +1935,19 @@ void em28xx_set_ir(struct em28xx *dev, struct IR_i2c *ir)
		break;
	case (EM2800_BOARD_TERRATEC_CINERGY_200):
	case (EM2820_BOARD_TERRATEC_CINERGY_250):
		ir->ir_codes = ir_codes_em_terratec;
		ir->get_key = em28xx_get_key_terratec;
		snprintf(ir->name, sizeof(ir->name),
			 "i2c IR (EM28XX Terratec)");
		init_data.ir_codes = ir_codes_em_terratec;
		init_data.get_key = em28xx_get_key_terratec;
		init_data.name = "i2c IR (EM28XX Terratec)";
		break;
	case (EM2820_BOARD_PINNACLE_USB_2):
		ir->ir_codes = ir_codes_pinnacle_grey;
		ir->get_key = em28xx_get_key_pinnacle_usb_grey;
		snprintf(ir->name, sizeof(ir->name),
			 "i2c IR (EM28XX Pinnacle PCTV)");
		init_data.ir_codes = ir_codes_pinnacle_grey;
		init_data.get_key = em28xx_get_key_pinnacle_usb_grey;
		init_data.name = "i2c IR (EM28XX Pinnacle PCTV)";
		break;
	case (EM2820_BOARD_HAUPPAUGE_WINTV_USB_2):
		ir->ir_codes = ir_codes_hauppauge_new;
		ir->get_key = em28xx_get_key_em_haup;
		snprintf(ir->name, sizeof(ir->name),
			 "i2c IR (EM2840 Hauppauge)");
		init_data.ir_codes = ir_codes_hauppauge_new;
		init_data.get_key = em28xx_get_key_em_haup;
		init_data.name = "i2c IR (EM2840 Hauppauge)";
		break;
	case (EM2820_BOARD_MSI_VOX_USB_2):
		break;
@@ -1963,6 +1958,10 @@ void em28xx_set_ir(struct em28xx *dev, struct IR_i2c *ir)
	case (EM2800_BOARD_GRABBEEX_USB2800):
		break;
	}

	if (init_data.name)
		info.platform_data = &init_data;
	i2c_new_probed_device(&dev->i2c_adap, &info, addr_list);
}

void em28xx_card_setup(struct em28xx *dev)
+0 −22
Original line number Diff line number Diff line
@@ -451,27 +451,6 @@ static u32 functionality(struct i2c_adapter *adap)
	return I2C_FUNC_SMBUS_EMUL;
}

/*
 * attach_inform()
 * gets called when a device attaches to the i2c bus
 * does some basic configuration
 */
static int attach_inform(struct i2c_client *client)
{
	struct em28xx *dev = client->adapter->algo_data;
	struct IR_i2c *ir = i2c_get_clientdata(client);

	switch (client->addr << 1) {
	case 0x60:
	case 0x8e:
		dprintk1(1, "attach_inform: IR detected (%s).\n", ir->phys);
		em28xx_set_ir(dev, ir);
		break;
	}

	return 0;
}

static struct i2c_algorithm em28xx_algo = {
	.master_xfer   = em28xx_i2c_xfer,
	.functionality = functionality,
@@ -482,7 +461,6 @@ static struct i2c_adapter em28xx_adap_template = {
	.name = "em28xx",
	.id = I2C_HW_B_EM28XX,
	.algo = &em28xx_algo,
	.client_register = attach_inform,
};

static struct i2c_client em28xx_client_template = {
Loading