Commit 78f2e672 authored by Andy Walls's avatar Andy Walls Committed by Mauro Carvalho Chehab

V4L/DVB (12699): cx18: ir-kbd-i2c initialization data should point to a persistent object

ir-kbd-i2c's ir_probe() function can be called much later (i.e. at ir-kbd-i2c
module load), than the lifetime of a struct IR_i2c_init_data allocated off of
the stack in cx18_i2c_new_ir() at registration time.  Make sure we pass
a pointer to a persistent IR_i2c_init_data object at i2c registration time.

Thanks to Brian Rogers for pointing out a solution, and Dustin Mitchell for
testing against a 2.6.30 kernel.
Reported-by: default avatarDustin Mitchell <soxslayer@gmail.com>
Reported-by: default avatarBrian Rogers <brian@xyzw.org>
Tested-by: default avatarDustin Mitchell <soxslayer@gmail.com>
Signed-off-by: default avatarAndy Walls <awalls@radix.net>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent d2ebd0f8
...@@ -97,11 +97,17 @@ static const char * const hw_devicenames[] = { ...@@ -97,11 +97,17 @@ static const char * const hw_devicenames[] = {
"ir_rx_z8f0811_haup", "ir_rx_z8f0811_haup",
}; };
static const struct IR_i2c_init_data z8f0811_ir_init_data = {
.ir_codes = &ir_codes_hauppauge_new_table,
.internal_get_key_func = IR_KBD_GET_KEY_HAUP_XVR,
.type = IR_TYPE_RC5,
.name = "CX23418 Z8F0811 Hauppauge",
};
static int cx18_i2c_new_ir(struct i2c_adapter *adap, u32 hw, const char *type, static int cx18_i2c_new_ir(struct i2c_adapter *adap, u32 hw, const char *type,
u8 addr) u8 addr)
{ {
struct i2c_board_info info; struct i2c_board_info info;
struct IR_i2c_init_data ir_init_data;
unsigned short addr_list[2] = { addr, I2C_CLIENT_END }; unsigned short addr_list[2] = { addr, I2C_CLIENT_END };
memset(&info, 0, sizeof(struct i2c_board_info)); memset(&info, 0, sizeof(struct i2c_board_info));
...@@ -110,12 +116,7 @@ static int cx18_i2c_new_ir(struct i2c_adapter *adap, u32 hw, const char *type, ...@@ -110,12 +116,7 @@ static int cx18_i2c_new_ir(struct i2c_adapter *adap, u32 hw, const char *type,
/* Our default information for ir-kbd-i2c.c to use */ /* Our default information for ir-kbd-i2c.c to use */
switch (hw) { switch (hw) {
case CX18_HW_Z8F0811_IR_RX_HAUP: case CX18_HW_Z8F0811_IR_RX_HAUP:
memset(&ir_init_data, 0, sizeof(struct IR_i2c_init_data)); info.platform_data = &z8f0811_ir_init_data;
ir_init_data.ir_codes = &ir_codes_hauppauge_new_table;
ir_init_data.internal_get_key_func = IR_KBD_GET_KEY_HAUP_XVR;
ir_init_data.type = IR_TYPE_RC5;
ir_init_data.name = "CX23418 Z8F0811 Hauppauge";
info.platform_data = &ir_init_data;
break; break;
default: default:
break; break;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment