V4L/DVB (11745): pvrusb2: Update to work with upcoming ir_video changes in v4l-dvb core
The ir-kbd-i2c module is about to be updated to match the new style i2c binding model. These pvrusb2 changes maintain compatibility with that change. Note that this does not actually break anything even without the expected ir-kbd-i2c changes yet because previously the pvrusb2 didn't autoload ir-kbd-i2c anyway. Signed-off-by: Mike Isely <isely@pobox.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
27eab3840b
commit
cd85b7afe1
@ -42,6 +42,18 @@ static int ir_mode[PVR_NUM] = { [0 ... PVR_NUM-1] = 1 };
|
||||
module_param_array(ir_mode, int, NULL, 0444);
|
||||
MODULE_PARM_DESC(ir_mode,"specify: 0=disable IR reception, 1=normal IR");
|
||||
|
||||
static int pvr2_disable_ir_video;
|
||||
module_param_named(disable_autoload_ir_video, pvr2_disable_ir_video,
|
||||
int, S_IRUGO|S_IWUSR);
|
||||
MODULE_PARM_DESC(disable_autoload_ir_video,
|
||||
"1=do not try to autoload ir_video IR receiver");
|
||||
|
||||
/* Mapping of IR schemes to known I2C addresses - if any */
|
||||
static const unsigned char ir_video_addresses[] = {
|
||||
[PVR2_IR_SCHEME_29XXX] = 0x18,
|
||||
[PVR2_IR_SCHEME_24XXX] = 0x18,
|
||||
};
|
||||
|
||||
static int pvr2_i2c_write(struct pvr2_hdw *hdw, /* Context */
|
||||
u8 i2c_addr, /* I2C address we're talking to */
|
||||
u8 *data, /* Data to write */
|
||||
@ -559,6 +571,31 @@ static void do_i2c_scan(struct pvr2_hdw *hdw)
|
||||
printk(KERN_INFO "%s: i2c scan done.\n", hdw->name);
|
||||
}
|
||||
|
||||
static void pvr2_i2c_register_ir(struct pvr2_hdw *hdw)
|
||||
{
|
||||
struct i2c_board_info info;
|
||||
unsigned char addr = 0;
|
||||
if (pvr2_disable_ir_video) {
|
||||
pvr2_trace(PVR2_TRACE_INFO,
|
||||
"Automatic binding of ir_video has been disabled.");
|
||||
return;
|
||||
}
|
||||
if (hdw->ir_scheme_active < ARRAY_SIZE(ir_video_addresses)) {
|
||||
addr = ir_video_addresses[hdw->ir_scheme_active];
|
||||
}
|
||||
if (!addr) {
|
||||
/* The device either doesn't support I2C-based IR or we
|
||||
don't know (yet) how to operate IR on the device. */
|
||||
return;
|
||||
}
|
||||
pvr2_trace(PVR2_TRACE_INFO,
|
||||
"Binding ir_video to i2c address 0x%02x.", addr);
|
||||
memset(&info, 0, sizeof(struct i2c_board_info));
|
||||
strlcpy(info.type, "ir_video", I2C_NAME_SIZE);
|
||||
info.addr = addr;
|
||||
i2c_new_device(&hdw->i2c_adap, &info);
|
||||
}
|
||||
|
||||
void pvr2_i2c_core_init(struct pvr2_hdw *hdw)
|
||||
{
|
||||
unsigned int idx;
|
||||
@ -614,6 +651,8 @@ void pvr2_i2c_core_init(struct pvr2_hdw *hdw)
|
||||
}
|
||||
}
|
||||
if (i2c_scan) do_i2c_scan(hdw);
|
||||
|
||||
pvr2_i2c_register_ir(hdw);
|
||||
}
|
||||
|
||||
void pvr2_i2c_core_done(struct pvr2_hdw *hdw)
|
||||
|
Loading…
Reference in New Issue
Block a user