Commit 2d0235df authored by Andrew de Quincey's avatar Andrew de Quincey Committed by Mauro Carvalho Chehab

DVB (2428): Fixes for the topuptv/SCM mediaguard CAM module in KNC1 CI module


- Fixes for the topuptv/SCM mediaguard CAM module in KNC1 CI module
Signed-off-by: default avatarAndrew de Quincey <adq_dvb@lidskialf.net>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@brturbo.com.br>
parent 8a8e9c28
...@@ -127,7 +127,7 @@ static int ciintf_read_attribute_mem(struct dvb_ca_en50221 *ca, int slot, int ad ...@@ -127,7 +127,7 @@ static int ciintf_read_attribute_mem(struct dvb_ca_en50221 *ca, int slot, int ad
saa7146_setgpio(budget_av->budget.dev, 1, SAA7146_GPIO_OUTHI); saa7146_setgpio(budget_av->budget.dev, 1, SAA7146_GPIO_OUTHI);
udelay(1); udelay(1);
result = ttpci_budget_debiread(&budget_av->budget, DEBICICAM, address & 0xfff, 1, 0, 0); result = ttpci_budget_debiread(&budget_av->budget, DEBICICAM, address & 0xfff, 1, 0, 1);
if (result == -ETIMEDOUT) if (result == -ETIMEDOUT)
budget_av->slot_status = 0; budget_av->slot_status = 0;
...@@ -145,7 +145,7 @@ static int ciintf_write_attribute_mem(struct dvb_ca_en50221 *ca, int slot, int a ...@@ -145,7 +145,7 @@ static int ciintf_write_attribute_mem(struct dvb_ca_en50221 *ca, int slot, int a
saa7146_setgpio(budget_av->budget.dev, 1, SAA7146_GPIO_OUTHI); saa7146_setgpio(budget_av->budget.dev, 1, SAA7146_GPIO_OUTHI);
udelay(1); udelay(1);
result = ttpci_budget_debiwrite(&budget_av->budget, DEBICICAM, address & 0xfff, 1, value, 0, 0); result = ttpci_budget_debiwrite(&budget_av->budget, DEBICICAM, address & 0xfff, 1, value, 0, 1);
if (result == -ETIMEDOUT) if (result == -ETIMEDOUT)
budget_av->slot_status = 0; budget_av->slot_status = 0;
...@@ -192,7 +192,7 @@ static int ciintf_slot_reset(struct dvb_ca_en50221 *ca, int slot) ...@@ -192,7 +192,7 @@ static int ciintf_slot_reset(struct dvb_ca_en50221 *ca, int slot)
{ {
struct budget_av *budget_av = (struct budget_av *) ca->data; struct budget_av *budget_av = (struct budget_av *) ca->data;
struct saa7146_dev *saa = budget_av->budget.dev; struct saa7146_dev *saa = budget_av->budget.dev;
int timeout = 500; // 5 seconds (4.4.6 Ready) int timeout = 50; // 5 seconds (4.4.6 Ready)
if (slot != 0) if (slot != 0)
return -EINVAL; return -EINVAL;
...@@ -256,19 +256,37 @@ static int ciintf_poll_slot_status(struct dvb_ca_en50221 *ca, int slot, int open ...@@ -256,19 +256,37 @@ static int ciintf_poll_slot_status(struct dvb_ca_en50221 *ca, int slot, int open
{ {
struct budget_av *budget_av = (struct budget_av *) ca->data; struct budget_av *budget_av = (struct budget_av *) ca->data;
struct saa7146_dev *saa = budget_av->budget.dev; struct saa7146_dev *saa = budget_av->budget.dev;
int cam_present = 0;
if (slot != 0) if (slot != 0)
return -EINVAL; return -EINVAL;
if (!budget_av->slot_status) { if (!budget_av->slot_status)
{
// first of all test the card detect line
saa7146_setgpio(saa, 3, SAA7146_GPIO_INPUT); saa7146_setgpio(saa, 3, SAA7146_GPIO_INPUT);
udelay(1); udelay(1);
if (saa7146_read(saa, PSR) & MASK_06) if (saa7146_read(saa, PSR) & MASK_06)
{ {
cam_present = 1;
}
saa7146_setgpio(saa, 3, SAA7146_GPIO_OUTLO);
// that is unreliable however, so try and read from IO memory
if (!cam_present)
{
saa7146_setgpio(budget_av->budget.dev, 1, SAA7146_GPIO_OUTLO);
if (ttpci_budget_debiread(&budget_av->budget, DEBICICAM, 0, 1, 0, 1) != -ETIMEDOUT)
{
cam_present = 1;
}
}
// did we find something?
if (cam_present) {
printk(KERN_INFO "budget-av: cam inserted\n"); printk(KERN_INFO "budget-av: cam inserted\n");
budget_av->slot_status = 1; budget_av->slot_status = 1;
} }
saa7146_setgpio(saa, 3, SAA7146_GPIO_OUTLO);
} else if (!open) { } else if (!open) {
saa7146_setgpio(budget_av->budget.dev, 1, SAA7146_GPIO_OUTLO); saa7146_setgpio(budget_av->budget.dev, 1, SAA7146_GPIO_OUTLO);
if (ttpci_budget_debiread(&budget_av->budget, DEBICICAM, 0, 1, 0, 1) == -ETIMEDOUT) if (ttpci_budget_debiread(&budget_av->budget, DEBICICAM, 0, 1, 0, 1) == -ETIMEDOUT)
......
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