diff options
author | Andrew de Quincey <adq_dvb@lidskialf.net> | 2006-03-30 13:53:35 -0500 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@infradead.org> | 2006-04-02 03:56:02 -0400 |
commit | 86f40cc3c994822ffeb226753526d87be21bd79a (patch) | |
tree | aeb2c3cc3989363a234298e1e2b80973f53657b5 /drivers/media/dvb/ttpci | |
parent | 5e85bd057f0cb29881e3d55d29f48bb55bd2f450 (diff) |
V4L/DVB (3673): Fix budget-av CAM reset
Unfortunately on the budget-av board, the CAM reset line is tied to the
frontend reset line, so resetting the CAM also zaps the frontend. This
breaks the tda1004x at least, and causes it to fail to tune until the
budget-av module is reloaded. This patch adds an exported function to dvb_frontend
that allows a card to forcibly reinitialise a frontend. The budget-av now
does this on CAM reset, which corrects this problem.
since they do not tie the CAM reset line to the frontend reset line.
Signed-off-by: Andrew de Quincey <adq_dvb@lidskialf.net>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Diffstat (limited to 'drivers/media/dvb/ttpci')
-rw-r--r-- | drivers/media/dvb/ttpci/budget-av.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/drivers/media/dvb/ttpci/budget-av.c b/drivers/media/dvb/ttpci/budget-av.c index 9dd4745f5312..8efe3ce5f66c 100644 --- a/drivers/media/dvb/ttpci/budget-av.c +++ b/drivers/media/dvb/ttpci/budget-av.c | |||
@@ -60,11 +60,11 @@ struct budget_av { | |||
60 | struct dvb_ca_en50221 ca; | 60 | struct dvb_ca_en50221 ca; |
61 | }; | 61 | }; |
62 | 62 | ||
63 | /* GPIO CI Connections: | 63 | /* GPIO Connections: |
64 | * 0 - Vcc/Reset (Reset is controlled by capacitor) | 64 | * 0 - Vcc/Reset (Reset is controlled by capacitor). Resets the frontend *AS WELL*! |
65 | * 1 - Attribute Memory | 65 | * 1 - CI memory select 0=>IO memory, 1=>Attribute Memory |
66 | * 2 - Card Enable (Active Low) | 66 | * 2 - CI Card Enable (Active Low) |
67 | * 3 - Card Detect | 67 | * 3 - CI Card Detect |
68 | */ | 68 | */ |
69 | 69 | ||
70 | /**************************************************************************** | 70 | /**************************************************************************** |
@@ -214,6 +214,9 @@ static int ciintf_slot_reset(struct dvb_ca_en50221 *ca, int slot) | |||
214 | while (--timeout > 0 && ciintf_read_attribute_mem(ca, slot, 0) != 0x1d) | 214 | while (--timeout > 0 && ciintf_read_attribute_mem(ca, slot, 0) != 0x1d) |
215 | msleep(100); | 215 | msleep(100); |
216 | 216 | ||
217 | /* reinitialise the frontend */ | ||
218 | dvb_frontend_reinitialise(budget_av->budget.dvb_frontend); | ||
219 | |||
217 | if (timeout <= 0) | 220 | if (timeout <= 0) |
218 | { | 221 | { |
219 | printk(KERN_ERR "budget-av: cam reset failed (timeout).\n"); | 222 | printk(KERN_ERR "budget-av: cam reset failed (timeout).\n"); |