Commit 81f287da authored by Andy Walls's avatar Andy Walls Committed by Mauro Carvalho Chehab

V4L/DVB: cx23885: For CX23888 IR, configure the IO pin mux IR pins explcitly

Explicitly configure the IR Tx and IR Rx pins to be driven by the
IR Rx and Tx pads from the AV core for CX23888 IR.

For the HVR-1850 and HVR-1290 configure the IR Tx level inversion,
so the Tx LED is off when idle.
Signed-off-by: default avatarAndy Walls <awalls@md.metrocast.net>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 5a28d9a3
...@@ -962,6 +962,24 @@ void cx23885_gpio_setup(struct cx23885_dev *dev) ...@@ -962,6 +962,24 @@ void cx23885_gpio_setup(struct cx23885_dev *dev)
int cx23885_ir_init(struct cx23885_dev *dev) int cx23885_ir_init(struct cx23885_dev *dev)
{ {
static struct v4l2_subdev_io_pin_config ir_pin_cfg[] = {
{
.flags = V4L2_SUBDEV_IO_PIN_INPUT,
.pin = CX23885_PIN_IR_RX_GPIO19,
.function = CX23885_PAD_IR_RX,
.value = 0,
.strength = CX25840_PIN_DRIVE_MEDIUM,
}, {
.flags = V4L2_SUBDEV_IO_PIN_OUTPUT,
.pin = CX23885_PIN_IR_TX_GPIO20,
.function = CX23885_PAD_IR_TX,
.value = 0,
.strength = CX25840_PIN_DRIVE_MEDIUM,
}
};
const size_t ir_pin_cfg_count = ARRAY_SIZE(ir_pin_cfg);
struct v4l2_subdev_ir_parameters params;
int ret = 0; int ret = 0;
switch (dev->board) { switch (dev->board) {
case CX23885_BOARD_HAUPPAUGE_HVR1250: case CX23885_BOARD_HAUPPAUGE_HVR1250:
...@@ -982,7 +1000,20 @@ int cx23885_ir_init(struct cx23885_dev *dev) ...@@ -982,7 +1000,20 @@ int cx23885_ir_init(struct cx23885_dev *dev)
if (ret) if (ret)
break; break;
dev->sd_ir = cx23885_find_hw(dev, CX23885_HW_888_IR); dev->sd_ir = cx23885_find_hw(dev, CX23885_HW_888_IR);
v4l2_subdev_call(dev->sd_cx25840, core, s_io_pin_config,
ir_pin_cfg_count, ir_pin_cfg);
dev->pci_irqmask |= PCI_MSK_IR; dev->pci_irqmask |= PCI_MSK_IR;
/*
* For these boards we need to invert the Tx output via the
* IR controller to have the LED off while idle
*/
v4l2_subdev_call(dev->sd_ir, ir, tx_g_parameters, &params);
params.enable = false;
params.shutdown = false;
params.invert_level = true;
v4l2_subdev_call(dev->sd_ir, ir, tx_s_parameters, &params);
params.shutdown = true;
v4l2_subdev_call(dev->sd_ir, ir, tx_s_parameters, &params);
break; break;
case CX23885_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL_EXP: case CX23885_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL_EXP:
request_module("ir-kbd-i2c"); request_module("ir-kbd-i2c");
......
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