mirror of
https://github.com/DigitalDevices/dddvb.git
synced 2023-10-10 13:37:43 +02:00
allow setting CMDREG_SW during init (disabled for now)
This commit is contained in:
parent
d995849fdb
commit
90e6d4806b
@ -194,7 +194,7 @@ static void dvb_ca_en50221_thread_wakeup(struct dvb_ca_private *ca);
|
|||||||
static int dvb_ca_en50221_read_data(struct dvb_ca_private *ca, int slot,
|
static int dvb_ca_en50221_read_data(struct dvb_ca_private *ca, int slot,
|
||||||
u8 *ebuf, int ecount);
|
u8 *ebuf, int ecount);
|
||||||
static int dvb_ca_en50221_write_data(struct dvb_ca_private *ca, int slot,
|
static int dvb_ca_en50221_write_data(struct dvb_ca_private *ca, int slot,
|
||||||
u8 *ebuf, int ecount);
|
u8 *ebuf, int ecount, u8 flags);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Safely find needle in haystack.
|
* Safely find needle in haystack.
|
||||||
@ -377,7 +377,7 @@ static int dvb_ca_en50221_link_init(struct dvb_ca_private *ca, int slot)
|
|||||||
ret = dvb_ca_en50221_wait_if_status(ca, slot, STATUSREG_FR, HZ / 10);
|
ret = dvb_ca_en50221_wait_if_status(ca, slot, STATUSREG_FR, HZ / 10);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
ret = dvb_ca_en50221_write_data(ca, slot, buf, 2);
|
ret = dvb_ca_en50221_write_data(ca, slot, buf, 2, CMDREG_SW);
|
||||||
if (ret != 2)
|
if (ret != 2)
|
||||||
return -EIO;
|
return -EIO;
|
||||||
ret = ca->pub->write_cam_control(ca->pub, slot, CTRLIF_COMMAND, IRQEN);
|
ret = ca->pub->write_cam_control(ca->pub, slot, CTRLIF_COMMAND, IRQEN);
|
||||||
@ -789,14 +789,14 @@ exit:
|
|||||||
* return: Number of bytes written, or < 0 on error.
|
* return: Number of bytes written, or < 0 on error.
|
||||||
*/
|
*/
|
||||||
static int dvb_ca_en50221_write_data(struct dvb_ca_private *ca, int slot,
|
static int dvb_ca_en50221_write_data(struct dvb_ca_private *ca, int slot,
|
||||||
u8 *buf, int bytes_write)
|
u8 *buf, int bytes_write, u8 flags)
|
||||||
{
|
{
|
||||||
struct dvb_ca_slot *sl = &ca->slot_info[slot];
|
struct dvb_ca_slot *sl = &ca->slot_info[slot];
|
||||||
int status;
|
int status;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
dprintk("%s\n", __func__);
|
dprintk("%s\n", __func__);
|
||||||
|
flags=0;
|
||||||
/* sanity check */
|
/* sanity check */
|
||||||
if (bytes_write > sl->link_buf_size)
|
if (bytes_write > sl->link_buf_size)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
@ -824,7 +824,7 @@ static int dvb_ca_en50221_write_data(struct dvb_ca_private *ca, int slot,
|
|||||||
|
|
||||||
/* OK, set HC bit */
|
/* OK, set HC bit */
|
||||||
status = ca->pub->write_cam_control(ca->pub, slot, CTRLIF_COMMAND,
|
status = ca->pub->write_cam_control(ca->pub, slot, CTRLIF_COMMAND,
|
||||||
IRQEN | CMDREG_HC);
|
IRQEN | CMDREG_HC | flags);
|
||||||
if (status)
|
if (status)
|
||||||
goto exit;
|
goto exit;
|
||||||
|
|
||||||
@ -894,7 +894,7 @@ static int dvb_ca_en50221_write_data(struct dvb_ca_private *ca, int slot,
|
|||||||
buf[0], (buf[1] & 0x80) == 0, bytes_write);
|
buf[0], (buf[1] & 0x80) == 0, bytes_write);
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
ca->pub->write_cam_control(ca->pub, slot, CTRLIF_COMMAND, IRQEN);
|
ca->pub->write_cam_control(ca->pub, slot, CTRLIF_COMMAND, IRQEN | flags);
|
||||||
|
|
||||||
exitnowrite:
|
exitnowrite:
|
||||||
return status;
|
return status;
|
||||||
@ -1529,7 +1529,7 @@ static ssize_t dvb_ca_en50221_io_write(struct file *file,
|
|||||||
|
|
||||||
mutex_lock(&sl->slot_lock);
|
mutex_lock(&sl->slot_lock);
|
||||||
status = dvb_ca_en50221_write_data(ca, slot, fragbuf,
|
status = dvb_ca_en50221_write_data(ca, slot, fragbuf,
|
||||||
fraglen + 2);
|
fraglen + 2, 0);
|
||||||
mutex_unlock(&sl->slot_lock);
|
mutex_unlock(&sl->slot_lock);
|
||||||
if (status == (fraglen + 2)) {
|
if (status == (fraglen + 2)) {
|
||||||
written = 1;
|
written = 1;
|
||||||
|
Loading…
Reference in New Issue
Block a user