1 | // SPDX-License-Identifier: GPL-2.0-or-later |
2 | /* |
3 | * Driver for the Conexant CX23885/7/8 PCIe bridge |
4 | * |
5 | * AV device support routines - non-input, non-vl42_subdev routines |
6 | * |
7 | * Copyright (C) 2010 Andy Walls <awalls@md.metrocast.net> |
8 | */ |
9 | |
10 | #include "cx23885.h" |
11 | #include "cx23885-av.h" |
12 | #include "cx23885-video.h" |
13 | |
14 | void cx23885_av_work_handler(struct work_struct *work) |
15 | { |
16 | struct cx23885_dev *dev = |
17 | container_of(work, struct cx23885_dev, cx25840_work); |
18 | bool handled = false; |
19 | |
20 | v4l2_subdev_call(dev->sd_cx25840, core, interrupt_service_routine, |
21 | PCI_MSK_AV_CORE, &handled); |
22 | |
23 | /* Getting here with the interrupt not handled |
24 | then probbaly flatiron does have pending interrupts. |
25 | */ |
26 | if (!handled) { |
27 | /* clear left and right adc channel interrupt request flag */ |
28 | cx23885_flatiron_write(dev, reg: 0x1f, |
29 | data: cx23885_flatiron_read(dev, reg: 0x1f) | 0x80); |
30 | cx23885_flatiron_write(dev, reg: 0x23, |
31 | data: cx23885_flatiron_read(dev, reg: 0x23) | 0x80); |
32 | } |
33 | |
34 | cx23885_irq_enable(dev, PCI_MSK_AV_CORE); |
35 | } |
36 | |